Hadoop3.x生產(chǎn)環(huán)境調(diào)優(yōu)之高可用

1 hadoop HA高可用

  • 實現(xiàn)高可用最關(guān)鍵的策略是消除單點故障。HA嚴格來說應(yīng)該分成各個組件的HA機制:HDFS的HA和YARN的HA钙蒙。
  • 前提:配置zookeeper集群

1.1 HDFS HA 高可用

工作機制
  • 元數(shù)據(jù)管理方式需要改變:內(nèi)存中各自保存一份元數(shù)據(jù);Edits日志只有Active狀態(tài)的NameNode節(jié)點可以做寫操作间驮;兩個NameNode都可以讀取Edits躬厌;共享的Edits放在一個共享存儲中管理(journal和NFS兩個主流實現(xiàn));
  • 需要一個狀態(tài)管理功能模塊:實現(xiàn)了一個zkfailover竞帽,常駐在每一個namenode所在的節(jié)點扛施,每一個zkfailover負責(zé)監(jiān)控自己所在NameNode節(jié)點,利用zk進行狀態(tài)標識屹篓,當(dāng)需要進行狀態(tài)切換時疙渣,由zkfailover來負責(zé)切換,切換時需要防止brain split現(xiàn)象的發(fā)生堆巧。
  • 必須保證兩個NameNode之間能夠ssh無密碼登錄
  • 隔離(Fence)妄荔,即同一時刻僅僅有一個NameNode對外提供服務(wù)
HDFS HA自動故障轉(zhuǎn)移工作機制

ZKFC是自動故障轉(zhuǎn)移中的另一個新組件,是ZooKeeper的客戶端谍肤,也監(jiān)視和管理NameNode的狀態(tài)啦租。每個運行NameNode的主機也運行了一個ZKFC進程,ZKFC負責(zé):

  • 健康監(jiān)測:ZKFC使用一個健康檢查命令定期地ping與之在相同主機的NameNode荒揣,只要該NameNode及時地回復(fù)健康狀態(tài)刷钢,ZKFC認為該節(jié)點是健康的。如果該節(jié)點崩潰乳附,凍結(jié)或進入不健康狀態(tài)内地,健康監(jiān)測器標識該節(jié)點為非健康的。
  • ZooKeeper會話管理:當(dāng)本地NameNode是健康的赋除,ZKFC保持一個在ZooKeeper中打開的會話阱缓。如果本地NameNode處于active狀態(tài),ZKFC也保持一個特殊的znode鎖举农,該鎖使用了ZooKeeper對短暫節(jié)點的支持荆针,如果會話終止,鎖節(jié)點將自動刪除颁糟。
  • 基于ZooKeeper的選擇:如果本地NameNode是健康的航背,且ZKFC發(fā)現(xiàn)沒有其它的節(jié)點當(dāng)前持有znode鎖,它將為自己獲取該鎖棱貌。如果成功玖媚,則它已經(jīng)贏得了選擇,并負責(zé)運行故障轉(zhuǎn)移進程以使它的本地NameNode為Active婚脱。故障轉(zhuǎn)移進程與前面描述的手動故障轉(zhuǎn)移相似今魔,首先如果必要保護之前的現(xiàn)役NameNode,然后本地NameNode轉(zhuǎn)換為Active狀態(tài)障贸。
配置HDFS HA

hdfs-site.xml

<configuration>
    <!-- 完全分布式集群名稱 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>

    <!-- 集群中NameNode節(jié)點都有哪些 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>

    <!-- nn1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop01:9000</value>
    </property>

    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop02:9000</value>
    </property>

    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop01:50070</value>
    </property>

    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop02:50070</value>
    </property>

    <!-- 指定NameNode元數(shù)據(jù)在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/mycluster</value>
    </property>

    <!-- 配置隔離機制错森,即同一時刻只能有一臺服務(wù)器對外響應(yīng) -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

    <!-- 使用隔離機制時需要ssh無秘鑰登錄-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/root/.ssh/id_rsa</value>
    </property>

    <!-- 聲明journalnode服務(wù)器存儲目錄-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/ha/hadoop-3.13/data/jn</value>
    </property>

    <!-- 關(guān)閉權(quán)限檢查-->
    <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
    </property>

    <!-- 訪問代理類:client,mycluster篮洁,active配置失敗自動切換實現(xiàn)方式-->
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
</configuration>
  • 在各個JournalNode節(jié)點上涩维,輸入以下命令啟動journalnode服務(wù)
    sbin/hadoop-daemon.sh start journalnode
  • 在[nn1]上,對其進行格式化袁波,并啟動
    bin/hdfs namenode -format
    sbin/hadoop-daemon.sh start namenode
  • 在[nn2]上瓦阐,同步nn1的元數(shù)據(jù)信息
    bin/hdfs namenode -bootstrapStandby
  • 啟動[nn2]
    sbin/hadoop-daemon.sh start namenode
  • 在[nn1]上,啟動所有datanode
    sbin/hadoop-daemons.sh start datanode
  • 將[nn1]切換為Active
    bin/hdfs haadmin -transitionToActive nn1
  • 查看是否Active
    bin/hdfs haadmin -getServiceState nn1

配置HDFS-HA自動故障轉(zhuǎn)移

hdfs-site.xml中增加

<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

core-site.xml文件中增加

<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
  • 關(guān)閉所有HDFS服務(wù):
    sbin/stop-dfs.sh
  • 啟動Zookeeper集群:
    bin/zkServer.sh start
  • 初始化HA在Zookeeper中狀態(tài):
    bin/hdfs zkfc -formatZK
  • 啟動HDFS服務(wù):
    sbin/start-dfs.sh
  • 在各個NameNode節(jié)點上啟動DFSZK Failover Controller锋叨,先在哪臺機器啟動垄分,哪個機器的NameNode就是Active NameNode
    sbin/hadoop-daemin.sh start zkfc

1.2 YARN HA 高可用

工作機制
yarn ha工作機制
配置YARN-HA集群

yarn-site.xml

<configuration>
    <!--啟用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!--聲明兩臺resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop01</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop02</value>
    </property>
 
    <!--指定zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>

    <!--啟用自動恢復(fù)--> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!--指定resourcemanager的狀態(tài)信息存儲在zookeeper集群--> 
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

</configuration>
  • 在各個JournalNode節(jié)點上,輸入以下命令啟動journalnode服務(wù):
    sbin/hadoop-daemon.sh start journalnode

  • 在[nn1]上娃磺,對其進行格式化薄湿,并啟動:
    bin/hdfs namenode -format
    sbin/hadoop-daemon.sh start namenode

  • 在[nn2]上,同步nn1的元數(shù)據(jù)信息:
    bin/hdfs namenode -bootstrapStandby

  • 啟動[nn2]:
    sbin/hadoop-daemon.sh start namenode

  • 啟動所有DataNode
    sbin/hadoop-daemons.sh start datanode

  • 將[nn1]切換為Active
    bin/hdfs haadmin -transitionToActive nn1

  • 在hadoop02中執(zhí)行:
    sbin/start-yarn.sh

  • 在hadoop03中執(zhí)行:
    sbin/yarn-daemon.sh start resourcemanager

  • 查看服務(wù)狀態(tài)
    bin/yarn rmadmin -getServiceState rm1

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末偷卧,一起剝皮案震驚了整個濱河市豺瘤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌听诸,老刑警劉巖坐求,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晌梨,居然都是意外死亡桥嗤,警方通過查閱死者的電腦和手機须妻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泛领,“玉大人荒吏,你說我怎么就攤上這事≡ㄐ” “怎么了绰更?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锡宋。 經(jīng)常有香客問我儡湾,道長,這世上最難降的妖魔是什么执俩? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任徐钠,我火速辦了婚禮,結(jié)果婚禮上奠滑,老公的妹妹穿的比我還像新娘丹皱。我一直安慰自己,他們只是感情好宋税,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布摊崭。 她就那樣靜靜地躺著,像睡著了一般杰赛。 火紅的嫁衣襯著肌膚如雪呢簸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天乏屯,我揣著相機與錄音根时,去河邊找鬼。 笑死辰晕,一個胖子當(dāng)著我的面吹牛蛤迎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播含友,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼替裆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窘问?” 一聲冷哼從身側(cè)響起辆童,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惠赫,沒想到半個月后把鉴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡儿咱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年庭砍,在試婚紗的時候發(fā)現(xiàn)自己被綠了场晶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡怠缸,死狀恐怖峰搪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凯旭,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布使套,位于F島的核電站罐呼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏侦高。R本人自食惡果不足惜嫉柴,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奉呛。 院中可真熱鬧计螺,春花似錦、人聲如沸瞧壮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咆槽。三九已至陈轿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秦忿,已是汗流浹背麦射。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灯谣,地道東北人潜秋。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像胎许,于是被迫代替她去往敵國和親峻呛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容