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 伺服器之間的免密登入,可以看這邊文章: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,接上面的第五大步,又可以重新格式化,啟動了