Hadoop實戰-中高級部分 之 Hadoop 管理

HadoopRestFul
HadoopHDFS原理1
HadoopHDFS原理2
Hadoop作業調優參數調整及原理
HadoopHA
HadoopMapReduce高級編程
HadoopIO
HadoopMapReduce工作原理
Hadoop管理
Hadoop集群安裝
HadoopRPC

第一部分:HDFS管理

命令行工具
•HDFS檔案系統檢查工具FSCK
•用法:hadoopfsck[GENERIC_OPTIONS]<path>[-move|-delete|-openforwrite][-files[-blocks[-locations|-racks]]]
•命令選項描述<path>檢查的起始目錄。
•-move移動受損檔案到/lost+found-delete刪除受損檔案。
•-openforwrite列印出寫打開的檔案。
•-files列印出正被檢查的檔案。
•-blocks列印出塊信息報告。
•-locations列印出每個塊的位置信息。
•-racks列印出data-node的網路拓撲結構。
•dfsadmin
命令選項 描述
-report 報告檔案系統的基本信息和統計信息。
-refreshNodes 重新讀取hosts和exclude檔案,更新允許連到Namenode的或那些需要退出或入編的Datanode的集合。
-finalizeUpgrade 終結HDFS的升級操作。Datanode刪除前一個版本的工作目錄,之後Namenode也這樣做。這個操作完結整個升級過程。
命令選項 描述
-metasavefilename 保存Namenode的主要數據結構到hadoop.log.dir屬性指定的目錄下的<filename>檔案。對於下面的每一項,<filename>中都會一行內容與之對應
1.Namenode收到的Datanode的心跳信號
2.等待被複製的塊
3.正在被複製的塊
4.等待被刪除的塊
-setQuota<quota><dirname>...<dirname> 為每個目錄<dirname>設定配額<quota>。目錄配額是一個長整型整數,強制限定了目錄樹下的名字個數。
命令會在這個目錄上工作良好,以下情況會報錯:
1.N不是一個正整數,或者
2.用戶不是管理員,或者
3.這個目錄不存在或是檔案,或者
4.目錄會馬上超出新設定的配額。
-upgradeProgressstatus|details|force 請求當前系統的升級狀態,狀態的細節,或者強制升級操作進行。
-clrQuota<dirname>...<dirname> 為每一個目錄<dirname>清除配額設定。
命令會在這個目錄上工作良好,以下情況會報錯:
1.這個目錄不存在或是檔案,或者
2.用戶不是管理員。
如果目錄原來沒有配額不會報錯。
規劃管理HDFS數據
•無論是做為開發者還是管理員了解HDFS目錄結構與規劃都是很重要的一件事情。
•它們可以幫助我們診斷問題
•如何管理HDFS數據也是我們需要研究的課題
•Namenode的目錄結構:
${dfs.name.dir}/current/VERSION
/edits
/fsimage
/fstime
dfs.name.dir是hdfs-site.xml里配置的若干個目錄組成的列表。
•通過設定SencondaryNameNode解決editslog變大問題
•SencondaryNamenode的目錄結構:
${fs.checkpoint.dir}/current/VERSION
/edits
/fsimage
/fstime
/previous.checkpoint/VERSION
/edits
/fsimage
/fstime
•fs.checkpoint.dir屬性位於core-site.xml
•previous.checkpoint存儲之前的保存的元數據
•Datanode的目錄結構:
${dfs.data.dir}/current/VERSION
/blk_id
/blk_id.meta
…..
/subdir0
….
•dfs.data.dir屬性位與hdfs-site.xml
•Subdir0為子資料夾,防止HDFS一個目錄下的檔案塊太多
•通過dfs.datanode.numblocks可以設定多少個塊會生成一個子資料夾默認是64
安全模式
•安全模式是Namenode的一個狀態,這種狀態下,Namenode
1.不接受對名字空間的更改(唯讀)
2.不複製或刪除塊
•NameNode會在啟動時自動進入安全模式,當配置的塊最小百分比數滿足最小的副本數條件時,會自動離開安全模式。安全模式可以手動進入,但是這樣的話也必須手動關閉安全模式
•默認為99.99%
•參數dfs.safemode.threshold.pct位與hdfs-site.xml
•命令行hadoopdfsadmin-safemodeenter|leave|get|wait
訪問操作記錄日誌
•HDFS可以記錄檔案系統的所有訪問請求
•默認情況下該功能是關閉的
•可以通過設定log4j來開啟該屬性
•log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN設定為info
•該請求記錄檔案會單獨存放
數據掃描塊
•每一個DataNode都會運行一個數據掃描執行緒
•掃描執行緒定期的檢查所有數據塊以確保修復損壞的塊
•周期可以設定
•dfs.datanode.scan.period.hourses默認是504小時
•在UI部分可以查看檢查的情況
•http://datanode:50075/blockScannerReport
•通過指定listblocks參數可以報告最新的狀態
•http://datanode:50075/blockScannerReport?Listblocks

第二部分:MapReduce作業管理

命令行工具
•查看Job信息
•hadoopjob-list
•殺掉Job
•hadoopjob–kill
•指定路徑下查看歷史日誌匯總
•hadoopjob-historyoutput-dir
•作業的更多細節
•hadoopjob-historyalloutput-dir
•列印map和reduce完成百分比和所有計數器
•hadoopjob–statusjob_id
•殺死任務。被殺死的任務不會不利於失敗嘗試。
•hadoopjab-kill-task<task-id>
•使任務失敗。被失敗的任務會對失敗嘗試不利。
•hadoopjob-fail-task<task-id>
Hadoopmradmin
命令 說明
-refreshServiceAcl 重新裝載ACL認證檔案
-refreshQueues 刷新任務佇列的信息
-refreshUserToGroupsMappings 刷新用戶與用戶組對應關係
-refreshSuperUserGroupsConfiguration 刷新用戶組的配置
-refreshNodes 刷新JobTracker的主機配置信息
UI詳細介紹
•UI有足夠的信息,供我們查看Job運行的信息與歷史運行記錄
•URL
•http://<jobtracker>50030/jobtracker

第三部分:Hadoop安全與許可權的管理

•安全認證
•確保用戶的身份
•授權
•確保用戶的操作只能是在被允許的範圍內
•用戶
•Hadoop用戶
•服務
•NameNode等
•Hadoop原來的版本安全性比較低。
•Namenode或者Jobtracker缺乏安全認證機制
•DataNode缺乏安全授權機制
•Hadoop提供了兩種安全機制:Simple和Kerberos
Simple機制
•Simple機制(默認情況,Hadoop採用該機制)是JAAS協定與delegationtoken整合機制
•JAAS是Java認證和授權服務(JavaAuthenticationandAuthorizationService)的縮寫,是PAM框架的Java實現。
Kerberos機制
•Kerberos提供了這樣一種機制,可以認證的密鑰放到伺服器上,用戶在進行操作時,要先到認證伺服器上做校驗,只有通過,才可以進行相應的操作。
•Hadoop的安全問題
•解決伺服器到伺服器的認證
•解決client到伺服器的認證
•對用戶級別上的認證並沒有實現
Kerberos概念
•Princal:被認證的個體,有一個名字和口令
•KDC:是一個網路服務,提供ticket和臨時會話密鑰
•Ticket:一個記錄,客戶用它來向伺服器證明自己的身份,包括客戶標識、會話密鑰、時間戳。
•AS:認證伺服器
•TSG:許可證伺服器
Hadoop使用Kerberos好處
•可靠:Hadoop本身並沒有認證功能和創建用戶組功能,使用依靠外圍的認證系統
•高效:Kerberos使用對稱鑰匙操作,比SSL的公共密鑰快
•操作簡單:用戶可以方便進行操作,不需要很複雜的指令。比如廢除一個用戶只需要從Kerbores的KDC資料庫中刪除即可。
HDFS安全機制
•Client去NameNode獲取訪問DataNode的憑證
•獲得憑證後,才可以訪問相應的資料庫
•DataNode在啟動時會在NameNode拿來相應的憑證
•客戶端訪問時,DataNode會校驗相應的憑證
MapReduce安全機制
•作業提交
•所有關於作業的提交或者作業運行狀態的追蹤均是採用帶有Kerberos認證的RPC實現的
•授權用戶提交作業時,JobTracker會為之生成一個令牌,該令牌將被作為job的一部分存儲到HDFS上並通過RPC分發給各個TaskTracker,一旦job運行結束,該token失效。
•任務運行
•用戶提交作業的每個task均是以用戶身份啟動的,這樣,一個用戶的task便不可以向TaskTracker或者其他用戶的task傳送作業系統信號,最其他用戶造成干擾。這要求為每個用戶在所有TaskTracker上建一個賬號。
•Shuffle
•reducetask對“請求URL”和“當前時間”計算HMAC-SHA1值,並將該值作為請求的一部分發動給TaskTracker,TaskTracker收到後會驗證該值的正確性
RPC安全機制
•用戶傳送RPC時,會將自己的用戶名放在請求信息里
•RPCServer接受到信息後,RPCServer會校驗授權,如果通過請傳送給用戶回響
Hadoop許可權管理
•用戶分組管理
•用戶按組為單位組織管理
•可以限制用戶使用的資源等內容
•Hadoop使用Linux的用戶與用戶組
•作業管理
•作業提交許可權控制
•作業運行狀態查看許可權控制。
•可限定可提交作業的用戶
•可限定可查看作業運行狀態的用戶
•可限定普通用戶只能修改自己作業的優先權,kill自己的作業
•高級用戶可以控制所有作業。
•這一點很重要,如果沒有許可權,會造成數據混亂
•主要是通過系統的用戶組許可權來進行控制
MapReduce許可權管理
•MapReduce支持許可權管理需使用FairScheduler或者CapacityScheduler
•為MapReduce添加許可權管理一共分3步
•配置FairScheduler或者CapacityScheduler
•配置用戶管理
•配置作業的ACL
配置許可權
•配置FairScheduler
•配置用戶管理
•配置Queue相關信息
•配置屬性在mapre-site.xml
配置Queue的相關信息
<property>
<name>mapred.acls.enabled</name>
<value>true</value>
</property>
<property>
<name>mapred.queue.names</name>
<value>test,default</value>
</property>屬性mapred.queue.names是queue的所有名字,在這一名字中,必須有一個叫“default”的queue
<property>
<name>mapred.queue.my_queue.acl-submit-job</name>
<value>test</value>
</property>
<property>
<name>mapred.queue.default.acl-administer-jobs</name>
<value></value>
</property>
<property>
<name>mapred.queue.my_queue.acl-administer-jobs</name>
<value></value>
</property>
•mapred.queue.names是queue的所有名字
•必須有一個叫“default”的queue
•mapred.queue.<queue-name>.acl-submit-job,指定哪些user或者group可以向該queue中提交作業
•mapred.queue.<queue-name>.acl-administer-jobs,指定哪些user或者group可以管理該queue中的所有作業。
•每個queue擁有的資源量和其他信息,在其他配置檔案里指定
•mapred.queue.<queue-name>.acl-submit-job和mapred.queue.<queue-name>.acl-administer-jobs配置方法如下:
用戶和用戶組之間用空格分開,用戶之間用“,”分割,用戶組之間用“,”分割,如果queue的屬性值中只有用戶組,則前面保留一個空格。
配置fair-scheduler.xml
<?xmlversion="1.0"?>
<allocations>
<poolname=“pool">
<minMaps>4</minMaps>
<minReduces>4</minReduces>
<maxRunningJobs>4</maxRunningJobs>
<minSharePreemptionTimeout>400</minSharePreemptionTimeout>
<weight>1.0</weight>
</pool>
<username="bob">
<maxRunningJobs>4</maxRunningJobs>
</user>
<poolMaxJobsDefault>30</poolMaxJobsDefault>
<userMaxJobsDefault>3</userMaxJobsDefault>
<defaultMinSharePreemptionTimeout>500</defaultMinSharePreemptionTimeout>
<fairSharePreemptionTimeout>500</fairSharePreemptionTimeout>
</allocations>
作業管理
•在core-site.xmll中配置以下屬性:
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
•配置${HADOOP_CONF_DIR}/hadoop-policy.xml
•參數格式
•用戶名與用戶組之間用空格分開
•用戶用戶之間用“,”
•Tom,catsuper,no
屬性 說明
security.clinet.protocol.acl 控制訪問HDFS的許可權
security.datanode.protocol.acl
控制datanode到namenode的通信許可權
security.clinet.datanode.protocol.acl 用戶block恢復
security.namenode.protocol.acl 控制sencondarynamenode與datanode許可權
security.inter.datanode.protocol.acl
DataNode之前更新時間戳
security.task.umbilical.protocol.acl 控制task與tasktracker通信
security.refresh.policy.protocol.acl 控制更新作業管理配置檔案
security.jobsubmission.protocol.acl 控制作業提交等許可權
•作業提交時指定Pool來進行提交
•示例
hadoopjarwordcount.jarwordcount-Dpool.name=your_nameinput
output
第四部分:Hadoop集群的狀態監控與管理工具
我們需要監督Hadoop什麼
•CPU使用率
•硬碟使用情況
•網路負載
•進程服務是否正常運行
•。。。。
手動每項去查看,非常痛苦的事情,我們需要工具
Ganglia
•Ganglia是什麼
•Ganglia是一個跨平台可擴展的,高性能計算系統下的分散式監控系統,如集群和格線。
•可以進行自動的進行信息的收集
•Ganglia組件
•Gmond
•Gmetad
•Web前端
•Gmetad-服務端
•負責周期性的到各個datasource收集各個cluster的數據,並更新到rrd資料庫中
•Gmond–客戶端
•收集本機的監控數據,傳送到其他機器上
•web瀏覽界面
•一個基於PHP的監控界面,通常和Gmetad安裝在同一個節點上
Ganglia優點
•自動收集數據
•圖形界面
•資料庫rrdtool存儲了歷史數據
•Gmond數據存儲在記憶體中,使用開銷比較小。
截圖
日誌監控
•設定日誌級別
•在調試過程中非常的有用
•設定方式
•頁面
•命令行
•hadoopdaemonlog–setleveljobtrackerhost-50030packegelevel
•持久改變
•log.logger.org.apache.hadoop.mapred.JobTracker=level
•獲得運行棧的信息
•http://namenode:50070/stacks

相關詞條

熱門詞條

聯絡我們