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
查看web
啟動以後,會使用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。
使用shell刪除一個文件或是目錄
$ 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 API客戶端刪除
使用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);
}
}
小結:
歡迎加入,共同學習技術:
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
TAG:健哥說編程 |