溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

cdh 之 HDFS集群優(yōu)化篇003

發(fā)布時間:2020-06-12 10:54:46 來源:網(wǎng)絡(luò) 閱讀:2284 作者:馬吉輝 欄目:大數(shù)據(jù)

2019/3/21 星期四

1、操作系統(tǒng)級別優(yōu)化 選擇Linux的文件系統(tǒng)為:XFS文件系統(tǒng)

2、預(yù)讀緩沖
預(yù)讀技術(shù)可以有效的減少磁盤尋道次數(shù)和應(yīng)用的I/O等待時間,增加Linux文件系統(tǒng)預(yù)讀緩沖區(qū)的大小(默認(rèn)為256 sectors,128KB),可以明顯提高順序文件的讀性能,建議調(diào)整到1024或2048 sectors。預(yù)讀緩沖區(qū)的設(shè)置可以通過blockdev命令來完成。

[root@NewCDH-0--141 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 50G 45G 5.7G 89% /
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 49M 7.8G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/mapper/centos-home xfs 46G 342M 46G 1% /home
/dev/sda1 xfs 497M 121M 377M 25% /boot
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0
cm_processes tmpfs 7.8G 58M 7.7G 1% /run/cloudera-scm-agent/process
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/997
[root@NewCDH-0--141 ~]# blockdev --getra /dev/mapper/centos-root
8192
[root@NewCDH-0--141 ~]# blockdev --getra /dev/mapper/centos-home
8192

修改的命令為:
blockdev --setra 2048 /dev/mapper/centos-home

3、放棄RAID和LVM磁盤管理方式,選用JBOD
JBOD
  JBOD是在一個底板上安裝的帶有多個磁盤驅(qū)動器的存儲設(shè)備,JBOD沒有使用前端邏輯來管理磁盤數(shù)據(jù),每個磁盤可實現(xiàn)獨(dú)立并行的尋址。將DataNode部署在配置JBOD設(shè)備的服務(wù)器上可提高DataNode性能。

4、內(nèi)存調(diào)優(yōu) swap

5、調(diào)整內(nèi)存分配策略

6、.網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)

二.HDFS集群性能優(yōu)化
歸檔
查看歸檔文件 //適合管理hdfs的大量小文件
[root@NewCDH-0--141 ~]# sudo -u hdfs hadoop fs -ls har:///newdata.har
Found 1 items
drwxr-xr-x - hdfs supergroup 0 2018-03-19 18:37 har:///newdata.har/mjh
[root@NewCDH-0--141 ~]# sudo -u hdfs hadoop fs -ls har:///newdata.har/mjh
Found 3 items
drwxr-xr-x - hdfs supergroup 0 2018-03-19 18:37 har:///newdata.har/mjh/shiyanshuju
-rw-r--r-- 3 hdfs supergroup 17 2018-03-19 18:37 har:///newdata.har/mjh/test.txt
-rw-r--r-- 3 hdfs supergroup 12 2018-03-19 18:37 har:///newdata.har/mjh/test2.txt

壓縮

三.HDFS集群配置優(yōu)化
1、dfs.namenode.handler.count NameNode 的服務(wù)器線程的數(shù)量。
NameNode中用于處理RPC調(diào)用的線程數(shù),默認(rèn)為32。對于較大的集群和配置較好的服務(wù)器,可適當(dāng)增加這個數(shù)值來提升NameNode RPC服務(wù)的并發(fā)度。
服務(wù)線程個數(shù),調(diào)大一些,一般原則是將其設(shè)置為集群大小的自然對數(shù)乘以20,即20logN,N為集群大小 N 集群服務(wù)器數(shù)量
(我的HDFS集群配置是:128T硬盤,32core,128G內(nèi)存空間。) 此值設(shè)置為:20 log12=120
4個節(jié)點(diǎn)話 就是20 log4 =40
//這個部分在cdh官方網(wǎng)站中有新的解釋
在hdfs中
dfs.namenode.service.handler.count和dfs.namenode.handler.count - 對于每個NameNode,設(shè)置為ln(此HDFS服務(wù)中的DataNode數(shù))
20。
//我們datanode 4個節(jié)點(diǎn) ,那么
NameNode 服務(wù)處理程序計數(shù)
原文為:dfs.namenode.service.handler.count and dfs.namenode.handler.count - For each NameNode, set to ln(number of DataNodes in this HDFS service) 20.
參考鏈接:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_mc_autoconfig.html
中的 hdfs通用規(guī)則 General Rules
參考鏈接:論dfs.namenode.handler.count配置參數(shù)的總要性
https://blog.csdn.net/turk/article/details/79723963
公式為:
python -c 'import math ; print int(math.log(N)
20)'
#N 集群服務(wù)器數(shù)量
//4個節(jié)點(diǎn)為 27 計算過程為
[root@cdh-master-130-201 conf]# python -c 'import math ; print int(math.log(4) 20)'
27
我們線上 44個HDFS節(jié)點(diǎn)
[root@cdh-master-130-201 conf]# python -c 'import math ; print int(math.log(44)
20)'
75

2、dfs.datanode.handler.count:3 DataNode 服務(wù)器線程數(shù)。
DataNode中用于處理RPC調(diào)用的線程數(shù),默認(rèn)為3??蛇m當(dāng)增加這個數(shù)值來提升DataNode RPC服務(wù)的并發(fā)度(推薦值:20)。 注意:線程數(shù)的提高將增加DataNode的內(nèi)存需求,

3、dfs.replication 復(fù)制因子 默認(rèn)為3 不變

4、dfs.block.size HDFS 塊大小 默認(rèn)128M
數(shù)據(jù)塊設(shè)置太小會增加NameNode的壓力。數(shù)據(jù)塊設(shè)置過大會增加定位數(shù)據(jù)的時間。這個值跟你的磁盤轉(zhuǎn)速有關(guān),我之前在的博客里有解釋為什么是128M,其實這個跟磁盤的轉(zhuǎn)速有關(guān)。我們可以自定義這個塊大小,考慮2個因素,第一,查看你的集群文件大致范圍都是多大?如果文件基本上都是64M~128M左右的話,建議你不要修改。如果大部分文件都在200M~256M之間的話,你可以將配置塊大小改為256,當(dāng)然你也得考慮你的磁盤讀寫性能。

5、dfs.datanode.data.dir 不變
HDFS數(shù)據(jù)存儲目錄。將數(shù)據(jù)存儲分布在各個磁盤上可充分利用節(jié)點(diǎn)的I/O讀寫性能。因此在實際生產(chǎn)環(huán)境中,這就是為什么我們將磁盤不選擇RAID和LVM,而非要選擇JBOD的原因。推薦設(shè)置多個磁盤目錄,以增加磁盤IO的性能,多個目錄用逗號進(jìn)行分隔。

6、io.file.buffer.size 在yarn中修改
HDFS文件緩沖區(qū)大小,默認(rèn)為4096(即4K)。 推薦值:131072(128K)。這個得編輯core-site.xml配置文件,如果你用的CDH的話,直接在YARN服務(wù)里修改即可。

7、fs.trash.interval 文件系統(tǒng)垃圾間隔
HDFS清理回收站的時間周期,單位為分鐘。默認(rèn)為0,表示不使用回收站特性。推薦開啟它,時間你自己定義,推薦4~7天均可。

8、dfs.datanode.du.reserved 適用于非分布式文件系統(tǒng) (DFS) 使用的保留空間(字節(jié)/卷)。
DataNode保留空間大小,單位為字節(jié)。默認(rèn)情況下,DataNode會占用全部可用的磁盤空間,該配置項可以使DataNode保留部分磁盤空間工其他應(yīng)用程序使用。這個得視具體應(yīng)用而定,推薦稍微空出點(diǎn)空間,5G~10G均可。
默認(rèn)為5G

9、機(jī)架感知 懂的

10、
dfs.datanode.max.xcievers 最大傳輸線程數(shù) 指定在 DataNode 內(nèi)外傳輸數(shù)據(jù)使用的最大線程數(shù)。
 這個值是指定 datanode 可同時處理的最大文件數(shù)量,推薦將這個值調(diào)大,默認(rèn)是256,最大值可以配置為65535。

11 避免臟讀寫操作 //開啟
dfs.namenode.avoid.read.stale.datanode
dfs.namenode.avoid.write.stale.datanode

12、 增大Service Monitor 將使用配置屬性列表,搜索:“dfs.datanode.socket”,默認(rèn)都是3秒,我這里把“dfs.socket.timeout” “dfs.datanode.socket.write.timeout”改成了30000s。

13、
DataNode 平衡帶寬
dfs.balance.bandwidthPerSec, dfs.datanode.balance.bandwidthPerSec 每個 DataNode 可用于平衡的最大帶寬。單位為字節(jié)/秒
//更具每個公司的集群網(wǎng)絡(luò)來判斷,datanode之間的互相傳輸

14、
依據(jù)迭代設(shè)置復(fù)制工作乘數(shù)器
dfs.namenode.replication.work.multiplier.per.iteration
提高依據(jù)迭代設(shè)置復(fù)制工作乘數(shù)器的數(shù)值(默認(rèn)值是2,然而推薦值是10)

15.
DataNode 上的最大復(fù)制線程數(shù)
dfs.namenode.replication.max-streams 推薦值 50
Datanode 上復(fù)制線程數(shù)的硬限制
dfs.namenode.replication.max-streams-hard-limit 推薦值100
推薦值為 50/100

16、
fs.trash.checkpoint.interval
以分鐘為單位的垃圾回收檢查間隔。應(yīng)該小于或等于fs.trash.interval。如果是0,值等同于fs.trash.interval。每次檢查器運(yùn)行,會創(chuàng)建新的檢查點(diǎn)。
建議值為1小時
//指定Filesystem Trash Interval屬性,該屬性控制刪除垃圾檢查點(diǎn)目錄的分鐘數(shù)以及垃圾檢查點(diǎn)之間的分鐘數(shù)。 例如,要啟用垃圾桶以便在24小時后刪除已刪除的文件,請將Filesystem Trash Interval屬性的值設(shè)置為1440。
???? 注意:垃圾箱間隔是從文件移動到垃圾箱的位置開始計算的,而不是從上次修改文件的位置開始計算的。

17、
HDFS High Availability 防御方法 不變
dfs.ha.fencing.methods
解釋:用于服務(wù)防御的防御方法列表。shell(./cloudera_manager_agent_fencer.py) 是一種設(shè)計為使用 Cloudera Manager Agent 的防御機(jī)制。sshfence 方法使用 SSH。如果使用自定義防御程序(可能與共享存儲、電源裝置或網(wǎng)絡(luò)交換機(jī)通信),則使用 shell 調(diào)用它們。
[root@NewCDH-0--141 ~]# ls -l /run/cloudera-scm-agent/process/2428-hdfs-NAMENODE/cloudera_manager_agent_fencer.py
-rwxr----- 1 hdfs hdfs 2149 Mar 21 15:51 /run/cloudera-scm-agent/process/2428-hdfs-NAMENODE/cloudera_manager_agent_fencer.py
參考鏈接為:
https://blog.csdn.net/fromthewind/article/details/84106341

18、
dfs.datanode.hdfs-blocks-metadata.enabled - 對于每個HDFS服務(wù),如果群集中有Impala服務(wù),則設(shè)置為true。這條規(guī)則是無規(guī)則的;即使HDFS服務(wù)不在范圍內(nèi),它也可以觸發(fā)。

19、?dfs.client.read.shortcircuit - 對于每個HDFS服務(wù),如果群集中有Impala服務(wù),則設(shè)置為true。這條規(guī)則是無規(guī)則的;即使HDFS服務(wù)不在范圍內(nèi),它也可以觸發(fā)。
//也就是hdfs的文件在本機(jī)的話,就不走網(wǎng)絡(luò) 直接在本地讀取 提高了hbase 或者impala的效率 并有助于改善HBase隨機(jī)讀取配置文件和Impala性能。

20、dfs.datanode.data.dir.perm - 對于每個DataNode,如果群集中有Impala服務(wù)且群集未進(jìn)行Kerberized,則設(shè)置為755。這條規(guī)則是無規(guī)則的;即使HDFS服務(wù)不在范圍內(nèi),它也可以觸發(fā)。
???
21 fs.trash.interval - 對于每個HDFS服務(wù),設(shè)置為1 天 (文件系統(tǒng)垃圾間隔 1天)。

22 設(shè)置服務(wù)的最大文件符
最低要求角色:配置程序(也由群集管理員,完全管理員提供)
您可以為所有守護(hù)程序角色設(shè)置最大文件描述符參數(shù)。 未指定時,角色將使用從主管繼承的任何值。 指定后,將軟限制和硬限制配置為配置的值。

???? 去服務(wù)。
???? 單擊“配置”選項卡。
???? 在“搜索”框中,鍵入rlimit_fds。
???? 為一個或多個角色設(shè)置“最大進(jìn)程文件描述符”屬性。
???? 單擊“保存更改”以提交更改。
???? 重啟受影響的角色實例。
//這個很重要 ,不光是針對hdfs 是針對cloudera 上的所有服務(wù),都可以,或者說都需要去設(shè)置這個最大文件描述符 我們設(shè)置為 65535

參考鏈接:
HDFS集群優(yōu)化篇 https://www.cnblogs.com/yinzhengjie/p/10006880.html
【配置CDH和管理服務(wù)】關(guān)閉DataNode前HDFS的調(diào)優(yōu):https://blog.csdn.net/a118170653/article/details/42774599
參考鏈接:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_mc_autoconfig.html
參考鏈接:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_mc_max_fd.html

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI