Hadoop集群管理--保證集群平穩地執行
本篇介紹為了保證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集群管理--保證集群平穩地執行