1. 程式人生 > 其它 >生產調優1 HDFS-核心引數

生產調優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工作機制

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 = 6060min,每過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 /