hadoop+spark集群搭建
本次实验环境:两台hadoop+两台spark组成集群
环境准备:
1. 两个主机实现ssh无密钥认证,包括本机与本机的免密钥认证:
ssh-keygren :生成一对密钥
ssh-copy-id : 把公钥发给对方服务器
2. 集群间需实现时间同步:
ntpdate
3. 配置主机名:
192.168.133.128 master
192.168.133.129 node
4. 下载hadoop-spark压缩包,解压,尽量两台服务器的hadoop-spark安装路径是一致的
5. 配置安装JAVA环境并配置JAVA和hadoop环境变量:
export JAVA_HOME=/usr/java/jdk1.8.0_51/
export HADOOP_HOME=/opt/hadoop-spark/hadoop/hadoop-2.9.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
安装hdoop集群:
在master主机上配置:
cd $HADOOP_HOME/etc/hadoop/
vi core-site.xml
<configuration>
<!--配置HDFS的NameNode-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!--配置DataNode保存数据的位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-spark/hadoop/hadoop-2.9.1/tmp</value>
</property>
</configuration>
vi hdfs-site.xml
<configuration>
<!--配置HDFS的冗余度-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置是否检查权限-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<!--配置namenode存储路径-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/cluster_hadoop/hdfs/nn</value>
</property>
<!--配置datanode存储路径-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/cluster_hadoop/hdfs/dn</value>
</property>
<!--配置second namenode的映像存储路径-->
<property>
<name>fs.checkpoint.dir</name>
<value>file:///data/cluster_hadoop/hdfs/snn</value>
</property>
<!--配置second namenode合并元数据时的临时编辑存储路径-->
<property>
<name>fs.checkpoint.edits.dir</name>
<value>file:///data/cluster_hadoop/hdfs/snn</value>
</property>
</configuration>
如果namenode,second namenode, datanode没有设置存储路径,则默认存储到$(hadoop.tmp.dir)路径下
vi yarn-site.xml:
<configuration>
<!--配置resourcemanager监听地址及端口-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<!--配置resourcemanager的调度器监听地址及端口,默认0.0.0.0:8030-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<!--NodeManager通过该地址向RM汇报心跳,领取任务等,默认0.0.0.0:8031-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<!--管理员的访问ResourceManager的地址端口,默认0.0.0.0:8033-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<!--配置resourcemanagerweb接口地址及端口,默认0.0.0.0:8088-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
</configuration>
注意:yarn-site.xml里面的配置指明的是master的地址,没有解析域名的可以用IP
vi mapred-site.xml
<configuration>
<!--配置MR运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
此文件默认没有,但是在该目录下有个模板文件为mapred-site.xml.template,可以复制一份为mapred-site.xml
vi slaves
master
node
此配置文件用来指明数据节点的,本次使用master服务器既是master节点也是node节点
新建hadoop存储路径:
mkdir -p /data/cluster_hadoop/hdfs/nn
mkdir -p /data/cluster_hadoop/hdfs/snn
mkdir -p /data/cluster_hadoop/hdfs/dn
配置slave节点:
slave节点的配置与master节点的配置相同,只是启动的服务不同,把以上编辑的文件拷贝到slave节点相同的位置就可以了
配置存储路径:
mkdir -p /data/cluster_hadoop/hdfs/nn
mkdir -p /data/cluster_hadoop/hdfs/snn
mkdir -p /data/cluster_hadoop/hdfs/dn
格式化hdfs:
hdfs namenode -format
其输出结果会有大量的信息,如显示类似'INFO commmon.Storage:Storage dirctory /PATH/TO/NN has been successfully formatted'的结果表示格式化操作已经完成
启动Hadoop进程:
(1)分别启动,分别手动启动master的服务以及slave服务;
主要用到两个脚本:hadoop-daemon.sh和yarn-daemons.sh。
(2)master自动启动自身的服务以及slave的服务(需要配置master与slave能进行免密钥认证)
这里用第二种方法:
./sbin/start-dfs.sh
./sbin/start-yarn.sh
master会启动进程:
[root@accur sbin]# jps
23137 ResourceManager
17224 DataNode
23753 NodeManager
20942 NameNode
17518 SecondaryNameNode
slave会启动进程:
[root@accur sbin]# jps
7089 DataNode
9999 NodeManager
hadoop相关web接口:
http://master:8088/ #8088端口冲突了会自动+1,或者编辑start-master.sh修改端口
spark集群安装:
在两台机器上spark环境变量:
vi conf/spark-env.sh
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-spark/hadoop/hadoop-2.9.1/bin/hadoop classpath)
export JAVA_HOME=/usr/java/jdk1.8.0_51/
export SPARK_MASTER_HOST=master
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export MASTER=spark://master:7077
配置worker节点:
vi conf/slaves:
master #此时master也作为slaves节点
node
运行master节点:
./sbin/start-master.sh
运行worker节点
./sbin/start-slave.sh spark://master:7077
测试worker节点能否与master通信:
/bin/spark-shell --master spark://master:7077