1. 程式人生 > >Hadoop-HA配置詳細步驟

Hadoop-HA配置詳細步驟

eno col ice nbsp 版本 files tab des frame

1. HA服務器配置

對hdfs做高可用

1.1服務器詳情

服務器:centos7

Hadoop:2.6.5

Jdk:1.8

共四臺服務器

192.168.1.111 node1

192.168.1.112 node2

192.168.1.113 node3

192.168.1.114 node4

在每臺服務器的/etc/hosts文件中添加上邊四行內容

服務器分配

NN

DN

ZK

ZKFC

JN

RM

DM

Node1

1

1

1

1

Node2

1

1

1

1

1

1

Node3

1

1

1

1

Node4

1

1

1

Journalnode:需要為奇數個

Zookeeper:需要為奇數個

ZKFS和NN在同臺服務器

DM和DN保持一致。

1.2配置免密登錄

  • 在每臺服務器分別生成各自的公鑰私鑰

  命令如下

  ssh-keygen –t rsa –P ‘’ –f ~/.ssh/id_rsa

  此時查看 ~/.ssh目錄下,會有兩個文件,id_rsa(私鑰)、id_rsa.pub(公鑰)

  • 將id_rsa.pub文件內容拼接到每臺服務器的~/.ssh/authorized_keys文件

  命令如下

  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  每臺服務器都需要拼接四次,包括本節點及其它三個節點的,配置完成後,即可免密登錄其它節點

1.3Hadoop配置

此處使用的hadoop版本為2.6.5

1.3.1 hadoop-env.sh

編輯/etc/hadoop/hadoop-env.sh文件

找到JAVA_HOME配置位置,修改JAVA_HOME如下

export JAVA_HOME= /home/java/jdk1.8.0_144

1.3.2 hdfs-site.xml(/etc/hadoop/hdfs-site.xml)

  • 配置nameservice
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>

  • 再配置所有namenode的名字 
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>

註意:此處的mycluster和上邊指定的服務名一致,nn1 nn2位兩個namenode名稱

  • 配置RPC協議的端口,兩個namenode都要配置
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>machine1.example.com:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>machine2.example.com:8020</value>
</property>

  • 配置HTTP協議的端口和主機
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>node1:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>node2:50070</value>
</property>
  • 配置journalnode
<!-- 配置journalnode -->

<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value>
</property>

註意:此處的mycluster需要和服務名一樣

  • 配置ConfiguredFailoverProxyProvider類,HDFS通過這個類來找到active的namenode
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
  • 配置ssh fencing
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>

  • 配置journalnode的工作目錄
<!--配置journalnode的工作目錄-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/opt/journalnode/data</value>
</property>
  • 開啟自動切換(可選),手動切換也可用
<!--開啟自動切換(可選)-->
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>

1.3.3 core-site.xml

  • 配置namenode入口
<!--配置namenode入口-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>

註意:此處的mycluster需要和hdfs-site.xml文件中的nameservice名稱一致

  • 配置zookeeper的集群,zookeeper所在的節點
<!--配置zookeeper的集群-->
<property>
   <name>ha.zookeeper.quorum</name>
   <value>node1:2181,node2:2181,node3:2181</value>
 </property>

  • 配置工作目錄hadoop.tmp.dir 默認是在系統的臨時目錄下/tmp
<!--配置hadoop的工作目錄,默認在系統的臨時目錄下/tmp-->
<property>
   <name>hadoop.tmp.dir </name>
   <value>/opt/hadoop2</value>
 </property> 

1.3.4 slaves配置datanode

node2

node3

node4

不需要配master了,因為沒有secondarynamenode,journalnode替代了它

2啟動hdfs

  • 先將zookeeper啟動起來 ./zkServer.sh start
  • 必須先啟動journalnode

  需要在node2、3、4啟動journalnode

  命令 ./hadoop-daemon.sh start journalnode

  • 在任意一個namenode上格式化

  在node1上格式化namenode

  ./hdfs namenode –format

  註意centos關閉防火墻一定要用systemctl stop firewalld

  格式化後,在/opt/hadoop2下就會有元數據文件了

  • 將node1上的元數據文件拷貝到node2中
    • 必須先啟動node1中的namenode

      ./hadoop-daemon.sh start namenode

    • 在沒有格式化namenode的節點上(node2)上執行命令

      ./hdfs namenode –bootstrapStandby

    命令成功執行後,在/opt/hadoop2/下就會有元數據文件了

  • 格式化zk,在任意一臺namenode節點上
  hdfs zkfc -formatZK
  • 停止hdfs

  ./stop-dfs.sh

  會停止除了zookeeper之外的所有進程

  • 啟動hdfs

  ./start-dfs.sh

[[email protected] sbin]# ./start-dfs.sh

Starting namenodes on [node1 node2]

node2: starting namenode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-node2.out

node1: starting namenode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-node1.out

node4: starting datanode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-node4.out

node3: starting datanode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-localhost.out

node2: starting datanode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-node2.out

Starting journal nodes [node2 node3 node4]

node4: starting journalnode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-node4.out

node3: starting journalnode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-localhost.out

node2: starting journalnode, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-node2.out

Starting ZK Failover Controllers on NN hosts [node1 node2]

node2: starting zkfc, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-zkfc-node2.out

node1: starting zkfc, logging to /home/hadoop/hadoop-2.6.5/logs/hadoop-root-zkfc-node1.out

[[email protected] sbin]# jps

5234 Jps

5188 DFSZKFailoverController

3302 QuorumPeerMain

4920 NameNode

  • 啟動成功

  http://192.168.1.111:50070/

  http://192.168.1.112:50070/

會發現有一個是active 一個是standby

  • 測試

  在hdfs新建一個路徑,上傳文件

  ./hdfs dfs -mkdir -p /usr/file

  ./hdfs dfs -put /home/java/jdk-8u144-linux-x64.tar.gz /usr/file/

3.配置mapreduce

3.1 mapred-site.xml

<property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
</property>

3.2 yarn-site.xml

<!--resourcemanager在哪臺服務器上-->
<property>
         <name>yarn.resourcemanager.hostname</name>
         <value>node1</value>
</property>
<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.ShuffleHandler</value>
</property>

4.全面啟動

  • 需要先將hdfs停掉

  在node1上./stop-dfs.sh

  • 全面啟動

  Node1上 ./start-all.sh

jps查看進程

[[email protected] sbin]# jps

6977 NameNode

7603 Jps

3302 QuorumPeerMain

7244 DFSZKFailoverController

7327 ResourceManager

啟動成功。

Hadoop-HA配置詳細步驟