以前看过Hadoop,熟悉Hadoop的具体流程,也看了部分源码,由于Spark比Hadoop高效,想一直看也没来得及,今天准备玩玩Spark,先从安装开始。
版本
Java:1.8
Hadoop:2.7.0
Spark:2.1.0
安装Java与Hadoop主要步骤
- 配置jdk、Hadoop环境变量
- 更改hosts文件
- 配置SSH免密码登录
- 修改Hadoop配置文件
- 将配置好的jdk、Hadoop分发到各个节点
- 格式化Hadoop
Hadoop-2.7.0/etc/hadoop 目录里面
本人将Java,Hadoop分别安装在,
/home/my105/jdk1.9
/home/my105/hadoop-2.7.0
hadoop-env.sh
export JAVA_HOME=/home/my105/jdk1.8
配置core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/my105/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
配置YARN,yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resouremanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framwork.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
配置hdfs-site.xml
此处我将NameNode和DataNode目录放:/home/my105/hadoop-2.7.0/nodetemp 中的两个文件,安装完成后执行:
sudo chmod 777 hadoop-2.7.0 -R
以上便于hadoop文件有权限创建上面的文件
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/my105/hadoop-2.7.0/nodetemp/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/my105/hadoop-2.7.0/nodetemp/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
配置master与slave文件
如果没有发现master文件,自己创建一个
master文件:
master
slaves文件:
slave1
slave2
slave3
格式化 与启动
将配置好的Hadoop与JDK分别scp到各个Slave中,然后格式化,启动,进入Hadoop-2.7.0/ 目录
./bin/hadoop namenode - format
./sbin/start-all.sh
最后输入:jps,查看启动进程
master主机:
10648 ResourceManager
10265 NameNode
12939 Jps
10494 SecondaryNameNode
slave主机:
6977 NodeManager
7202 DataNode
7821 Jps
错误分析
如果没有出现上面的,或者出现错误,进入hadoop-2.7.0/logs
我一开始格式化后再重新格式化后,发现slave主机的DataNode启动不了,直接进入logs
vi hadoop-my105-datanode-slave1.log
发现了如下错误
org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to master
就是master和slave主机生成的NameNode和DataNode目录文件不一样,所以先把生成的文件删除,然后再格式化,或者将Uuid 拷贝过去
Spark 安装
先进入官网下载一个
版本:Spark-2.1.0
安装流程
- 配置文件
- 分发到各个节点
- 启动
由于是预先安装得Hadoop,所以在此处选择without hadoop
配置文件,可能没有,将spark-2.1.0/conf 下的部分带template的改为如下名字,并添加
配置spark-env.sh
export JAVA_HOME=/home/my105/jdk1.8
export HADOOP_HOME=/home/my105/hadoop-2.7.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_IP=master
SPARK_LOCAL_DIRS=/home/my105/spark-2.1.0
SPARK_DRIVER_MEMORY=1G
配置slvaes
slave1
slave2
slave3
启动集群
./sbin/start-all.sh
启动,然后jps会发现如下内容
master主机:Maser
10648 ResourceManager
10265 NameNode
13018 Jps
10494 SecondaryNameNode
11855 Master
slave主机:Worker
6977 NodeManager
7202 DataNode
7895 Jps
7498 Worker