Hadoop 2.0中单点故障解决方案总结
作者: Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明 网址: http://dongxicheng.org/mapreduce-nextgen/hadoop-2-0-ha/ 本博客的文章集合: http://dongxicheng.org/recommend/ 重大消息:我的Hadoop新书《
作者: Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明
网址: http://dongxicheng.org/mapreduce-nextgen/hadoop-2-0-ha/
本博客的文章集合: http://dongxicheng.org/recommend/
重大消息:我的Hadoop新书《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》已经开始在各大网站销售了,购书链接地址: 当当购书网址, 京东购书网址, 卓越购书网址。新书官方宣传主页: http://hadoop123.com/。
-
Hadoop 1.0内核主要由两个分支组成: MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题,该问题在很长时间内没有解决,这使得Hadoop在相当长时间内仅适合离线存储和离线计算。
令人欣慰的是,这些问题在Hadoop 2.0中得到了非常完整的解决。Hadoop 2.0内核由三个分支组成,分别是HDFS、 MapReduce和 YARN,而Hadoop生态系统中的其他系统,比如HBase、Hive、Pig等,均是基于这三个系统开发的。截止本文发布,Hadoop 2.0的这三个子系统的单点故障均已经解决或者正在解决(Hadoop HA),本文将为大家介绍当前的进度和具体的解决方案。
在正式介绍单点故障解决方案之前,先简要回顾一下这三个系统(三个系统均采用简单的master/slaves架构,其中master是单点故障)。
(1) HDFS:仿照google GFS实现的分布式存储系统,由NameNode和DataNode两种服务组成,其中NameNode是存储了元数据信息(fsimage)和操作日志(edits),由于它是唯一的,其可用性直接决定了整个存储系统的可用性;
(2) YARN:Hadoop 2.0中新引入的资源管理系统,它的引入使得Hadoop不再局限于MapReduce一类计算,而是支持多样化的计算框架。它由两类服务组成,分别是ResourceManager和NodeManager,其中,ResourceManager作为整个系统的唯一组件,存在单点故障问题;
(3) MapReduce:目前存在两种MapReduce实现,分别是可独立运行的MapReduce,它由两类服务组成,分别是JobTracker和TaskTraker,其中JobTracker存在单点故障问题,另一个是MapReduce On YARN,在这种实现中,每个作业独立使用一个作业跟踪器(ApplicationMaster),彼此之间不再相互影响,不存在单点故障问题。本文提到的单点故障实际上是第一种实现中JobTracker的单点故障。
先说当前Hadoop单点故障的解决进度,截止本文发布时,HDFS单点故障已经解决,且提供了两套可行方案;MapReduce单点故障(JobTracker)由CDH4(CDH4同时打包了MRv1和MRv2,这里的单点故障指的是MRv1的单点问题)解决,且已经发布;YARN单点故障尚未解决,但方案已经提出,由于解决方案借鉴了HDFS HA和MapReduce HA的实现,因为将会很快得到解决。
总体上说,Hadoop中的HDFS、MapReduce和YARN的单点故障解决方案架构是完全一致的,分为手动模式和自动模式,其中手动模式是指由管理员通过命令进行主备切换,这通常在服务升级时有用,自动模式可降低运维成本,但存在潜在危险。这两种模式下的架构如下。
【手动模式】
【自动模式】
在Hadoop HA中,主要由以下几个组件构成:
(1) MasterHADaemon:与Master服务运行在同一个进程中,可接收外部RPC命令,以控制Master服务的启动和停止;
(2) SharedStorage:共享存储系统,active master将信息写入共享存储系统,而standby master则读取该信息以保持与active master的同步,从而减少切换时间。常用的共享存储系统有zookeeper(被YARN HA采用)、NFS(被HDFS HA采用)、HDFS(被MapReduce HA采用)和类bookeeper系统(被HDFS HA采用)。
(3) ZKFailoverController:基于Zookeeper实现的切换控制器,主要由两个核心组件构成:ActiveStandbyElector和HealthMonitor,其中,ActiveStandbyElector负责与zookeeper集群交互,通过尝试获取全局锁,以判断所管理的master进入active还是standby状态;HealthMonitor负责监控各个活动master的状态,以根据它们状态进行状态切换。。
(4) Zookeeper集群:核心功能通过维护一把全局锁控制整个集群有且仅有一个active master。当然,如果ShardStorge采用了zookeeper,则还会记录一些其他状态和运行时信息。
尤其需要注意的是,解决HA问题需考虑以下几个问题:
(1) 脑裂(brain-split):脑裂是指在主备切换时,由于切换不彻底或其他原因,导致客户端和Slave误以为出现两个active master,最终使得整个集群处于混乱状态。解决脑裂问题,通常采用 隔离(Fencing)机制,包括三个方面:
- 共享存储fencing:确保只有一个Master往共享存储中写数据。
- 客户端fencing:确保只有一个Master可以响应客户端的请求。
- Slave fencing:确保只有一个Master可以向Slave下发命令。
Hadoop公共库中对外提供了两种fenching实现,分别是sshfence和shellfence(缺省实现),其中sshfence是指通过ssh登陆目标Master节点上,使用命令fuser将进程杀死(通过tcp端口号定位进程pid,该方法比jps命令更准确),shellfence是指执行一个用户事先定义的shell命令(脚本)完成隔离。
(2)切换对外透明:为了保证整个切换是对外透明的,Hadoop应保证所有客户端和Slave能自动重定向到新的active master上,这通常是通过若干次尝试连接旧master不成功后,再重新尝试链接新master完成的,整个过程有一定延迟。在新版本的Hadoop RPC中,用户可自行设置RPC客户端尝试机制、尝试次数和尝试超时时间等参数。
为了印证以上通用方案,以MapReduce HA为例进行说明,在CDH4中,HA方案介绍可参考我的这篇文章: “CDH中JobTracker HA方案介绍”,架构图如下:
Hadoop 2.0 中 HDFS HA解决方案可阅读文章: “Hadoop 2.0 NameNode HA和Federation实践”,目前HDFS2中提供了两种HA方案,一种是基于NFS共享存储的方案,一种基于Paxos算法的方案 Quorum Journal Manager(QJM),它的基本原理就是用2N+1台JournalNode存储EditLog,每次写数据操作有大多数(>=N+1)返回成功时即认为该次写成功,数据不会丢失了。目前社区正尝试 使用Bookeeper作为共享存储系统,具体可参考。 HDFS-1623给出的HDFS HA架构图如下所示:
目前进度最慢的是YARN HA解决方案,该方案已经文档化,正在规范和开发中,具体可参考: https://issues.apache.org/jira/browse/YARN-149,总体上看,它的整体架构与MapReduce HA和YARN HA的类似,但共享存储系统采用的是Zookeeper。之所以采用Zookeeper这种轻量级“存储系统”(需要注意的是,zookeeper设计目的并不是存储,而是提供分布式协调服务,但它的确可以安全可靠的存储少量数据以解决分布式环境下多个服务之间的数据共享问题),是由于YARN的大部分信息可以通过NodeManager和ApplicationMaster的心跳信息进行动态重构,而ResourceManager本身只需记录少量信息到Zookeeper上即可。
总体上讲,HA解决的难度取决于Master自身记录信息的多少和信息可重构性,如果记录的信息非常庞大且不可动态重构,比如NameNode,则需要一个可靠性与性能均很高的共享存储系统,而如果Master保存有很多信息,但绝大多数可通过Slave动态重构,则HA解决方法则容易得多,典型代表是MapReduce和YARN。从另外一个角度看,由于计算框架对信息丢失不是非常敏感,比如一个已经完成的任务信息丢失,只需重算即可获取,使得计算框架的HA设计难度远低于存储类系统。
原创文章,转载请注明: 转载自 董的博客
本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-2-0-ha/
作者: Dong,作者介绍: http://dongxicheng.org/about/
本博客的文章集合: http://dongxicheng.org/recommend/
Copyright ? 2013
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)
原文地址:Hadoop 2.0中单点故障解决方案总结, 感谢原作者分享。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Win11是微軟推出的最新作業系統,相較於先前的版本,Win11在介面設計和使用者體驗上有了很大的提升。然而,一些用戶反映他們在安裝Win11後遇到了無法安裝中文語言套件的問題,這就給他們在系統中使用中文帶來了困擾。本文將針對Win11無法安裝中文語言套件的問題提供一些解決方案,幫助使用者順利使用中文。首先,我們要明白為什麼無法安裝中文語言包。一般來說,Win11

scipy庫安裝失敗的原因及解決方案,需要具體程式碼範例在進行Python科學計算時,scipy是一個非常常用的函式庫,它提供了許多用於數值計算、最佳化、統計和訊號處理的功能。然而,在安裝scipy庫時,有時會遇到一些問題,導致安裝失敗。本文將探討scipy庫安裝失敗的主要原因,並提供對應的解決方案。安裝依賴套件失敗scipy庫依賴一些其他的Python庫,例如nu

標題:解決Oracle字元集修改造成亂碼問題的有效方案在Oracle資料庫中,當字元集被修改後,往往會因為資料中存在不相容的字元而導致亂碼問題的出現。為了解決這個問題,我們需要採取一些有效的方案來處理。本文將介紹一些解決Oracle字元集修改引起亂碼問題的具體方案和程式碼範例。一、匯出資料並重新設定字元集首先,我們可以透過使用expdp指令將資料庫中的資料匯出

OracleNVL函數常見問題及解決方案Oracle資料庫是廣泛使用的關係型資料庫系統,在資料處理過程中經常需要處理空值的情況。為了因應空值所帶來的問題,Oracle提供了NVL函數來處理空值。本文將介紹NVL函數的常見問題及解決方案,並提供具體的程式碼範例。問題一:NVL函式用法不當NVL函式的基本語法為:NVL(expr1,default_value)其

黑鯊手機無法開機怎麼辦?教你自救方法!在我們日常生活中,手機已經成為我們不可或缺的一部分。而對許多人來說,黑鯊手機是一款備受喜愛的遊戲手機。但是難免會遇到各種問題,其中之一就是手機無法開機。當你遇到這樣的情況時,不要慌張,以下將為你介紹一些解決方法,希望能幫助你。首先,當黑鯊手機無法開機時,首先要檢查手機是否有足夠的電力。可能是由於電量耗盡導致無法開機,

C++中機器學習演算法面臨的常見挑戰包括記憶體管理、多執行緒、效能最佳化和可維護性。解決方案包括使用智慧指標、現代線程庫、SIMD指令和第三方庫,並遵循程式碼風格指南和使用自動化工具。實作案例展示如何利用Eigen函式庫實現線性迴歸演算法,有效地管理記憶體和使用高效能矩陣操作。

無法正常啟動0xc000007b怎麼解決在使用電腦時,我們有時會遇到各種錯誤代碼,其中最常見的之一就是0xc000007b。當我們嘗試運行某些應用程式或遊戲時,突然出現這個錯誤代碼,使我們無法正常啟動。那麼,我們該如何解決這個問題呢?首先,我們要先了解錯誤代碼0xc000007b的意思。這個錯誤代碼通常指示一個或多個關鍵的系統檔案或庫檔案缺失、損壞或不

PyCharm是一款功能強大的Python整合開發環境,廣受開發者喜愛。然而,有時候我們在使用PyCharm時可能會遇到金鑰失效的問題,導致無法正常使用軟體。本文將為大家揭秘PyCharm密鑰失效的解決方案,並提供具體的程式碼範例,幫助讀者快速解決這個問題。在開始解決問題之前,我們首先要了解密鑰失效的原因。 PyCharm的金鑰失效通常是由於網路問題或軟體本身
