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