大数据——Hadoop集群调优
注意:本文使用的Hadoop版本為3.2.1版本
目錄
一、HDFS多目錄存儲
1.1 生產環(huán)境服務器磁盤情況
1.2 在hdfs-site.xml文件中配置多個目錄,需要注意新掛載磁盤的訪問權限問題。
二、集群數據均衡
2.1 節(jié)點間數據均衡
1)開啟數據均衡命令
2)停止數據均衡命令
2.2 磁盤間數據均衡
1)生成均衡計劃
2)執(zhí)行均衡計劃
3)查看當前均衡任務的執(zhí)行情況
4)取消均衡任務
三、配置LZO壓縮
1)下載hadoop-lzo開源組件并編譯
3)同步hadoop-lzo-0.4.20.jar到集群中的其他節(jié)點
4)core-site.xml增加配置支持LZO壓縮
5)同步core-site.xml至集群中的其他節(jié)點
四、LZO創(chuàng)建索引
1)創(chuàng)建LZO文件的索引,LZO壓縮文件的可切片特性依賴于其索引,所以需要手動為LZO壓縮文件創(chuàng)建索引。若無索引,則LZO文件的切片只有一個。
2)測試
3)注意:如果以上任務,在運行過程中報如下異常
五、Hadoop集群基準測試
1)?測試HDFS寫性能
2)測試HDFS讀性能
3)刪除測試生成數據
4)使用Sort程序評測MapReduce
六、Hadoop參數調優(yōu)
6.1 HDFS參數調優(yōu)hdfs-site.xml
6.2 YARN參數調優(yōu)yarn-site.xml
一、HDFS多目錄存儲
1.1 生產環(huán)境服務器磁盤情況
1.2 在hdfs-site.xml文件中配置多個目錄,需要注意新掛載磁盤的訪問權限問題。
? ? ? ? HDFS中DataNode節(jié)點保存數據的路徑由dfs.datanode.data.dir參數決定,其默認值為file://${hadoop.tmp.dir}/dfs/data,若服務器中有多個磁盤,必須對改參數進行修改。如服務器磁盤如上圖所示,則該參數應修改為如下的值。
<property><name>dfs.datanode.data.dir</name> <value>file:///dfs/data1,file:///hd2/dfs/data2,file:///hd3/dfs/data3,file:///hd4/dfs/data4</value> </property>????????多目錄之間用逗號作為分隔符。另外,值得注意的是,每臺服務器掛載的磁盤不一定一樣,所以沒臺節(jié)點的多目錄配置一般是不同的,需要手動的到每臺服務器下去配置該項。
二、集群數據均衡
2.1 節(jié)點間數據均衡
1)開啟數據均衡命令
start-balancer.sh -threshold 10對于參數10,代表的是急群眾各個節(jié)點的磁盤空間利用率相差不超過10%,可根據實際情況進行調整。
2)停止數據均衡命令
stop-balancer.sh2.2 磁盤間數據均衡
1)生成均衡計劃
hdfs diskbalancer -plan hadoop1012)執(zhí)行均衡計劃
hdfs diskbalancer -execute hadoop101.plan.json3)查看當前均衡任務的執(zhí)行情況
hdfs diskbalancer -query hadoop1014)取消均衡任務
hdfs diskbalancer -cancel hadoop101.plan.json切記在集群空閑的時候進行操作,不然的話rpc跨節(jié)點網絡傳輸很考費資源,可能造成集群任務長時間獲取不到資源而運行失敗。
三、配置LZO壓縮
1)下載hadoop-lzo開源組件并編譯
hadoop本身并不支持lzo壓縮,所以需要使用twitter提供的hadoop-lzo開源組件。hadoop-lzo需依賴hadoop和lzo進行編譯,編譯步驟如下。
0. 環(huán)境準備
maven(下載安裝,配置環(huán)境變量,修改sitting.xml加阿里云鏡像)
gcc-c++
zlib-devel
autoconf
automake
libtool
通過yum安裝即可,yum -y install gcc-c++ lzo-devel zlib-devel autoconf automake libtool
1. 下載、安裝并編譯LZO
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar -zxvf lzo-2.10.tar.gz
cd lzo-2.10
./configure -prefix=/usr/local/hadoop/lzo/
make
make install
2. 編譯hadoop-lzo源碼
2.1 下載hadoop-lzo的源碼,下載地址:https://github.com/twitter/hadoop-lzo/archive/master.zip
2.2 解壓之后,修改pom.xml
? ? <hadoop.current.version>3.1.3</hadoop.current.version>
2.3 聲明兩個臨時環(huán)境變量
? ? ?export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include
? ? ?export LIBRARY_PATH=/usr/local/hadoop/lzo/lib?
2.4 編譯
? ? 進入hadoop-lzo-master,執(zhí)行maven編譯命令
? ? mvn package -Dmaven.test.skip=true
2.5 進入target,hadoop-lzo-0.4.21-SNAPSHOT.jar 即編譯成功的hadoop-lzo組件
2)將編譯好的hadoop-lzo-0.4.20.jar放入${HADOOP_HOME}/share/common/
3)同步hadoop-lzo-0.4.20.jar到集群中的其他節(jié)點
4)core-site.xml增加配置支持LZO壓縮
<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value></property><property><name>io.compression.codec.lzo.class</name><value>com.hadoop.compression.lzo.LzoCodec</value></property>5)同步core-site.xml至集群中的其他節(jié)點
四、LZO創(chuàng)建索引
1)創(chuàng)建LZO文件的索引,LZO壓縮文件的可切片特性依賴于其索引,所以需要手動為LZO壓縮文件創(chuàng)建索引。若無索引,則LZO文件的切片只有一個。
hadoop jar /opt/install/hadoop/share/common/hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer big_file.lzo2)測試
(1)將bigtable.lzo(200M)上傳到集群的根目錄
hdfs dfs -mkdir /input hdfs dfs -put bigtable.lzo /input(2)執(zhí)行wordcount程序
hadoop jar /opt/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /input /output1?(3)對上傳的LZO文件建索引
hadoop jar /opt/install/hadoop/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /input/bigtable.lzo?(4)再次執(zhí)行WordCount程序
hadoop jar /opt/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /input /output23)注意:如果以上任務,在運行過程中報如下異常
Container [pid=8468,containerID=container_1594198338753_0001_01_000002] is running 318740992B beyond the 'VIRTUAL' memory limit. Current usage: 111.5 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container. Dump of the process-tree for container_1594198338753_0001_01_000002 :解決辦法:在hadoop101的/opt/install/hadoopetc/hadoop/yarn-site.xml文件中增加如下配置,然后分發(fā)到hadoop102、hadoop103服務器上,并重新啟動集群。
<!--是否啟動一個線程檢查每個任務正使用的物理內存量,如果任務超出分配值,則直接將其殺掉,默認是true --> <property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value> </property><!--是否啟動一個線程檢查每個任務正使用的虛擬內存量,如果任務超出分配值,則直接將其殺掉,默認是true --> <property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value> </property>五、Hadoop集群基準測試
1)?測試HDFS寫性能
測試內容:向HDFS集群寫10個128M的文件
hadoop jar /opt/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.1-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB------------------------------------------------------------------------------------------- 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: Date & time: Sat Aug 21 16:24:54 CST 2021 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: Number of files: 10 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: Total MBytes processed: 1280 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: Throughput mb/sec: 7.67 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: Average IO rate mb/sec: 7.73 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: IO rate std deviation: 0.67 2021-08-21 16:24:54,075 INFO fs.TestDFSIO: Test exec time sec: 37.47 2021-08-21 16:24:54,076 INFO fs.TestDFSIO: -------------------------------------------------------------------------------------------2)測試HDFS讀性能
測試內容:讀取HDFS集群10個128M的文件
hadoop jar /opt/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.1-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB------------------------------------------------------------------------------------------- 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: Date & time: Sat Aug 21 16:28:11 CST 2021 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: Number of files: 10 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: Total MBytes processed: 1280 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: Throughput mb/sec: 659.11 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: Average IO rate mb/sec: 750.62 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: IO rate std deviation: 299.71 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: Test exec time sec: 17.37 2021-08-21 16:28:11,894 INFO fs.TestDFSIO: -------------------------------------------------------------------------------------------3)刪除測試生成數據
hadoop jar /opt/inistall/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.1-tests.jar TestDFSIO -clean4)使用Sort程序評測MapReduce
(1)使用RandomWriter來產生隨機數,每個節(jié)點運行10個Map任務,每個Map產生大約1G大小的二進制隨機數
hadoop jar /opt/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar randomwriter random-data(2)執(zhí)行Sort程序
hadoop jar /opt/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar sort random-data sorted-data(3)驗證數據是否真正排好序了
hadoop jar /opt/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.1-tests.jar testmapredsort -sortInput random-data -sortOutput sorted-data六、Hadoop參數調優(yōu)
6.1 HDFS參數調優(yōu)hdfs-site.xml
<!--The number of Namenode RPC server threads that listen to requests from clients. If dfs.namenode.servicerpc-address is not configured then Namenode RPC server threads listen to requests from all nodes. NameNode有一個工作線程池,用來處理不同DataNode的并發(fā)心跳以及客戶端并發(fā)的元數據操作。 對于大集群或者有大量客戶端的集群來說,通常需要增大參數dfs.namenode.handler.count的默認值10。--> <property><name>dfs.namenode.handler.count</name><value>10</value> </property>dfs.namenode.handler.count=,比如集群規(guī)模為8臺時,此參數設置為41。可通過簡單的python代碼計算該值,代碼如下。
python Python 2.7.5 (default, Aug 11 2021, 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(8)) 41 >>> quit()6.2 YARN參數調優(yōu)yarn-site.xml
(1)情景描述:總共7臺機器,每天幾億條數據,數據源->Flume->Kafka->HDFS->Hive
面臨問題:數據統(tǒng)計主要用HiveSQL,沒有數據傾斜,小文件已經做了合并處理,開啟的JVM重用,而且IO沒有阻塞,內存用了不到50%。但是還是跑的非常慢,而且數據量洪峰過來時,整個集群都會宕掉?;谶@種情況有沒有優(yōu)化方案。
(2)解決辦法:
內存利用率不夠。這個一般是Yarn的2個配置造成的,單個任務可以申請的最大內存大小,和Hadoop單個節(jié)點可用內存大小。調節(jié)這兩個參數能提高系統(tǒng)內存的利用率。
(a)yarn.nodemanager.resource.memory-mb
表示該節(jié)點上YARN可使用的物理內存總量,默認是8192(MB),注意,如果你的節(jié)點內存資源不夠8GB,則需要調減小這個值,而YARN不會智能的探測節(jié)點的物理內存總量。
(b)yarn.scheduler.maximum-allocation-mb
單個任務可申請的最多物理內存量,默認是8192(MB)。
總結
以上是生活随笔為你收集整理的大数据——Hadoop集群调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一级计算机ppt操作常考知识点,2017
- 下一篇: 基于快速去雾的图像亮度增强方法