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

sufeizi發表於2013-12-11
Hadoop RestFul
Hadoop HDFS原理1
Hadoop HDFS原理2
Hadoop作業調優引數調整及原理
Hadoop HA
Hadoop MapReduce高階程式設計
Hadoop IO
Hadoop MapReduce工作原理
Hadoop 管理
Hadoop 叢集安裝
Hadoop RPC
 
第一部分:HDFS管理
命令列工具
?HDFS檔案系統檢查工具FSCK
?用法:hadoop fsck [ GENERIC_OPTIONS] [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]
?命令選項描述檢查的起始目錄。
?-move移動受損檔案到/lost+found-delete刪除受損檔案。
?-openforwrite列印出寫開啟的檔案。
?-files列印出正被檢查的檔案。
?-blocks列印出塊資訊報告。
?-locations列印出每個塊的位置資訊。
?-racks列印出data-node的網路拓撲結構。
d fsadmin
命令選項
描述
-report
報告檔案系統的基本資訊和統計資訊。
-refreshNodes
重新讀取hosts和exclude檔案,更新允許連到Namenode的或那些需要退出或入編的Datanode的集合。
-finalizeUpgrade
終結HDFS的升級操作。Datanode刪除前一個版本的工作目錄,之後Namenode也這樣做。這個操作完結整個升級過程。
命令選項
描述
-metasave filename
儲存Namenode的主要資料結構到hadoop.log.dir屬性指定的目錄下的檔案。對於下面的每一項,中都會一行內容與之對應 
1. Namenode收到的Datanode的心跳訊號 
2. 等待被複制的塊 
3. 正在被複制的塊 
4. 等待被刪除的塊
-setQuota ...
為每個目錄 設定配額。目錄配額是一個長整型整數,強制限定了目錄樹下的名字個數。 
命令會在這個目錄上工作良好,以下情況會報錯: 
1. N不是一個正整數,或者 
2. 使用者不是管理員,或者 
3. 這個目錄不存在或是檔案,或者 
4. 目錄會馬上超出新設定的配額。
-upgradeProgress status | details | force
請求當前系統的升級狀態,狀態的細節,或者強制升級操作進行。
-clrQuota ...
為每一個目錄清除配額設定。 
命令會在這個目錄上工作良好,以下情況會報錯: 
1. 這個目錄不存在或是檔案,或者 
2. 使用者不是管理員。 
如果目錄原來沒有配額不會報錯。

規劃管理HDFS資料 
?無論是做為開發者還是管理員瞭解HDFS目錄結構與規劃都是很重要的一件事情。
?它們可以幫助我們診斷問題
?如何管理HDFS資料也是我們需要研究的課題
?Namenode的目錄結構:
           ${dfs.name.dir}/current /VERSION 
                                                  /edits 
                                                  /fsimage 
                                                  /fstime
    dfs.name.dir是hdfs-site.xml裡配置的若干個目錄組成的列表。
?通過設定Sencondary  NameNode解決edits log變大問題
?Sencondary  Namenode的目錄結構:
           ${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
?命令列hadoop dfsadmin -safemode enter | 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 資訊
hadoop job -list
殺掉 Job
hadoop  job –kill
?指定路徑下檢視歷史日誌彙總
?hadoop job -history output-dir
?作業的更多細節
?hadoop job -history all output-dir
?列印map和reduce完成百分比和所有計數器
hadoop job –status job_id
?殺死任務。被殺死的任務不會不利於失敗嘗試。
?hadoop jab -kill-task
?使任務失敗。被失敗的任務會對失敗嘗試不利。
?hadoop job  -fail-task
Hadoop mradmin
命令
說明
-refreshServiceAcl
重新裝載ACL認證檔案
-refreshQueues
重新整理任務佇列的資訊
-refreshUserToGroupsMappings
重新整理使用者與使用者組對應關係
-refreshSuperUserGroupsConfiguration
重新整理使用者組的配置
-refreshNodes
重新整理JobTracker的主機配置資訊
 
 
UI詳細介紹
?UI 有足夠的資訊,供我們檢視Job執行的資訊與歷史執行記錄
?URL
?http://50030/jobtracker
 
第三部分:Hadoop安全與許可權的管理
?安全認證
?確保使用者的身份
?授權
?確保使用者的操作只能是在被允許的範圍內
?使用者
?Hadoop使用者
?服務
?NameNode 等
 
?Hadoop原來的版本安全性比較低。
Namenode 或者 J obtracker 缺乏安全認證機制
DataNode 缺乏安全授權機制
?Hadoop提供了兩種安全機制:Simple和Kerberos
 
Simple機制
 
?Simple機制(預設情況,Hadoop採用該機制)是JAAS協議與delegation token整合機制
?JAAS是Java 認證和授權服務(Java Authentication and Authorization Service)的縮寫,是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
?reduce task對“請求URL”和“當前時間”計算HMAC-SHA1值,並將該值作為請求的一部分發動給TaskTracker,TaskTracker收到 後會驗證該值的正確性
RPC 安全機制 
?使用者傳送RPC時,會將自己的使用者名稱放在請求資訊裡
?RPCServer 接受到資訊後, RPCServer 會校驗授權,如果通過請傳送給使用者響應
 
 
Hadoop許可權管理
?使用者分組管理
?使用者按組為單位組織管理
?可以限制使用者使用的資源等內容
?Hadoop 使用Linux的使用者與使用者組
?作業管理
?作業提交許可權控制
?作業執行狀態檢視許可權控制。
?可限定可提交作業的使用者
?可限定可檢視作業執行狀態的使用者
?可限定普通使用者只能修改自己作業的優先順序,kill自己的作業
?高階使用者可以控制所有作業。 
 
?這一點很重要,如果沒有許可權,會造成資料混亂
?主要是通過系統的使用者組許可權來進行控制
 
MapReduce許可權管理
?MapReduce支援許可權管理需使用Fair Scheduler或者 Capacity Scheduler
?為MapReduce新增許可權管理一共分3步
?配置Fair Scheduler或者 Capacity Scheduler
?配置使用者管理
?配置作業的ACL
配置許可權
?配置Fair Scheduler
 
?配置使用者管理
?配置Queue相關資訊
?配置屬性在mapre-site.xml
 
配置Queue的相關資訊
  mapred.acls.enabled
  true
  mapred.queue.names
  test,default
 屬性 mapred.queue.names  queue 的所有名字,在這一名字中,必須有一個叫  default”  queue
  mapred.queue.my_queue.acl-submit-job
   test
 
 
  mapred.queue.default.acl-administer-jobs
  
 mapred.queue.my_queue.acl-administer-jobs
  
 
 
 
?mapred.queue.names是queue的所有名字
?必須有一個叫“default”的queue
? mapred.queue..acl-submit-job,指定哪些user或者group可以向該queue中提交作業
?mapred.queue..acl-administer-jobs,指定哪些user或者group可以管理該queue中的所有作業。
? 每個queue擁有的資源量和其他資訊,在其他配置檔案裡指定
? mapred.queue..acl-submit-job和mapred.queue..acl-administer-jobs配置方法如下:
      使用者和使用者組之間用空格分開,使用者之間用“,”分割,使用者組之間用“,”分割,如果queue的屬性值中只有使用者組,則前面保留一個空格。
 
 
配置fair-scheduler.xml
  pool ">
     4 
     4 
      4 
      400 
       1 .0
 
     
       4 
      
        30 
        3 
        5 00
        5 00
 
 
作業管理
?在core-site.xmll中配置以下屬性:
  hadoop.security.authorization
  true
?配置${HADOOP_CONF_DIR}/hadoop-policy.xml
?引數格式
?使用者名稱與使用者組之間用空格分開
?使用者使用者之間用“,”
?Tom,cat super,no
屬性
說明
security.clinet.protocol.acl
控制訪問HDFS的許可權
security.datanode.protocol.acl
 
控制datanode到namenode的通訊許可權
 
security.clinet.datanode.protocol.acl
使用者block恢復
security.namenode.protocol.acl
控制sencondary namenode與datanode許可權
security.inter.datanode.protocol.acl
 
DataNode之前更新時間戳
security.task.umbilical.protocol.acl
控制task與tasktracker通訊
security.refresh.policy.protocol.acl
控制更新作業管理配置檔案
security.jobsubmission.protocol.acl
控制作業提交等許可權
 
 
?作業提交時指定Pool來進行提交
?示例
   hadoop jar wordcount.jar wordcount  -D  pool.name= your_name input
       output
 
 
 
第四部分:Hadoop叢集的狀態監控與管理工具 
我們需要監督Hadoop什麼
 
?CPU使用率
?硬碟使用情況
?網路負載
?程式服務是否正常執行
?。。。。
手動每項去檢視,非常痛苦的事情,我們需要工具
 
  
Ganglia
?Ganglia 是什麼
?Ganglia是一個跨平臺可擴充套件的,高 效能計算系統下的分散式監控系統,如叢集和網格。
?可以進行自動的進行資訊的收集
?Ganglia 元件
?Gmond
?Gmetad
?Web前端
 
 
?Gmetad -服務端
?負責週期性的到各個datasource收集各個cluster的資料,並更新到rrd資料庫中
?Gmond –客戶端
?收集本機的監控資料,傳送到其他機器上
?web 瀏覽介面
?一個基於PHP的監控介面,通常和Gmetad安裝在同一個節點上
Ganglia優點
?自動收集資料
?圖形介面
? 資料庫rrdtool儲存了歷史資料
?Gmond 資料儲存在記憶體中,使用開銷比較小。
截圖
 
日誌監控
?設定日誌級別
?在除錯過程中非常的有用
?設定方式
?頁面
?命令列
?hadoop  daemonlog –setlevel  jobtrackerhost-50030 packege level
?持久改變
?log.logger.org.apache.hadoop.mapred.JobTracker= level
?獲得執行棧的資訊
?http://namenode:50070/stacks
轉載請註明出處http://sishuok.com/forum/blogPost/list/0/5966.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29361362/viewspace-1062958/,如需轉載,請註明出處,否則將追究法律責任。

相關文章