離線計算五hadoop高可用

課程大綱(HADOOP高可用機制)
HA運作機制 什麼是HA
HADOOP如何實現HA
HDFS-HA詳解
HA集羣搭建

目標:
掌握分佈式系統中HA機制的思想
掌握HADOOP內置HA的運作機制
掌握HADOOP2.x的HA集羣機制配置

1 Hadoop的HA機制
前言:正式引入HA機制是從hadoop2.0開始,之前的版本中沒有HA機制
1.1 HA的運作機制
(1)hadoop-HA集羣運作機制介紹
所謂HA,即高可用(7*24小時不中斷服務)
實現高可用最關鍵的是消除單點故障
hadoop-ha嚴格來說應該分成各個組件的HA機制——HDFS的HA、YARN的HA

(2)HDFS的HA機制詳解
通過雙namenode消除單點故障
雙namenode協調工作的要點:
A、元數據管理方式需要改變:
內存中各自保存一份元數據
Edits日誌只能有一份,只有Active狀態的namenode節點可以做寫操作
兩個namenode都可以讀取edits
共享的edits放在一個共享存儲中管理(qjournal和NFS兩個主流實現)
B、需要一個狀態管理功能模塊
實現了一個zkfailover,常駐在每一個namenode所在的節點
每一個zkfailover負責監控自己所在namenode節點,利用zk進行狀態標識
當需要進行狀態切換時,由zkfailover來負責切換
切換時需要防止brain split現象的發生

1.2 HDFS-HA圖解:

1.2 HA集羣的安裝部署
1.2.1 集羣節點規劃
集羣部署節點角色的規劃(10節點):
server01 namenode zkfc > start-dfs.shserver02 namenode zkfcserver03 resourcemanager > start-yarn.shserver04 resourcemanagerserver05 datanode nodemanager server06 datanode nodemanager server07 datanode nodemanager server08 journal node zookeeperserver09 journal node zookeeperserver10 journal node zookeeper

集羣部署節點角色的規劃(3節點)
server01 namenode resourcemanager zkfc nodemanager datanode zookeeper journal nodeserver02 namenode resourcemanager zkfc nodemanager datanode zookeeper journal nodeserver05 datanode nodemanager zookeeper journal node

1.2.2 環境準備
1、環境準備
a/linux系統準備
ip地址配置
hostname配置
hosts映射配置
防火牆關閉
init啓動級別修改
sudoers加入hadoop用戶
ssh免密登陸配置

b/java環境的配置
上傳jdk,解壓,修改/etc/profile

c/zookeeper集羣的部署

1.2.3 配置文件

core-site.xml
fs.defaultFS hdfs://ns1/ hadoop.tmp.dir /home/hadoop/app/hadoop-2.4.1/tmp ha.zookeeper.quorum weekend05:2181,weekend06:2181,weekend07:2181

hdfs-site.xml
configuration> dfs.nameservices ns1 dfs.ha.namenodes.ns1 nn1,nn2 dfs.namenode.rpc-address.ns1.nn1 weekend01:9000 dfs.namenode.http-address.ns1.nn1 weekend01:50070 dfs.namenode.rpc-address.ns1.nn2 weekend02:9000 dfs.namenode.http-address.ns1.nn2 weekend02:50070 dfs.namenode.shared.edits.dir qjournal://weekend05:8485;weekend06:8485;weekend07:8485/ns1 dfs.journalnode.edits.dir /home/hadoop/app/hadoop-2.4.1/journaldata dfs.ha.automatic-failover.enabled true dfs.client.failover.proxy.provider.ns1 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence shell(/bin/true) dfs.ha.fencing.ssh.private-key-files /home/hadoop/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000/configuration>

1.2.4 集羣運維測試
1、Datanode動態上下線
Datanode動態上下線很簡單,步驟如下:
準備一臺服務器,設置好環境
部署hadoop的安裝包,並同步集羣配置
聯網上線,新datanode會自動加入集羣
如果是一次增加大批datanode,還應該做集羣負載重均衡

2、Namenode狀態切換管理
使用的命令上hdfs haadmin
可用 hdfs haadmin –help查看所有幫助信息

可以看到,狀態操作的命令示例:
查看namenode工作狀態
hdfs haadmin -getServiceState nn1

將standby狀態namenode切換到active
hdfs haadmin –transitionToActive nn1

將active狀態namenode切換到standby
hdfs haadmin –transitionToStandby nn2

3、數據塊的balance
啓動balancer的命令:
start-balancer.sh -threshold 8
運行之後,會有Balancer進程出現:

上述命令設置了Threshold爲8%,那麼執行balancer命令的時候,首先統計所有DataNode的磁盤利用率的均值,然後判斷如果某一個DataNode的磁盤利用率超過這個均值Threshold,那麼將會把這個DataNode的block轉移到磁盤利用率低的DataNode,這對於新節點的加入來說十分有用。Threshold的值爲1到100之間,不顯示的進行參數設置的話,默認是10。

1.2.5 HA下hdfs-api變化
客戶端需要nameservice的配置信息,其他不變
/** * 如果訪問的是一個ha機制的集羣 * 則一定要把core-site.xml和hdfs-site.xml配置文件放在客戶端程序的classpath下 * 以讓客戶端能夠理解hdfs://ns1/中 “ns1”是一個ha機制中的namenode對——nameservice * 以及知道ns1下具體的namenode通信地址 * @author * */public class UploadFile { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); conf.set(“fs.defaultFS”, “hdfs://ns1/”); FileSystem fs = FileSystem.get(new URI(“hdfs://ns1/”),conf,“hadoop”); fs.copyFromLocalFile(new Path(“g:/eclipse-jee-luna-SR1-linux-gtk.tar.gz”), new Path(“hdfs://ns1/”)); fs.close(); } }

Federation下 mr程序運行的staging提交目錄問題

yarn.app.mapreduce.am.staging-dir
/bi/tmp/hadoop-yarn/staging
The staging dir used while submitting jobs.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章