搭建Hadoop的HA叢集的搭建
阿新 • • 發佈:2018-11-28
1.上傳安裝包
2.解壓
tar -xvzf hadoop-2.7.6.tar.gz
3.配置環境變數
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
驗證:hadoop version
4)修改hadoop的配置檔案
cd $HADOOP_HOME/etc/hadoop
hadoop-env.sh
修改:
export JAVA_HOME=/usr/local/jdk1.8.0_191
core-site.xml
<!-- 指定 hdfs 的 訪問入口 namenode的入口 這裡的bd1807 就相當於兩個namenode的組名--> <property> <name>fs.defaultFS</name> <value>hdfs://rashaun/</value> </property> <!-- 指定 hadoop 資料儲存目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/data/hadoopdata/</value> </property> <!-- 指定 zookeeper 叢集訪問地址 --> <property> <name>ha.zookeeper.quorum</name> <value>ali:2181,tencent:2181,huawei:2181</value> </property>
hdfs-site.xml
<!-- 指定副本數 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!--指定 hdfs 兩個namenode的 nameservice 為 bd1807,需要和 core-site.xml 中保持一致--> <property> <name>dfs.nameservices</name> <value>rashaun</value> </property> <!-- bd1807 下面有兩個 NameNode,分別是 nn1,nn2 --> <property> <name>dfs.ha.namenodes.rashaun</name> <value>nn1,nn2</value> </property> <!-- nn1 的 RPC 通訊地址 --> <property> <name>dfs.namenode.rpc-address.bd1807.nn1</name> <value>ali:9000</value> </property> <!-- nn1 的 http 通訊地址 web --> <property> <name>dfs.namenode.http-address.bd1807.nn1</name> <value>ali:50070</value> </property> <!-- nn2 的 RPC 通訊地址 --> <property> <name>dfs.namenode.rpc-address.bd1807.nn2</name> <value>tencent:9000</value> </property> <!-- nn2 的 http 通訊地址 --> <property> <name>dfs.namenode.http-address.bd1807.nn2</name> <value>tencent:50070</value> </property> <!-- 指定 NameNode 的 edits 元資料在 JournalNode 上的存放位置 埠8485--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://ali:8485;tencent:8485;huawei:8485/bd1807</value> </property> <!-- 指定 JournalNode 在本地磁碟存放資料的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hadoop/data/hadoopdata/journaldata</value> </property> <!-- 開啟 NameNode 失敗自動切換 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失敗自動切換實現方式 --> <!-- 此處配置在安裝的時候切記檢查不要換行--> <property> <name>dfs.client.failover.proxy.provider.rashaun</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用 sshfence 隔離機制時需要 ssh 免登陸 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!-- 配置 sshfence 隔離機制超時時間 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property>
yarn-site.xml
<!-- 開啟 RM 高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定 RM 的 cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定 RM 的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分別指定 RM 的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>ali</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>tencent</value>
</property>
<!-- 指定 zk 叢集地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>ali:2181,tencent:2181,huawei:2181</value>
</property>
<!-- 要執行 MapReduce 程式必須配置的附屬服務 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 開啟 YARN 叢集的日誌聚合功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- YARN 叢集的聚合日誌最長保留時長 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- 啟用自動恢復 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 制定 resourcemanager 的狀態資訊儲存在 zookeeper 叢集上-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<!-- 指定 mr 框架為 yarn 方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 設定 mapreduce rpc的歷史伺服器地址和埠號 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>huawei:10020</value>
</property>
<!-- mapreduce 歷史伺服器的 web 訪問地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>huawei:19888</value>
</property>
slaves 從節點nodemanager datanode
ali
tencent
huawei
5)將hadoop的安裝包遠端傳送到其他節點
scp -r hadoop-2.7.6 hadoop02:/home/hadoop/apps/
scp -r hadoop-2.7.6 hadoop03:/home/hadoop/apps/
scp -r hadoop-2.7.6 hadoop04:/home/hadoop/apps/
source /etc/profile
hadoop version
6)從這一步開始 嚴格按照順序執行
1)先啟動journalnode
ali hadoop-daemon.sh start journalnode
tencent hadoop-daemon.sh start journalnode
huawei hadoop-daemon.sh start journalnode
2)格式化namenode 在一個namenode上執行格式化命令
在ali執行
hadoop namenode -format
3)將ali上的namenode的相關資料檔案遠端併發送到另一個namenode節點tencent
scp -r dfs tencent:/home/hadoop/data/hadoopdata/
4)先啟動zk
ali
tencent
huawei
zkServer.sh start
5)格式化zkfc 選擇一個namenode的節點
hdfs zkfc -formatZK
成功標誌:
Successfully created /hadoop-ha/rashaun in ZK
6)啟動叢集
啟動hdfs
start-dfs.sh 任意節點執行
啟動yarn
start-yarn.sh 最好在resourcemanager的節點
在哪一個節點執行上面的命令 在哪一個節點啟動resourcemanager
另一個節點手動啟動
yarn-daemon.sh start resourcemanager
注意:
單獨啟動zkfc的命令:
hadoop-daemon.sh start zkfc
ha驗證:
先驗證hdfs的主備切換:
namenode 2個
http://ali:50070
http://tencent:50070
yarn的測試
http://ali:8088
http://tencent:8088
mr 切換yarn的主節點
關機:
先關閉叢集:
1)關閉hdfs
stop-dfs.sh
2)關閉yarn
stop-yarn.sh
3)關閉zk
zkServer.sh stop
再關機