日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据——Hadoop集群调优

發(fā)布時間:2024/3/26 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据——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開源組件并編譯

2)將編譯好的hadoop-lzo-0.4.20.jar放入${HADOOP_HOME}/share/common/

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.sh

2.2 磁盤間數據均衡

1)生成均衡計劃

hdfs diskbalancer -plan hadoop101

2)執(zhí)行均衡計劃

hdfs diskbalancer -execute hadoop101.plan.json

3)查看當前均衡任務的執(zhí)行情況

hdfs diskbalancer -query hadoop101

4)取消均衡任務

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.lzo

2)測試

(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 /output2

3)注意:如果以上任務,在運行過程中報如下異常

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 -clean

4)使用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集群调优的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。