构建高可靠hadoop集群之0-hadoop用户向导
本文翻譯自:http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html
基于2.8.0文檔
1.目的
本文可以作為以下人員的入門指引:使用hdfs的用戶,或者僅僅使用分布式文件系統的用戶。雖然hdfs設計的目的是在多個環境中可以用,但關于Hdfs的工作原理還是很有助于配置和診斷特定集群。
2.概述
HDFS是Hadoop應用的主要分布式存儲。一個hDFS集群主要包含一個名稱節點(管理文件系統元數據)和一個多個數據節點(存儲實際的數據)。HDFS框架指引詳細地描述了HDFS。本指引主要描述有關用戶交互和HDFS集群管理。HDFS框架圖簡要示意了名稱節點,數據節點和客戶端的交互。
客戶端連接名稱節點獲得文件系統元數據或者文件修改,然后和數據節點進行直接的文件i/o。
以下一些顯著的特性對可能然許多用戶感興趣:
- hadoop,包含hdfs,很適用于分布式存儲,并利用普通的設備進行分布式計算。它有容錯,可伸縮,極其容易擴展。mapreduce,以簡單和可用于大量分布式應用知名,是hadoop的一部分。
- HDFS是高度可配,并有一個默認的配置,可以有許多的安裝方式。絕大部分時候,只有在非常大的集群中才需要調優(譯注:應該是指節點多,數據多吧?)。
- hadoop使用java編寫,支持所有主要的平臺
- hadoop支持類似于shell的命令,可以用于交互hdfs目錄
- 名稱節點和數據節點都有內建的web服務器,用戶很容易檢查集群當前狀態
- HDFS中一些新特性和提升會定期實現,以下幾點是一些有用的特性:(譯注,這是基于2.8.0編寫的)
3.前提
以下文檔描述如何安裝配置一個hadoop集群:
http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/SingleCluster.html
http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/ClusterSetup.html
本文的剩余部分都會假設用戶可以配置并運行至少有一個數據節點的HDFS。如果名稱節點和數據節點運行在單一機器也是可以的。
4.web界面
名稱節點和數據節點都有運行內部的web服務器,它們可以顯示關于當前集群狀態的基本信息。
根據默認設置,名稱節點的主頁是http://namenode-name:50070/.它會列出集群中的名稱節點和集群的基本統計信息。web界面也可以用于瀏覽文件系統
譯注:
可以通過8042,8099,50070端口訪問,如果不修改默認配置的話。
例如http://bigdata.lzf:8099可以看集群配置文件
???? http://bigdata.lzf:50070 可以看數據節點和文件
5.shell命令
hadoop包含各種類shell命令,可以用來交互HDFS和hadoop支持的其它文件系統。
命令 bin/hdfs dfs -help列出hadoop shell支持的命令。此外,bin/hdfs -help 命令名稱 可以顯示更多的細節。
這些命令支持類似普通文件系統絕大部分的操作,例如復制文件,修改權限,等等。hdfs也會支持一些hdfs特定的操作,諸如修改文件復制。
譯注:這個部分的內容和2.8.0全部文檔中關于文件操作的不盡相同。hdfs dfs的命令雖然和hadoop fs 基本一致,但2.8.0的文檔基本只介紹hadoop fs。這可能是文檔沒有妥當更新的緣故。
?
6.DFSAdmin 命令
hdfs dfsadmin命令支持一些hDFS管理。使用hdfs dfsadmin -help可以看看dfsadmin的詳細幫助。
譯注:更多細節參閱hadoop文檔,或者看幫助,本文的目的不在于這些細節。
7.第二名稱節點
名稱節點使用本地文件系統來記錄文件系統的修改,這個文件稱為編輯日志。當名稱節點啟動的時候,會從映像文件(fsimage-本地文件)獲取狀態,然后把編輯日志總的事務應用到映像文件中,然后生成新的映像文件,而現有的編輯日志被清空。
由于每次節點只在啟動的時候整合日志文件和映像文件,隨著時間的推移,日志文件就可能變得非常巨大。巨大文件的一個影響是,下一次名稱節點啟動的時候,會耗費更多時間。
第二名稱節點的作用之一就是定期合并編輯日志和映像文件,以便日志文件的大小保持在一個限度下。第二名稱節點通常運行在單獨的機器上,因為它對內存的需求同主名稱節點一樣。
第二名稱節點上檢查點進程的啟動受到兩個可配參數的控制:
dfs.namenode.checkpoint.period:默認是1小時(單位是秒),設定了兩個連續檢查點之間的最大延遲
dfs.namenode.checkpoint.txns:默認是1百萬(譯注:單位是個),設定未檢查的事務數,操作這個數,就會觸發檢查點操作。
譯注:兩個條件之一滿足就會觸發檢查點操作
第二名稱節點把最新的檢查點存儲在本地目錄,這個目錄結構同主名稱節點。這樣,如果有必要,主名稱節點總是可以讀取檢查點映像。(譯注:這就是后面說的導入檢查點)
?
8.檢查點節點
譯注:由于這個東西和第二名稱節點的作用類似,所以原文的絕大部分可以省略。
hdfs namenode -checkpoint? --啟動檢查點節點
dfs.namenode.backup.address 和dfs.namenode.backup.http-address可以用于配置檢查點(或者備份)節點的地址,包括http地址。
如果沒有備份節點,那么可以設定多個檢查點節點。
9.備份節點
備份節點提供除了和檢查點節點一樣,可以提供檢查點功能,還能夠實時同步一個和主節點一樣的系統命名空間(在內存中,并且狀態是活動)。備份節點從主節點通過流的方式接受主節點上的編輯日志,并把這些日志保存在磁盤中,同時這些編輯日志一樣會被應用到內存中,這樣備份節點內存中的名稱空間就和主節點完全一樣。
備份節點不需要從主節點下載映像文件和編輯日志,因為它的內存中有個和主節點一樣的名稱空間。備份節點的檢查點進程更加高效,因為它只需要把名稱空間保存到本地的映像文件,并充值編輯日志。
由于備份幾點維持了一個內存中的名稱空間備份,所以它對于內存的需求同名稱節點。
名稱節點只支持一個備份節點。備份節點和檢查點節點是不共存的。將來會支持同時使用多個備份節點(毫無疑問這是非常有必要的,apache已經意識到了)。
備份節點的配置方式同檢查點節點--- hdfs namenode -backup.
備份節點的位置它的web界面通過dfs.namenode.backup.address 和dfs.namenode.backup.http-address來配置。
通過使用備份節點,就可以在在非持久設備上運行名稱節點,并把狀態的持久責任全部委托給備份節點。為了達到這個目的,可以在啟動名稱節點的時候帶上-importCheckpoint參數,同時dfs.namenode.edits.dir參數中可以設定一個非持久存儲目錄。
為了能夠全面討論創建備份節點和檢查點節點背后的動機,請參閱 https://issues.apache.org/jira/browse/HADOOP-4539
中關于名稱節點部分內容。
10.導入檢查點
如果編輯日志和映像文件的所有其它備份都無效(或者丟失),那么可以把最新的檢查點導入到名稱節點中。為了這么做,應當:
名稱節點從檢查點路徑下載元數據到本地的dfs.namenode.name.dir,名稱節點會檢查映像文件的一致性,但不做任何修改。
The NameNode will upload the checkpoint from the dfs.namenode.checkpoint.dir directory and then save it to the NameNode directory(s) set in dfs.namenode.name.dir. The NameNode will fail if a legal image is contained in dfs.namenode.name.dir. The NameNode verifies that the image in dfs.namenode.checkpoint.dir is consistent, but does not modify it in any way.
11.均衡器
HDFS的數據可能并不總是均勻分布在各個數據節點上。一個通常的原因是新節點的加入。
當存放新數據塊的時候,名稱節點考慮多個情況以便選擇一個可以接受數據的數據節點,這些情況包括:
由于這些存在一定互斥的考慮,數據就可能無法在節點見均勻分布。HDFS給管理員提供了一個工具,可以分析塊的分布,并在各個數據節點之間重新均衡數據塊。
hdfs balancer
????????? [-threshold <threshold>]
????????? [-policy <policy>]
????????? [-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
????????? [-include [-f <hosts-file> | <comma-separated list of hosts>]]
????????? [-source [-f <hosts-file> | <comma-separated list of hosts>]]
????????? [-blockpools <comma-separated list of blockpool ids>]
????????? [-idleiterations <idleiterations>]
詳細參考
http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Balancer
12.機棧敏感
一個HDFS集群可以識別機棧拓撲(機棧--節點存放的地方)。為了優化數據的存儲和使用,正確配置拓撲還是很重要的。
具體參考:http://www.cnblogs.com/lzfhope/p/7000456.html
13.安全模式
名稱節點啟動的時候,首先至于安全模式,目的是檢查復制情況,檢查期間名稱節點可讀不可修改,這意味著期間任意文件都不可修改。
調整為正常模式之后,會把一些沒有正常復制的數據塊重新補充復制下。
除了啟動的時候,自動設置為安全模式,也可以顯式(手工)把集群設置為安全模式-- hdfs dfsadmin -safemode
14.fsck-文件檢查
fsck專門檢查各種文件的問題。例如塊丟失,或者塊復制不足。
不同于傳統文件系統的檢查工具,這個命令并不修正發現的錯誤。通常名稱節點自動修改絕大部分可以恢復的問題。
默認情況下,fsck會忽略打開的文件,但我們可以在執行這個命令的時候通過選項控制是否忽略打開的文件。
HDFS fsck命令并不是hadoop shell命令。
15.fetchdt-獲取委托令牌
HDFS支持fetchdet命令,以便獲取委托令牌,并把令牌存儲在本地文件系統。
令牌可以讓用戶從一個不安全的客戶端訪問安全的(secure)服務器(例如名稱節點)。
通過rpc或者https(通過kerberos)獲取令牌的工具,它們需要提供kerberos票。HDFS的fetchdt命令并非hadoop shell命令(譯注:同fsck一樣,雖然說不是hadoop shell命令,但我們一般都是那么任務的,只不過命令是以hdfs 開頭).
當通過工具獲得令牌之后,就可以不需要kerberos票就可以運行hdfs命令,前提是設置HADOOP_TOKEN_FILE_LOCATION環境變量。HADOOP_TOKEN_FILE_LOCATION指向令牌的存儲位置。
16.恢復模式
典型地,我們會配置多個元數據存儲位置。然后,如果一個存儲點壞了,那么我們可以從其它存儲點讀取。
然而,如果只有一個存儲點,且壞了,我們能怎么辦? 在這種情況下,有一個特別的名稱節點啟動模式,稱為恢復模式,這個模式可能讓我們恢復大部分的數據。
命令: hdfs namenode -recover
當處于恢復模式的時候,名稱節點以交互方式提示我們輸入一些信息,做出一些選擇。
如果不想被提示,可以給出-force選項。這種情況下,如果有選擇,程序也只會選擇第一個項目。通常情況下,這可能是最合理的選擇。
因為恢復模式可能導致數據丟失,所以應該在執行前備份編輯日志和映像文件。
17.升級和回滾
當升級一個集群的時候,可能會出現一個新的bug或者一些不兼容現有軟件的情況。在任何的正式安裝中,肯定是選擇保護數據,所以必須重啟hdfs。
hdfs允許管理員回退到更早的hadoop版本和升級前的狀態。hdfs升級的內容在hadoop升級wiki頁面有更詳細的說明。
HDFS一個時間只能有一個備份。在升級之前,管理員需要移除現存的備份,命令是hdfs dfsadmin -finalizeUpgrade.
下面簡要描述典型的升級過程:
-
- 停止集群,并部署早版本的hadoop
- 在名稱節點上執行hdfs namenode -rollback
- 以回滾方式啟動集群 sbin/start-dfs.sh -rollback
當升級到一個新版本hdfs的時候,有必要刪除在新版hdfs中保留的的路徑(也可以重新命名).如果名稱節點在升級過程遇到一個保留的路徑,那么它會輸入類似如下的錯誤信息:
/.reserved is a reserved path and .snapshot is a reserved path component in this version of HDFS. Please rollback and delete or rename this path, or upgrade with the -renameReserved [key-value pairs] option to automatically rename these paths during upgrade.
可以通過設定 -upgrade -renameReserved來繞過以上問題。例如,如果想重新命名所有.snapshot的路徑為.my-snapshot,用戶可以如下操作:
-upgrade -renameReserved .snapshot=.my-snapshot
如果有多個目錄,可以如下:
-upgrade -renameReserved .snapshot=.my-snapshot,.reserved=.my-reserved
對于重命名過程,有一些警告。我們建議,如果可能,應該在升級前保存名稱空間(通過 hdfs dfsadmin -saveNamespace).
這是因為數據可能不一致,如果編輯日志操作執行一個自動改名的文件。
18.數據節點熱交換磁盤
數據節點支持熱交換磁盤。用戶可以添加或者更換磁盤,而不用關閉數據節點。
下面簡要描述熱交換磁盤過程:
譯注:這個小節告訴我們,配置一個單機的時候,存儲數據的磁盤應該和操作系統磁盤有可能的話,還是分開。即一臺電腦上最好有兩塊硬盤,而且最好支持熱拔插。
?
19.文件權限和安全
文件系統的權限類似linux的。目前,安全僅限于簡單的文件權限。啟動名稱節點的用戶被當作HDFS的超級用戶。
將來版本的HDFS會支持網絡應用協議,例如用戶的kerberos授權和數據傳輸加密。詳細的信息參與權限指引。
譯注:用戶的kerberos授權,好像很早版本就有了,是否原文整理的時候沒有糾正?
20.可伸縮
hadoop當前可以構建一個成千上萬節點的集群。這個頁面powerdBy列出了知名的用戶。
hdfs有一個名稱節點。目前數據節點上的可用內存是主要的伸縮限制。在非常大的集群上,提高平均文件大小會提升集群的大小。默認的配置可能不適用于非常大集群。FAQ WIKI提供了大型集群的建議配置。
譯注:hadoop也在不斷升級中。
訪問 https://wiki.apache.org/hadoop/FAQ ,可以獲得許多可能有益的幫助。
作為hadoop的核心,了解hdfs是唯一重要的事情。mr在很多小型的集群或者hadoop應用中,作用并不是很大。在將來的硬件情況下,mr更加沒有價值。
轉載于:https://www.cnblogs.com/lzfhope/p/7002269.html
總結
以上是生活随笔為你收集整理的构建高可靠hadoop集群之0-hadoop用户向导的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云前端周刊 - 第 11 期
- 下一篇: 简单的在jsp页面操作mysql