當前位置:
首頁 > 最新 > Hadoop集群配置細節說明

Hadoop集群配置細節說明

以下是一些注意的細節:

1.想要執行一些有價值的工作,必須要在多個節點上運行。

2.集群的規模的大小並沒有一個確定的答案。10個節點的集群算是一個小的集群。以後可以隨存儲與計算需求進行擴充。

3.namenode在內存中保存整個命名空間中所有文件的元信息信息,所以需要內存很大。secondaryNameNode在大多數時間裡面空閑,但是它在創建檢查點時間的內存與namenode差不多。所以,應該將namenode和secondaryNameNode與namenode部署在不同的節點上。

4.一般來說,各機架裝配30~40台伺服器,共享一個10G的交換機。

5.Java和Hadoop版本的支持見:https://wiki.apache.org/hadoop/HadoopJavaVersions。

Version 2.7 and later of Apache Hadoop requires Java 7. It is built and tested on both OpenJDK and Oracle (HotSpot)"s JDK/JRE。Earlier versions (2.6 and earlier) support Java 6.

6.hadoop安裝的標準目錄為:/usr/local或是/opt。鑒於hadoop用戶的home目錄,可能掛載在NFS上,hadoop系統最好不要安裝到用戶目錄下,即不要安裝到/home/$user.name目錄下。

7.mapred不使用ssh,如同hadoop2和以後版本中的一樣,唯一的mapreduce守護進程就是作業歷史伺服器,即historyserver。使用mr-jobhistory-daemon.sh start histroyserver來啟動這個服務。

8.儘管期望無密碼登錄,但無口令的密鑰不是一個好的選擇(運行在本地偽分散式時,不防使用一個空的口令)。因此當使用ssh-keygen生成密鑰對時,不防設置一個口令。然後使用ssh-agent以免每個連接逐一輸入密碼。關於ssh-agent的使用,見後面的附錄。

9.文件slaves列舉了可以運行的datanode和節點管理器(nodemanager)的機器。

10.配置文件目錄默認在HADOOP_HOME/etc/hadoop目錄下。配置目錄,可以被重新安置到其他地方,只要啟動守護進行時使用--config選項即可,或是使用HADOOP_CONF_DIR環境變數指定配置文件的目錄。

11.hadoop的配置文件:hadoop-env.sh,mapred-env.sh,yarn-site.sh,core-site.xml,hdfs-site.xml,

mapred-site.xml,yarn-site.xml,slaves,hadoop-metrics2.properties,log4j.properties,hadoop-policy.xml。

12.內存堆大小:在默認情況下,hadoop為各個守護進程分配1000MB內存。該內存值由hadoop-env.sh文件的HADOOP_HEAPSIZE參數控制。也可以在單個守護進程的配置文件為每一個守護進程修改堆大小。例如,在yarn-env.sh中設置YARN_RESOURCEMANAGER_HEAPSIZE即可覆蓋資源管理器的堆大小。

13.由於namenode會在內存中維護所有文件的每個數據塊的引用,因此namenode很可能會「吃光」分配給它的所有內存。一個含有200節點,每個節點24T磁碟空間為例,假設數據塊大小為128M,複本數量為3,則約有200百萬個數據塊。200*24000000MB/(128M*3)。這樣的話,將namenode設置成12000MB內存比較合適,即12G。同時,由於輔助namenode和namenode的內在需求相當,所以,一旦修改了namenode的內存,應該同時修改輔助namenode的內存。可以通過HADOO_NAMENODE_OPTS和HADOOP_SECONDARYNAMENODE_OPTS直接向JVM傳遞選項。

14.屬性fs.defaultFS描述HDFS文件系統的URI,其主機是namenode的主機名或ip地址,埠號為namenode監聽RPC的埠號,如果沒有指定,那麼默認埠為8020。與此相關的其他屬性如:

18.Hdfs塊大小:hdfs默認的塊大小為128M,可以將這個修改成256M,以降低namenode的內存壓力。可以通過hdfs-site.xml中修改dfs.blocksize實現。


1、start-dfs.sh腳本的工作如下

1、在每台機器上啟動一個NameNode,這些機器由執行hdfs getconf -namenodes得到返回值確定是否繼續運行。

2、在slaves文件列舉的每台機器上啟動一個datanode。

3、在每台機器上啟動一個輔助namenode(secondarynamenode),這些機器由執行hdfs getconf -secondarynamenodes得到返回值以確定是否繼續運行。


2、start-yarn.sh腳本的工作如下

1、在默認的情況下,資源管理器ResourceManager總是和start-yarn.sh腳本運行在同一機器上。

2、在本機啟動一個資源管理器即ResourceManager。

3、在slaves文件列舉的每台機器上啟動一個節點管理器,即NodeManager。

3、hadoop守進程的關鍵配置屬性

core-site.xml

fs.defaultFS

hdfs://hadoop41:8020

hdfs-site.xml

注意以下都是配置了兩個目錄,如果在正式的集群下,請使用dfs.replication=3。

dfs.replication

1

/app/datas1/hdfs/name,/app/datas2/hdfs/name

/app/datas1/hdfs/data,/app/datas2/hdfs/data

/app/datas1/hdfs/namesecondary,/app/datas2/hdfs/namesecondary

yarn-site.xml

yarn.nodemanager.local-dirs用於指定保存本地化文件,如Mapper臨時輸出的文件。

hadoop41

mapreduce_shuffle

/app/datas1/nm-local-dir,/app/datas2/nm-local-dir

mapred-site.xml

yarn


4、timelineserver

自hadoop2.4以後,yarn添加了守護進程timelineserver。可以方便的獲取MRApp的歷史信息。但要查看counters等信息,還是需要開啟mr historyserver。


可選的屬性:yarn-site.xml中啟用timelineserver:

yarn.timeline-service.enabled

true

true

yarn.timeline-service.generic-application-history.enabled

true


啟動:timelineserver的命令:

$ yarn-daemons.sh start timelineserver

啟動以後的服務為:

ApplicationHistoryServer


啟動以後,會使用8188埠,現在可以訪問這個埠:

如果需要查看19888埠的JobHistoryServer服務,必須要再使用以下命令,啟動:

$ mr-jobhistory-daemon.sh start historyserver


回收站

使用shell hdfs命令行操作刪除的文件,將會被移動到回收站中。但使用Java代碼,刪除的文件,不會被移動到回收站中。不過,在Java API中,可以使用Trash類的moveToTrash方法,將文件移動到回收站中。

被刪除的文件,將保存到hdfs://ip:port/user/$USER/.Trash目錄下。


以下配置啟用回收站,設置回收站中的數據保留60分鐘。Core-site.xml文件中添加以下配置:

60

配置成功以後,啟動hdfs和yarn。


$ hdfs dfs -rm -r /out001

18/06/04 09:54:44 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 60 minutes, Emptier interval = 0 minutes.

18/06/04 09:54:44 INFO fs.TrashPolicyDefault: Moved: "hdfs://hadoop41:8020/out001" to trash at: hdfs://hadoop41:8020/user/wangjian/.Trash/Current/out001

Moved: "hdfs://hadoop41:8020/out001" to trash at: hdfs://hadoop41:8020/user/wangjian/.Trash/Current

通過上面的信息可以看出,刪除的目錄,被移動到了/user/$USER/.Trash目錄下。


[wangjian@hadoop41 hadoop]$ hdfs dfs -ls -R /user/wangjian

drwx------ wangjian supergroup0 2018-06-04 10:00 /user/wangjian/.Trash


從回收站中找回數據,就是將回收站中的數據移出回收站即可。

$ hdfs dfs -mv /user/wangjian/.Trash/180604100000/out001 /out001


使用hdfs dfs -expunge可以刪除已經在回收站中超過最小時間限制的所有文件。注意,對於沒有超過時間限制的文件,並不會被刪除。


使用Java客戶端刪除的文件,將不會被移動到回收站中。除非使用Trash類的moveToTrash方法。

/**

* 使用Java代碼,將一個文件刪除,默認不會去回收站的測試

*@authorwangjian

*/

publicclassDemo05_TrashextendsConfiguredimplementsTool {

@Override

publicintrun(String[]args)throwsException {

Configurationconfig= getConf();

config.set("fs.defaultFS","hdfs://hadoop41:8020");

FileSystemfs= FileSystem.get(config);

Pathpath=newPath("/words.txt");

Trashtrash=newTrash(fs,config);

booleanboo=trash.moveToTrash(path);

return0;

}

publicstaticvoidmain(String[]args)throwsException {

intcode= ToolRunner.run(newDemo05_Trash(),args);

System.exit(code);

}

}

小結:

歡迎加入,共同學習技術:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 健哥說編程 的精彩文章:

今天講講ssh-agent

TAG:健哥說編程 |