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
