1. 程式人生 > >Hadoop集群管理--保證集群平穩地執行

Hadoop集群管理--保證集群平穩地執行

監控 eve 故障排查 介紹 檢出 replicat 2.x 列操作 包含


本篇介紹為了保證Hadoop集群平穩地執行。須要深入掌握的知識。以及一些管理監控的手段,日常維護的工作。


HDFS


永久性數據結構


對於管理員來說。深入了解namenode,輔助namecode和datanode等HDFS組件怎樣在磁盤上組織永久性數據很重要。

洞悉各文件的使用方法有助於進行故障診斷和故障檢出。


namenode的文件夾結構


namenode被格式化後,將在${dfs.namenode.name.dir}/current 文件夾下。產生例如以下的文件夾結構:VERSION、edits、fsimage、fstime。


僅僅有深入學習namenode的工作原理。才幹理解這些文件的用途。對於Hadoop集群管理員來說。這是有必要的。



輔助namenode的文件夾結構


在大型集群中,輔助namenode須要執行在一臺專用機器上。保持和namenode基本一致的文件夾結構和數據。在主namenode發生問題時。能夠從輔助namenode恢復數據。


datanode的文件夾結構


datanode不是格式化時創建的,而是啟動時自己主動創建的。datanode的重要文件和文件夾例如以下所看到的:

技術分享

dfs.data.dir 是在hadoop1.X中定義的,在Hadoop2.X中是在hdfs-site.xml中定義的 fs.datanode.data.dir 。


安全模式


namenode啟動時,首先將映像文件(fsimage)加載內存。並運行編輯日誌(edits)中的各項操作。

一系列操作之後,假設滿足“最小復本條件”,namenode會在30秒內退出安全模式。所謂的最新復本調價指的是在整個文件系統中有99.9%的塊滿足最小復本條件(默認值時1,由dfs.replication.min屬性設置)。

在啟動一個剛剛格式化的HDFS集群時。由於系統中還沒有不論什麽塊,所以namenode不會進入安全模式。


安全模式的屬性設置例如以下:

技術分享


安全模式操作命令:

hadoop dfsadmin -safemode get
hadoop dfsadmin -safemode wait
hadoop dfsadmin -safemode leave
hadoop dfsadmin -safemode enter


調整日誌級別


log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=WARN

調整為INFO或者其它。


工具


dfsadmin工具


技術分享


fsck工具


Hadoop提供fsck工具來檢查HDFS中文件的健康狀況。該工具會查找那些全部datanode中均缺失的塊以及過少或過多復制的塊。

使用命令:

hadoop fsck /

hadoop fsck / -move

hadoop fsck / -delete


datanode塊掃描器


各個datanode執行一個快掃描器。定期檢測本節點上的全部塊。從而在client讀到壞塊之前及時地檢測和修復壞塊。能夠依靠DataBlockScanner所維護的塊列表依次掃描塊,查看是否存在校驗和錯誤。

掃描器還使用節流機制,來維持datanode的磁盤帶寬(換句話說,塊掃描器工作時僅占用一小部分磁盤帶寬)。

默認情況下。塊掃描器每隔三周(504小時)就會檢測塊,以應對可能的磁盤故障,這個周期由dfs.datanode.scan.period.hours屬性設置。損壞的塊被報給namenode,並被即時修復。

訪問網頁:http://datanode:50075/blockScannerReport 獲取該datanode的塊檢測報告。

加 ?Listblocks 參數會在報告中列出該datanode上全部的塊及其最新驗證狀態。


均衡器


均衡器(balancer)程序是一個Hadoop守護進程,它將塊從忙碌的datanode移到相對空暇的datanode。從而又一次分配塊。同一時候堅持塊復本放置策略,將復本分散到不同機架。以減少數據損壞率。

操作一直運行,直到均衡,即每一個datanode的使用率(該節點上已使用的空間和空間容量之間的比率)和集群的使用率(集群中已使用的空間與集群的空間容量之間的比率)很接近,差距不超過給定的閥值。

啟動均衡器指令:start-blancer.sh ,-threshold參數指定閥值(百分比格式),默認10%。在不論什麽時刻,集群中都僅僅執行一個均衡器。

在不同節點之間復制數據的帶寬也是受限的。默認是1MB/s。能夠通過hdfs-site.xml中的dfs.balance.bandwidthPerSec屬性指定(單位是字節)。


監控


監控是系統管理的重要內容。監控的目標在於檢測集群在何時未提供所期望的服務。

主守護進程是最須要監控的,包含主namenode、輔助namenode和jobtracker。

datanode和tasktracker常常出現問題;在大型集群中。故障率尤其高。

因此,集群須要保留額外的容量,如此一來,即使有一小部分節點宕機,也不影響整個系統的運作。

管理員也能夠定期執行一些測試作業。以檢查集群的健康狀況。


日誌


全部Hadoop守護進程都會產生日誌文件。這些文件很有助於查明系統中發生的事件。

默認情況下。Hadoop生成的系統日誌文件存放在$HADOOP_INSTALL/logs文件夾之中,也能夠通過hadoop-env.sh文件裏的HADOOP_LOG_DIR來進行改動。通常能夠把日誌文件存放在/var/log/hadoop文件夾中。實現的辦法就是在hadoop-env.sh中增加一行:export HADOOP_LOG_DIR=/var/log/hadoop ,假設日誌文件夾不存在,則會首先創建該文件夾,假設創建失敗。請檢查hadoop用戶是否有權創建該文件夾。


設置日誌級別


故障排查過程中,暫時設置日誌級別很故意,有兩種方法,網頁和命令行。比如要對某臺機器的JobTracker設置為DEBUG級別,能夠例如以下:

a、訪問http://jobtracker-host:50030/logLevel,將org.apache.hadoop.mapred.JobTracker屬性設置為DEBUG級別

b、hadoop daemonlog -setlevel jobtracker-host:50030 org.apache.hadoop.mapred.JobTracker DEBUG


獲取堆棧軌跡


Hadoop守護進程提供一個網頁,對正在守護進程的JVM中執行著的線程執行線程轉儲(Thread-dump)。

比如:http://jobtracker-host:50030/stacks獲取jobtracker的線程轉儲。


度量


HDFS和MapReduce守護進程收集的事件和度量相關的信息,這些信息統稱為度量(metric)。

比如,各個datanode會收集例如以下度量(還有很多其它):寫入的字節、塊的復本數、client發起的讀操作請求數。

度量從屬於特定的上下文,眼下,Hadoop使用dfs、mapred、rpc、jvm 這4個上下文。

度量在conf/hadoop-metrics.properties文件裏配置。默認情況下,全部上下文都被配置成不公布度量。

經常使用的度量類:FileContext、GangliaContext、NullContextWithUpdateThread、CompositeContext。

技術分享


java管理擴展(JMX)


JMX是一個標準的JAVA API,可監控和管理應用。

Hadop包含多個托管bean(MBean)。能夠將Hadoop度量公布給支持JMX的應用。例如以下:

技術分享

JDK自帶的JConsole工具能夠瀏覽JVM中MBean。很多第三方的監控和報警系統(如Nagios和Hyperic)均可查詢MBean,因此通過這些系統使用JMX監控一個Hadoop集群就非常尋常,前提是啟用遠程訪問JMX功能和合理設置集群的安全級別,包含password認證、SSL連接和SSLclient認證等。

比較普遍的方案是,同一時候使用Ganglia和Nagios這種警告系統來監控Hadoop系統。Ganglia擅長高效地收集大量度量,並以圖形化界面呈現;Nagios和類似系統擅長在某項度量的關鍵閥值被突破之後及時報警。


維護和升級


關於這部分。暫時先不深入學習,在工作過程中如有涉獵,再返回此處進一步記錄。


Hadoop集群管理--保證集群平穩地執行