Hadoop之linux調(diào)優(yōu)
標簽: hadoop
linux
1. 增大文件描述符nofile(查看當前的lsof |wc -l) 和 用戶最大進程nproc
a. 調(diào)整Linux的最大文件打開數(shù):
>> vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
b. RHEL6下引入了配置文件:
>> vim /etc/security/limits.d/90-nproc.conf
soft nproc 65535
c. pam_limits.so 文件被加入到啟動文件
>> vim /etc/pam.d/login session required /lib/security/pam_limits.so session required pam_limits.so
d.重啟系統(tǒng)
>> reboot
#######只針對當前session會話,快速設(shè)置
>> ulimit -u
1024
>> ulimit -u
65535
>> ulimit -u
65535
-n <文件數(shù)目> 指定同一時間最多可打開的文件數(shù)绑嘹。
-u <進程數(shù)目> 用戶最多可啟動的進程數(shù)目。
2. 網(wǎng)絡(luò)(兩個網(wǎng)絡(luò)相關(guān)的參數(shù)可以影響Hadoop的性能。net.core.somaxconn Linux內(nèi)核設(shè)置能夠支持NameNode和JobTracker的大量爆發(fā)性的HTTP請求)
a. net.core.somaxconn是listen()的默認參數(shù),掛起請求的最大數(shù)量.默認是128.對繁忙的服務(wù)器,增加該值有助于網(wǎng)絡(luò)性能宾添,當前已經(jīng)被調(diào)整到32768
>> more /etc/sysctl.conf |grep net.core.somaxconn sysctl -w net.core.somaxconn=32768 echo net.core.somaxconn=32768 >> /etc/sysctl.conf
b. 設(shè)置txqueuelen到4096及以上能夠更好地適應(yīng)在Hadoop集群中的突發(fā)流量, txqueuelen代表用來傳輸數(shù)據(jù)的緩沖區(qū)的儲存長度瓦哎,
通過下面的命令可以對該參數(shù)進行設(shè)置為4096纤控。
>> ifconfig eth0 Link encap:Ethernet HWaddr 00:16:3E:02:00:2B inet addr:xx.xxx.xx.x Bcast:xx.xxx.xx.xxx Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:55072078 errors:0 dropped:0 overruns:0 frame:0 TX packets:33328184 errors:0 dropped:0 overruns:0 carrier:0 collisions:0
txqueuelen:1000
RX bytes:23381014283 (21.7 GiB) TX bytes:4464530654 (4.1 GiB)
可以看到當前的eth0的txqueuelen
值為1000,設(shè)置為4096
>> ifconfig eth0 txqueuelen 4096
3. 關(guān)閉swap分區(qū)
>> more /etc/sysctl.conf | vm.swappiness echo vm.swappiness = 0 >> /etc/sysctl.conf
4. 設(shè)置合理的預(yù)讀取緩沖區(qū)(readahead buffer)大小
調(diào)整linux文件系統(tǒng)中預(yù)讀緩沖區(qū)地大小群叶,可以明顯提高順序讀文件的性能。默認buffer大小為256 sectors储耐,可以增大為1024或者2408 sectors(注意羊初,并不是越大越好)∈蚕妫可使用blockdev命令進行調(diào)整长赞。
>> df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 7.1G 31G 19% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/vdb1 197G 36G 152G 19% /data/01
>> blockdev --report RO RA SSZ BSZ StartSec Size Device rw 256 512 4096 0 42949672960 /dev/vda rw 256 512 4096 2048 42947575808 /dev/vda1 rw 256 512 4096 0 214748364800 /dev/vdb rw 256 512 4096 63 214748029440 /dev/vdb1
修改/dev/vdb1的readahead buffer,因為hadoop的dfs nn等等文件夾是在這個目錄下
>> blockdev --setra 1024 /dev/vdb1
5. I/O調(diào)度器選擇(一般不調(diào)整,只會在mapreduce中調(diào)整)
主流的Linux發(fā)行版自帶了很多可供選擇的I/O調(diào)度器。在數(shù)據(jù)密集型應(yīng)用中闽撤,不同的I/O調(diào)度器性能表現(xiàn)差別較大得哆,
管理員可根據(jù)自己的應(yīng)用特點啟用最合適的I/O調(diào)度器
6. vm.overcommit_memory設(shè)置
進程通常調(diào)用malloc()函數(shù)來分配內(nèi)存,內(nèi)存決定是否有足夠的可用內(nèi)存哟旗,并允許或拒絕內(nèi)存分配的請求贩据。Linux支持超量分配內(nèi)存,以允許分配比可用RAM加上交換內(nèi)存的請求闸餐。
vm.overcommit_memory參數(shù)有三種可能的配置:
- 0 表示檢查是否有足夠的內(nèi)存可用饱亮,如果是,允許分配舍沙;如果內(nèi)存不夠近上,拒絕該請求,并返回一個錯誤給應(yīng)用程序拂铡。
- 1 表示根據(jù)vm.overcommit_ratio定義的值壹无,允許分配超出物理內(nèi)存加上交換內(nèi)存的請求。vm.overcommit_ratio參數(shù)是一個百分比感帅,加上內(nèi)存量決定內(nèi)存可以超量分配多少內(nèi)存斗锭。
例如,vm.overcommit_ratio值為50留瞳,而內(nèi)存有1GB拒迅,那么這意味著在內(nèi)存分配請求失敗前,加上交換內(nèi)存她倘,內(nèi)存將允許高達1.5GB的內(nèi)存分配請求璧微。- 2 表示內(nèi)核總是返回true。
除了以上幾個常見的Linux內(nèi)核調(diào)優(yōu)方法外硬梁,還有一些其他的方法前硫,管理員可根據(jù)需要進行適當調(diào)整。
【查看當前值】
>> sysctl -n vm.overcommit_memory
【永久性修改內(nèi)核參數(shù)】
在/etc/sysctl.conf文件里面加入或者直接刪除也可以荧止,因為它缺省 值就是0
>> vim /etc/sysctl.conf
vm.overcommit_memory = 0
運行使之生效
>> sysctl -p
7. Transparent Huge Page
已啟用“透明大頁面”屹电,它可能會導(dǎo)致重大的性能問題阶剑。版本為“CentOS release 6.3 (Final)”且版本為“2.6.32-279.el6.x86_64”的 Kernel 已將 enabled 設(shè)置為“[always] never”,并將 d
efrag 設(shè)置為“[always] never”危号。請運行“echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag”以禁用此設(shè)置牧愁,然后將同一命令添加到一個 init 腳本中,
如 /etc/rc.local外莲,這樣當系統(tǒng)重啟時就會設(shè)置它猪半。或者偷线,升級到 RHEL 6.4 或更新版本磨确,它們不存在此錯誤。將會影響到以下主機声邦。
>> cat /sys/kernel/mm/redhat_transparent_hugepage/defrag [always] madvise never
>> echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
>> echo 'echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag' >> /etc/rc.local