1. 程式人生 > >Linux 下配置 Hadoop2.x 高可用 zookeeper Yarn,詳細步驟。

Linux 下配置 Hadoop2.x 高可用 zookeeper Yarn,詳細步驟。

此係列文章是探索大資料道路的記錄,有些記錄是為了備忘,有些記錄是為了學習心得內容,有些是為了給大家提供一個好的學習資料。持續更新中…大家也可以到我的私人blog檢視該系列文章。blog.cuteximi.com ,也可以關注【碼省理工】公眾號與我交流技術。

一、前提準備

1.準備作業系統:Linux centos 6.5 3臺或者 5 臺 2.JDK1.7 或者更高 3.關閉每臺伺服器的防火牆。service iptables stop,可以設定為永久關閉 chkconfig iptables off 4.同步每臺伺服器的時間,ntpdate cn.ntp.org.cn ,可以使用yum install ntp -y 來安裝 ntp服務。 5.配置 linux 伺服器之間的免密登入,可以看這邊文章:

SSH詳解以及免密登入配置,很詳細的。 6.修改好 hostname ,方便配置元件。vim /etc/sysconfig/network

二、伺服器配置說明

NN DN ZK ZKFC JN RM NM
node01
node02
node03
node04
node05

說明:搭建的原則是儘量減少網路IO,配使用的元件儘量在一個機器上。

NN = NameNode , 部署了 兩臺,分別在 node04 和 node05
DN = DateNode , 部署了三臺,分別在 node01 ,node02 , node03 上
ZK = Zookeeper , 部署了三臺,分別在 node01 , node02 , node03上
ZKFC = ZookepperFailController,部署了兩臺,分別在 node04 , node05 
JN = JournalNode,部署了三臺,分別在 node01 ,node02 , node03 上
RM = ResorceManager,也就是 Yarn的資源排程,部署在 node04,node05,與NameNode一起、
NM = NodeManager ,是來代理資料節點的。

三、下載zookerper, 以及配置環境變數

下載 直接在node01上使用 wget 命令:

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

Tip:不指定目錄的話,會下載到當前目錄下面。

解壓

tar -zxvf zookeeper-3.4.12.tar.gz

配置環境變數 vim ~/.bash_profile* 新增如下內容:(注意標粗部分替換成你的安裝目錄)

export ZOOKEEPER_HOME = /root/zookeeper-3.4.12
export PATH =$ZOOKEEPER_HOME/bin:$PATH:

修改配置檔案 zoo.cfg

dataDir=/opt/zookeeper
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

在上面指定的 dataDir (也就是 /opt/zookeeper/)目錄下面新建 myid ,裡面的內容是 1

copy 到另外兩個節點

執行: scp ~/zookeeper-3.4.12 node02:~/ scp ~/zookeeper-3.4.12 node03:~/

分別到 node02 伺服器和 node03 伺服器上修改 myid檔案的內容, 分別為 2,3

其實這裡還需要 copy 環境變數 .bash_profile 。下面的步驟也才需要傳 .bash_profile ,暫且放到後面一起復制吧。

四、下載 Hadoop 2.85,以及配置環境變數

下載

1.官網下載地址,找到對應版本,下載到本地,然後用 scp 命令把安裝包傳到 linux 伺服器。(不推薦) 2.推薦直接在 Linux 伺服器上使用 wget 命令從它的映象伺服器下載。 (前提是你的 linux 伺服器可以訪問外網)

wget  http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

Tip:不指定目錄的話,會下載到當前目錄下面。

解壓

tar -zxvf hadoop-2.8.5.tar.gz

配置環境變數

vim ~/.bash_profile 新增如下內容:(注意標粗部分替換成你的安裝目錄)

export HADOOP_HOME = /root/hadoop-2.8.5
export PATH =$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:

配置 Hadoop

以下配置檔案均在 hadoop安裝目錄的 etc/hadoop目錄下嗎

1.配置預設的服務名,檔案目錄以及關聯zookeeper

vim core-site.xml,新增或修改以下內容

<!-- core-site.xml  -->
<configuration>
  <property>
    <!-- server name -->
    <name>fs.defaultFS</name>
    <value>hdfs://tsl</value>
  </property>
  <!-- zookeeper配置 -->
  <property>
    <!-- 一致性協議 -->
     <name>ha.zookeeper.quorum</name>
     <value>node01:2181,node02:2181,node03:2181</value>
  </property>
  <!-- 路徑設定 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop</value>
  </property>
</configuration>

2.配置 NameNode 節點資訊,HA高可用,JN等 vim hdfs-site.xml,新增或修改以下內容

<!-- hdfs-site.xml -->
<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>tsl</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.tsl</name>
    <!-- 別名 -->
    <value>nn4,nn5</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.tsl.nn4</name>
    <value>node04:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.tsl.nn5</name>
    <value>node05:8020</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.tsl.nn4</name>
    <value>node04:50070</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.tsl.nn5</name>
    <value>node05:50070</value>
  </property>
  <property>
    <!-- 指定namenode元資料儲存在journalnode中的路徑 -->
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node01:8485;node02:8485;node03:8485/tsl</value>
  </property>
  <property>
  <!-- 指定HDFS客戶端連線active namenode的java類 -->
    <name>dfs.client.failover.proxy.provider.tsl</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
   <!-- 配置隔離機制為ssh 防止腦裂 -->
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>

  <property>
   <!-- 指定journalnode日誌檔案儲存的路徑 -->
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/hadoop/data</value>
  </property>
  <property>
  <!-- 開啟自動故障轉移 -->
     <name>dfs.ha.automatic-failover.enabled</name>
     <value>true</value>
  </property>
</configuration>

3.配置 mapreduce

<!-- 配置 mapreduce -->
<!-- mapred-site.xml: -->
<configuration>
  <property>
  <!-- 指定使用 Yarn 來進行資源排程 -->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

4.配置 yarn

<!-- yarn-site.xml: -->
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
  	<!-- 開啟 ha 高可用 -->
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>mr_tsl</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <!-- 指定 resourceManager的節點是誰 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>node01</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>node02</value>
  </property>
  <!-- 指定一下zookeeper的地址,Yarn與其進行關聯 -->
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>node01:2181,node02:2181,node03:2181</value>
  </property>
</configuration>

5.配置slaves

vim slaves 加入DataNode 節點的hostname即可;

node01
node02
node03

6.copy 配置好的hadoop安裝包到其他伺服器節點

scp ~/hadoop-2.8.5 node02:~/

scp ~/hadoop-2.8.5 node03:~/

scp ~/hadoop-2.8.5 node04:~/

scp ~/hadoop-2.8.5 node05:~/

分別拷貝到了對應伺服器的 home 目錄了。

7.copy 環境變數檔案到其他伺服器節點

scp ~/.bash_profile node02:~/

scp ~/.bash_profile node03:~/

scp ~/.bash_profile node04:~/

scp ~/.bash_profile node05:~/

別忘記每臺伺服器上生效一下環境變數 source ~/.bash_profile

五、初始化並啟動

1.啟動三個 zookeeper 節點,分別在 node01 , node02 , node03 上執行: zkServer.sh start

2.啟動三個JournalNode:hadoop-daemon.sh start journalnode

3.在其中一個namenode上格式化:hdfs namenode -format

4.把剛剛格式化之後的元資料拷貝到另外一個namenode上

a)啟動剛剛格式化的namenode : hadoop-daemon.sh start namenode

b)在沒有格式化的namenode上執行:hdfs namenode -bootstrapStandby

c)啟動第二個namenode : hadoop-daemon.sh start namenode

5.在其中一個namenode上初始化zkfc:hdfs zkfc -formatZK 6.停止所有節點:stop-all.sh 7.全面啟動:start-all-sh 8. 在 node01 和 node02 開啟yarn: yarn-daemon.sh start resourcemanager

可以在瀏覽器訪問一下:

192.168.33.14:50070 這個ip是我namenode的ip地址。 192.168.33.15:50070 這個ip是我另一個namenode的ip地址。

可以檢視 active 和 standby 狀態: 在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

六、容易出錯的幾個點

可能會出錯的地方 1,確認每臺機器防火牆均關掉 2,確認每臺機器的時間是一致的 3,確認配置檔案無誤,並且確認每臺機器上面的配置檔案一樣 4,如果還有問題想重新格式化,那麼先把所有節點的程序關掉 5,刪除之前格式化的資料目錄hadoop.tmp.dir屬性對應的目錄,所有節點同步都刪掉,別單刪掉之前的一個,刪掉三臺JN節點中dfs.journalnode.edits.dir屬性所對應的目錄 6,接上面的第五大步,又可以重新格式化,啟動了