生產調優1 HDFS-核心引數
1 HFDS核心引數
搭建HFDS叢集時必須要參考的引數
1.1 NameNode 記憶體生產配置
問題描述
1) NameNode 記憶體計算
每個檔案塊大概佔用 150byte,一臺伺服器 128G 記憶體為例,能儲存多少檔案塊呢?
128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1 億
2) Hadoop3.x 系列,配置 NameNode 記憶體
/opt/module/hadoop-3.1.3/etc/hadoop路徑下的hadoop-env.sh 中描述 Hadoop 的記憶體是動態分配的
# The maximum amount of heap to use (Java -Xmx). If no unit # is provided, it will be converted to MB. Daemons will # prefer any Xmx setting in their respective _OPT variable. # There is no default; the JVM will autoscale based upon machine //如果沒有設定該引數,會按照伺服器記憶體賦值 # memory size. # export HADOOP_HEAPSIZE_MAX= # The minimum amount of heap to use (Java -Xms). If no unit # is provided, it will be converted to MB. Daemons will # prefer any Xms setting in their respective _OPT variable. # There is no default; the JVM will autoscale based upon machine # memory size. # export HADOOP_HEAPSIZE_MIN=
檢視 NameNode 佔用記憶體
[ranan@hadoop102 hadoop]$ jpsall =============== hadoop102 =============== 15473 JobHistoryServer 15268 NodeManager 14933 DataNode 15560 Jps 14749 NameNode =============== hadoop103 =============== 13969 Jps 13218 DataNode 13717 NodeManager 13479 ResourceManager =============== hadoop104 =============== 13012 Jps 12869 NodeManager 12572 DataNode 12750 SecondaryNameNode [ranan@hadoop102 hadoop]$ jmap -heap 14749 Heap Configuration: MaxHeapSize = 1023410176 (976.0MB)
檢視 DataNode 佔用記憶體
[ranan@hadoop102 hadoop]$ jmap -heap 14749
MaxHeapSize = 1023410176 (976.0MB)
檢視發現 hadoop102 上的 NameNode 和 DataNode 佔用記憶體都是自動分配的,且相等。如果兩者同時達到上限(系統也就是976M),明明記憶體不足了還顯示有,就會搶佔linux系統記憶體,不合理。所以需要手動配置。
hadoop-env.sh中配置
經驗:
具體修改: hadoop-env.sh
[ranan@hadoop102 hadoop]$ vim hadoop-env.sh
[ranan@hadoop102 hadoop]$ vim hadoop-env.sh
//不修改預設配置資訊,選擇拼接。 - Xmx1024m進行拼接
export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx1024m"
export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"
[ranan@hadoop102 hadoop]$ xsync hadoop-env.sh
重啟叢集
[ranan@hadoop102 hadoop]$ myhadoop.sh stop
[ranan@hadoop102 hadoop]$ myhadoop.sh start
檢視NameNode記憶體
[ranan@hadoop103 hadoop]$ jpsall
=============== hadoop102 ===============
22292 NodeManager
22500 JobHistoryServer
21957 DataNode
21766 NameNode
22598 Jps
=============== hadoop103 ===============
19041 Jps
18531 ResourceManager
18824 NodeManager
18314 DataNode
=============== hadoop104 ===============
16787 SecondaryNameNode
16602 DataNode
16906 NodeManager
17069 Jps
[ranan@hadoop102 hadoop]$ jmap -heap 21766
檢視DataNode記憶體
[ranan@hadoop102 hadoop]$ jmap -heap 21957
1.2 NameNode 心跳併發配置
DataNode啟動後告訴NameNode本機的塊資訊(塊是否完好),並週期性(預設6個小時)上報所有塊訊息(塊是否完好)。
如果DataNode數量很多,NameNode會準備執行緒來處理彙報,同時客戶端也有可能向NameNode請求。
問題:NameNode準備多少執行緒合適?
修改hdfs-site.xml配置
NameNode有一個工作執行緒池,用來處理不同DataNode的併發心跳以及客戶端併發的元資料操作。
引數dfs.namenode.hakdler.count
,預設時10
[ranan@hadoop102 ~]$ sudo yum install -y python
[ranan@hadoop102 ~]$ python
Python 2.7.5 (default, Apr 11 2018, 07:36:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>> import math
>>> print int(20*math.log(3))
21
>>> quit()
hdfs-site.xml新增
[ranan@hadoop102 hadoop]$ vim hdfs-site.xml
<!-- 新增 -->
<property>
<name>dfs.namenode.handler.count</name>
<value>21</value>
</property>
1.3 開啟回收站配置
開啟回收站功能,可以將刪除的檔案在不超時的情況下,回覆原資料,起到防止誤刪除、備份的等作用。預設是禁用的。
回收站機制
假設檔案存活時間設定為fs.trash,interval = 60
60min,每過10min檢查回收站裡的檔案存活時間fs.trash,checkpoint.interval=10
,如果不設定則和檔案存活時間間隔一致,每60min檢查一次
開啟回收站功能引數說明
(1)預設值 fs.trash.interval = 0, 0 表示禁用回收站; 其他值表示設定檔案的存活時間。
(2) 預設值 fs.trash.checkpoint.interval = 0,檢查回收站的間隔時間。如果該值為 0,則該值設定和 fs.trash.interval 的引數值相等。
(3) 要求 fs.trash.checkpoint.interval <= fs.trash.interval。
啟動回收站-修改core-site.xml
修改 core-site.xml, 配置垃圾回收時間為 1 分鐘。
<!--新增-->
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
查看回收站
回收站目錄在HDFS叢集中的路徑:/user/ranan/.Trash/...
注意:通過網頁上直接刪除是不走回收站的
通過程式刪除的檔案不會經過回收站,需要呼叫 moveToTrash()才進入回收站
Trash trash = New Trash(conf);
trash.moveToTrash(path); //刪除之後新增到回收站
只有在命令列利用 hadoop fs -rm 命令刪除的檔案才會走回收站。
[ranan@hadoop102 hadoop]$ hadoop fs -rm /test.txt
2021-11-04 16:25:53,705 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop102:8020/test.txt' to trash at: hdfs://hadoop102:8020/user/ranan/.Trash/Current/test.txt
恢復回收站資料
[ranan@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /user/ranan/.Trash/Current/test.txt /