溫馨提示×

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

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

記錄一次生產(chǎn)環(huán)境hadoop集群優(yōu)化以及pid文件缺失處理

發(fā)布時(shí)間:2020-07-07 20:06:04 來源:網(wǎng)絡(luò) 閱讀:1976 作者:斷臂人 欄目:大數(shù)據(jù)

一、優(yōu)化準(zhǔn)備

優(yōu)化需要根據(jù)實(shí)際情況綜合分析


1、關(guān)閉系統(tǒng)swap分區(qū)(如果未關(guān)閉的話)


在Hadoop中,如果使用系統(tǒng)默認(rèn)設(shè)置,會(huì)導(dǎo)致swap分區(qū)被頻繁使用,集群會(huì)不斷發(fā)出警告。


對(duì)于每個(gè)作業(yè)處理的數(shù)據(jù)量和每個(gè)Task中用到的各種緩沖,用戶都是完全可控的。


echo "vm.swappiness = 0" >> /etc/sysctl.conf


說明:盡量不使用交換分區(qū),注意不是禁用


2、資源和配置信息

2臺(tái)namenode,5臺(tái)datanode資源和配置信息


服務(wù)分布表如下所示:

記錄一次生產(chǎn)環(huán)境hadoop集群優(yōu)化以及pid文件缺失處理


軟件版本:

hadoop(hdfs+yarn) 2.7.3


hbase 1.2.4


查看CPU信息的命令:

查看CPU型號(hào)

# cat /proc/cpuinfo | grep name | cut -d: -f2 | uniq 


查看物理CPU個(gè)數(shù)

# cat /proc/cpuinfo |grep "physical id" | sort | uniq -c | wc -l


查看沒有物理CPU中的core的個(gè)數(shù),也就是核數(shù)

# cat /proc/cpuinfo | grep "cpu cores" | uniq


查看邏輯CPU的個(gè)數(shù)

# cat /proc/cpuinfo | grep "processor" | wc -l


CPU總核數(shù)= 物理CPU個(gè)數(shù) * 每顆物理CPU的核數(shù)

總邏輯CPU數(shù) = 物理CPU個(gè)數(shù) * 每顆物理CPU的核數(shù) * 超線程數(shù)


資源情況:

內(nèi)存 16G

CPU8(8個(gè)物理CPU,單核,單線程)


3、dfs.datanode.max.xcievers (dfs.datanode.max.transfer.threads)

這兩個(gè)是一個(gè)參數(shù),只不過前邊一個(gè)是hadoop1.0之前的參數(shù),表示datanode上負(fù)責(zé)進(jìn)行文件操作的線程數(shù)。如果需要處理的文件過多,而這個(gè)參數(shù)設(shè)置得過低就會(huì)有一部分文件處理不過來,就會(huì)報(bào)下面這個(gè)異常:

ERROR org.apache.hadoop.dfs.DataNode: DatanodeRegistration(192.168.10.103:50010,storageID=DS-1570581820-10.10.10.53-50010-1224117842339,infoPort=50075, ipcPort=50020):DataXceiver: java.io.IOException: xceiverCount 258 exceeds the limit of concurrent xcievers 256 


linux系統(tǒng)中所有的文件操作都被綁定到一個(gè)socket上,進(jìn)一步具體可以把他看做是一個(gè)線程。而這個(gè)參數(shù)就是指定這種線程的個(gè)數(shù)。在datanode里面有一個(gè)專門的線程組來維護(hù)這些線程,同時(shí)有一個(gè)守護(hù)線程來監(jiān)視這個(gè)線程組的體量,它負(fù)責(zé)監(jiān)測線程數(shù)量是否到達(dá)上線,超過就拋出異常。因?yàn)槿绻@樣的線程過多,系統(tǒng)內(nèi)存就會(huì)暴掉。

對(duì)于參數(shù)dfs.datanode.max.transfer.threads還依照現(xiàn)有配置 8192


  <property>

                <name>dfs.datanode.max.transfer.threads</name>

                <value>8192</value>

        </property>


默認(rèn)值:4096


4、dfs.namenode.handler.count

NameNode用來處理來自DataNode的RPC請(qǐng)求的線程數(shù)量

NameNode有一個(gè)工作線程池用來處理客戶端的遠(yuǎn)程過程調(diào)用及集群守護(hù)進(jìn)程的調(diào)用。處理程序數(shù)量越多意味著要更大的池來處理來自不同DataNode的并發(fā)心跳以及客戶端并發(fā)的元數(shù)據(jù)操作。對(duì)于大集群或者有大量客戶端的集群來說,通常需要增大參數(shù)dfs.namenode.handler.count的默認(rèn)值10。設(shè)置該值的一般原則是將其設(shè)置為集群大小的自然對(duì)數(shù)乘以20,即20logN,N為集群大小。如果該值設(shè)的太小,明顯的狀況就是DataNode在連接NameNode的時(shí)候總是超時(shí)或者連接被拒絕,但NameNode的遠(yuǎn)程過程調(diào)用隊(duì)列很大時(shí),遠(yuǎn)程過程調(diào)用延時(shí)就會(huì)加大。


集群大小是7,7的自然對(duì)數(shù)約等于2,所以這里的配置就是 20*log7 = 40

<property>  

<name>dfs.namenode.handler.count</name>  

<value>40</value>  

</property> 


默認(rèn)值:10


5、dfs.datanode.handler.count

DataNode用來連接NameNode的RPC請(qǐng)求的線程數(shù)量


設(shè)置為20

<property>  

<name>dfs.datanode.handler.count</name>  

<value>20</value>  

</property> 


默認(rèn)值:10


二、PID相關(guān)準(zhǔn)備

hadoop 及 hbase的pid文件默認(rèn)是放在/tmp下面的,這個(gè)你可以從啟動(dòng)關(guān)閉腳本中看出,不過這個(gè)目錄會(huì)定時(shí)清理。這就產(chǎn)生一個(gè)問題,當(dāng)再次關(guān)閉服務(wù)的時(shí)候,服務(wù)pid文件丟失就會(huì)產(chǎn)生jps不顯示服務(wù),但是web的管理頁面可以正常訪問的情況。我的解決辦法就是手動(dòng)生成缺水的pid文件,然后修改配置文件,重啟服務(wù)。


1、NameNode 、DataNode 以及SecondaryNameNode 的pid配置

hadoop-env.sh

export HADOOP_PID_DIR=/data/hadoop_data/pids

export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}


JobHistory的pid配置

mapred-env.sh

export HADOOP_MAPRED_PID_DIR=/data/hadoop_data/pids


NodeManager和ResourceManager的pid配置

yarn-env.sh

export YARN_PID_DIR=/data/hadoop_data/pids


HMaster和HRegionServer 的pid配置

hbase-env.sh 

export HBASE_PID_DIR=/data/hadoop_data/pids


PID文件的命令規(guī)則大家可以從腳本中找到


我這里并不是所有的pid文件路徑都沒有配置,需要配置的是MapReduce和yarn


2、集群中各節(jié)點(diǎn)服務(wù)啟動(dòng)情況以及PID文件存在情況

192.168.10.101:

$ jps

194921 HMaster

194352 DFSZKFailoverController

539317 JobHistoryServer

193972 NameNode


存在的pid文件:

目錄/data/hadoop_data/pids

hadoop-hduser-namenode.pid

hadoop-hduser-zkfc.pid

hbase-hduser-master.pid


192.168.10.102:

$ jps

371963 DFSZKFailoverController

371811 NameNode

372121 HMaster


存在的pid文件:

目錄/data/hadoop_data/pids

hadoop-hduser-namenode.pid

hadoop-hduser-zkfc.pid

hbase-hduser-master.pid


192.168.10.103:

$ jps

500043 JournalNode

500164 NodeManager

522618 HRegionServer

499932 DataNode


存在的pid文件:

目錄/data/hadoop_data/pids

hadoop-hduser-datanode.pid

hadoop-hduser-journalnode.pid

hbase-hduser-regionserver.pid


192.168.10.104:

$ jps

234784 NodeManager

234636 JournalNode

235070 HRegionServer

234525 DataNode


存在的pid文件:

目錄/data/hadoop_data/pids

hadoop-hduser-datanode.pid

hadoop-hduser-journalnode.pid

hbase-hduser-regionserver.pid


192.168.10.105:

$ jps

310371 HRegionServer

48404 NodeManager

48285 JournalNode

48174 DataNode


存在的pid文件:

目錄/data/hadoop_data/pids

hadoop-hduser-datanode.pid

hadoop-hduser-journalnode.pid

hbase-hduser-regionserver.pid


192.168.10.106:

$ jps

100855 HRegionServer

435319 DataNode

435456 NodeManager


存在的pid文件:

目錄/data/hadoop_data/pids

hadoop-hduser-datanode.pid

hbase-hduser-regionserver.pid


192.168.10.107:

$ jps

410010 NodeManager

484955 HRegionServer

409847 DataNode


存在的pid文件:

目錄/data/hadoop_data/pids

hadoop-hduser-datanode.pid

hbase-hduser-regionserver.pid


三、下面是具體的操作步驟


以下所有操作都是在hadoop集群服務(wù)管理用戶hduser下操作的


1、生成PID文件

根據(jù)實(shí)際情況創(chuàng)建相應(yīng)的PID文件


jps命令可以查看起著哪些服務(wù),然后查看pid文件目錄/data/hadoop_data/pids,如果服務(wù)啟動(dòng)但是沒有相應(yīng)的pid文件,則需要?jiǎng)?chuàng)建該服務(wù)的pid文件。


echo PID > /tmp/mapred-hduser-historyserver.pid 

       /tmp/yarn-hduser-resourcemanager.pid

       /tmp/yarn-hduser-nodemanager.pid


2、停止服務(wù)

這里需要說的是hadoop+hbase+zookeeper集群服務(wù)啟動(dòng)關(guān)閉順序


啟動(dòng)順序

zookeepeer->hadoop->hbase


停止順序

hbase->hadoop->zookeepeer


登錄到192.168.10.101(主hbase服務(wù)器,主namenode服務(wù)器)

停止hbase集群

$ cd /data/hbase/bin

$ ./stop-hbase.sh 


停止hadoop集群

$ cd /data/hadoop/sbin

$ ./stop-all.sh


停止MapReduce歷史記錄服務(wù)

$ cd /data/hbase/bin

$ ./mr-jobhistory-daemon.sh stop historyserver


3、修改配置文件

備份要修改的配置文件


修改配置文件

vim /data/hadoop/etc/hadoop/mapred-env.sh

添加:

export HADOOP_MAPRED_PID_DIR=/data/hadoop_data/pids


vim /data/hadoop/etc/hadoop/yarn-env.sh

添加:

export YARN_PID_DIR=/data/hadoop_data/pids


vim /data1/hadoop/etc/hadoop/hdfs-site.xml

修改如下:

<property>

         <name>dfs.datanode.max.transfer.threads</name>

         <value>8192</value>

     </property>


添加如下:

<property> 

   <name>dfs.namenode.handler.count</name>  

   <value>40</value>  

</property>

<property>  

   <name>dfs.datanode.handler.count</name>  

   <value>20</value>  

</property> 


vim /data/hbase/conf/hbase-env.sh

添加如下:

export HADOOP_HOME=/data/hadoop


vim /data/hbase/conf/hbase-site.xml

修改如下:

     <property>

        <name>hbase.rootdir</name>

        <value>hdfs://masters/hbase</value>

     </property>


在相應(yīng)的配置文件目錄把配置文件拷貝到其他節(jié)點(diǎn)

$ for ip in 102 103 104 105 106 107;do scp /data/hadoop/etc/hadoop/mapred-env.sh 192.168.10.$ip:/data/hadoop/etc/hadoop/;done

$ for ip in 102 102 104 105 106 107;do scp /data/hadoop/etc/hadoop/yarn-env.sh 192.168.10.$ip:/data/hadoop/etc/hadoop/;done

$ for ip in 102 102 104 105 106 107;do scp /data/hadoop/etc/hadoop/hdfs-site.xml 192.168.10.$ip:/data/hadoop/etc/hadoop/;done

$ for ip in 102 102 104 105 106 107;do scp /data/hbase/conf/hbase-env.sh 192.168.10.$ip:/data/hbase/conf/;done

$ for ip in 102 102 104 105 106 107;do scp /data/hbase/conf/hbase-site.xml 192.168.10.$ip:/data/hbase/conf/;done


移除 HBase 里面的不必要 log4j 的 jar 包

cd /data/hbase/lib

mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bak


4、啟動(dòng)服務(wù)

啟動(dòng)hadoop集群

$ cd /data/hadoop/sbin

$ ./start-all.sh


啟動(dòng)hbase集群

$ cd /data/hbase/bin

$ ./start-hbase.sh 


啟動(dòng)MapReduce歷史記錄服務(wù)

$ cd /data/hbase/bin

$ ./mr-jobhistory-daemon.sh start historyserver


5、驗(yàn)證

查看pid文件


192.168.10.101

$ cd /data/hadoop_data/pids

$ ll

total 24

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-namenode.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-zkfc.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-master.pid

-rw-r--r-- 1 hduser hadoop 33 Jun  6 22:49 hbase-hduser-master.znode

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 mapred-hduser-historyserver.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-resourcemanager.pid


192.168.10.102

$ ll

total 12

-rw-r--r-- 1 hduser hadoop 7 Jun  6 22:48 hadoop-hduser-namenode.pid

-rw-r--r-- 1 hduser hadoop 7 Jun  6 22:48 hadoop-hduser-zkfc.pid

-rw-r--r-- 1 hduser hadoop 7 Jun  6 22:49 hbase-hduser-master.pid


192.168.10.103

$ ll

total 20

-rw-r--r-- 1 hduser hadoop  6 Jun  6 22:48 hadoop-hduser-datanode.pid

-rw-r--r-- 1 hduser hadoop  6 Jun  6 22:48 hadoop-hduser-journalnode.pid

-rw-r--r-- 1 hduser hadoop  6 Jun  6 22:49 hbase-hduser-regionserver.pid

-rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode

-rw-r--r-- 1 hduser hadoop  6 Jun  6 22:48 yarn-hduser-nodemanager.pid


192.168.10.104

$ ll

total 20

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-journalnode.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid

-rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid


192.168.10.105

$ ll

total 20

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-journalnode.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid

-rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid


192.168.10.106

$ ll

total 16

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid

-rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid


192.168.10.107

$ ll

total 16

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid

-rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode

-rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid


查看調(diào)用是否正常


注意事項(xiàng):

事項(xiàng)一:如果生產(chǎn)環(huán)境有監(jiān)控服務(wù)的腳本或者服務(wù)則需要先停止對(duì)于服務(wù)的監(jiān)控,以防止服務(wù)停止時(shí)觸發(fā)監(jiān)控,進(jìn)而自動(dòng)重啟服務(wù)。

事項(xiàng)二:一定記得把配置文件同步到每個(gè)節(jié)點(diǎn)(各節(jié)點(diǎn)配置文件一致的話)


參考:

官網(wǎng)文檔:

http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/ClusterSetup.html


官網(wǎng)配置參考:


http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml


參考文章:

https://blog.csdn.net/qq_26091271/article/details/50411383

https://www.cnblogs.com/hanganglin/p/4563716.html

https://blog.csdn.net/odailidong/article/details/79656188

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

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

AI