2021年大数据HBase(十七):❤️HBase的360度全面调优❤️
全網最詳細的大數據HBase文章系列,強烈建議收藏加關注!?
新文章都已經列出歷史文章目錄,幫助大家回顧前面的知識重點。
目錄
🐏系列歷史文章🐏
🐇HBase的360度全面調優🐇
一、??通用調優??
二、??Linux調優??
三、??HDFS調優??
四、🌊HBase的調優🌊
五、🐷內存優化🐷
六、🐈Zookeeper的調優🐈
🐏系列歷史文章🐏
2021年大數據HBase(十七):HBase的360度全面調優
2021年大數據HBase(十六):HBase的協處理器(Coprocessor)
2021年大數據HBase(十五):HBase的Bulk Load批量加載操作
2021年大數據HBase(十四):HBase的原理及其相關的工作機制
2021年大數據HBase(十三):HBase讀取和存儲數據的流程
2021年大數據HBase(十二):Apache Phoenix 二級索引
2021年大數據HBase(十一):Apache Phoenix的視圖操作
2021年大數據HBase(十):Apache Phoenix的基本入門操作
2021年大數據HBase(九):Apache Phoenix的安裝
2021年大數據HBase(八):Apache Phoenix的基本介紹
2021年大數據HBase(七):Hbase的架構!【建議收藏】
2021年大數據HBase(六):HBase的高可用!【建議收藏】
2021年大數據HBase(五):HBase的相關操作-JavaAPI方式!【建議收藏】
2021年大數據HBase(四):HBase的相關操作-客戶端命令式!【建議收藏】
2021年大數據HBase(三):HBase數據模型
2021年大數據HBase(二):HBase集群安裝操作
2021年大數據HBase(一):HBase基本簡介
🐇HBase的360度全面調優🐇
一、??通用調優??
1) NameNode的元數據備份使用SSD
2) ?定時備份NameNode上的元數據 ? ? 每小時或者每天備份,如果數據極其重要,可以5~10分鐘備份一次。
備份可以通過定時任務復制元數據目錄即可。
3)為NameNode指定多個元數據目錄
? ? ?使用dfs.name.dir或者dfs.namenode.name.dir指定。一個指定本地磁盤,一個指定網絡磁盤。這樣可以提供元數據的冗余和健壯性,以免發生故障。
? ? 設置dfs.namenode.name.dir.restore為true,允許嘗試恢復之前失敗的dfs.namenode.name.dir目錄,在創建checkpoint時做此嘗試,如果設置了多個磁盤,建議允許。
4) NameNode節點配置為RAID1(鏡像盤)結構
5) 保持NameNode日志目錄有足夠的空間,有助于幫助發現問題。
6) Hadoop是IO密集型框架,所以盡量提升存儲的速度和吞吐
二、??Linux調優??
1) 開啟文件系統的預讀緩存可以提高讀取速 ? ?
$ sudo blockdev --setra 32768 /dev/sda ? (尖叫提示:ra是readahead的縮寫)
2) 最大限度使用物理內存
?$ sudo sysctl -w vm.swappiness=0
swappiness,Linux內核參數,控制換出運行時內存的相對權重
swappiness參數值可設置范圍在0到100之間,低參數值會讓內核盡量少用交換,更高參數值會使內核更多的去使用交換空間
默認值為60(當剩余物理內存低于40%(40=100-60)時,開始使用交換空間)
對于大多數操作系統,設置為100可能會影響整體性能,而設置為更低值(甚至為0)則可能減少響應延遲
3) 調整ulimit上限, 默認值為比較小的數字
$ ulimit -n 查看允許最大進程數 ? ? ?
$ ulimit -u 查看允許打開最大文件數
4)開啟集群的時間同步NTP
三、??HDFS調優??
1) 保證RPC調用會有較多的線程 ? ? ? ?
屬性:dfs.namenode.handler.count ? ? ? ?
解釋:該屬性是NameNode服務默認線程數,的默認值是10,根據機器的可用內存可以調整為50~100 ? ? ? ?
屬性:dfs.datanode.handler.count ? ? ? ?
解釋:該屬性默認值為10,是DataNode的處理線程數,如果HDFS客戶端程序讀寫請求比較多,可以調高到15~20,設置的值越大,內存消耗越多,不要調整的過高,一般業務中,5~10即可。
2) 副本數量的調整
屬性:dfs.replication ? ?
解釋:如果數據量巨大,且不是非常之重要,可以調整為2~3,如果數據非常之重要,可以調整為3~5。
3) 文件塊大小的調整 ? ? ?
屬性:dfs.blocksize ? ? ?
解釋:塊大小定義,該屬性應該根據存儲的大量的單個文件大小來設置,如果大量的單個文件都小于100M,建議設置成64M塊大小,對于大于100M或者達到GB的這種情況,建議設置成256M,一般設置范圍波動在64M~256M之間。
四、🌊HBase的調優🌊
1) ?優化DataNode允許的最大文件數
屬性:dfs.datanode.max.transfer.threads ? ? ?
文件:hdfs-site.xml ? ? ?
解釋:HBase一般都會同一時間操作大量的文件,根據集群的數量和規模以及數據動作,設置為4096或者更高。默認值:4096
2) 優化延遲高的數據操作的等待時間 ? ?
屬性:dfs.image.transfer.timeout ? ?
文件:hdfs-site.xml ? ?
解釋:如果對于某一次數據操作來講,延遲非常高,socket需要等待更長的時間,建議把該值設置為更大的值(默認60000毫秒),以確保socket不會被timeout掉。
3) 優化數據的寫入效率
屬性: ? ? ? ? ?
mapreduce.map.output.compress ? ? ? ? ?
mapreduce.map.output.compress.codec
文件:mapred-site.xml
解釋:開啟這兩個數據可以大大提高文件的寫入效率,減少寫入時間。第一個屬性值修改為true,第二個屬性值修改為:org.apache.hadoop.io.compress.GzipCodec
4) 優化DataNode存儲
屬性:dfs.datanode.failed.volumes.tolerated
文件:hdfs-site.xml ? ? ?
解釋:默認為0,意思是當DataNode中有一個磁盤出現故障,則會認為該DataNode shutdown了。如果修改為1,則一個磁盤出現故障時,數據會被復制到其他正常的DataNode上。
5) 設置RPC監聽數量 ? ? ?
屬性:hbase.regionserver.handler.count ? ? ?
文件:hbase-site.xml ? ? ?
解釋:默認值為30,用于指定RPC監聽的數量,可以根據客戶端的請求數進行調整,讀寫請求較多時,增加此值。
6) 優化HStore文件大小 ? ? ?
屬性:hbase.hregion.max.filesize ? ? ?
文件:hbase-site.xml ? ? ?
解釋:默認值10737418240(10GB),如果需要運行HBase的MR任務,可以減小此值,因為一個region對應一個map任務,如果單個region過大,會導致map任務執行時間過長。該值的意思就是,如果HFile的大小達到這個數值,則這個region會被切分為兩個Hfile。
7) 優化hbase客戶端緩存 ? ? ?
屬性:hbase.client.write.buffer ? ? ?
文件:hbase-site.xml ? ? ?
解釋:用于指定HBase客戶端緩存,增大該值可以減少RPC調用次數,但是會消耗更多內存,反之則反之。一般我們需要設定一定的緩存大小,以達到減少RPC次數的目的。
8) 指定scan.next掃描HBase所獲取的行數
屬性:hbase.client.scanner.caching
文件:hbase-site.xml ? ? ?
解釋:用于指定scan.next方法獲取的默認行數,值越大,消耗內存越大。
五、🐷內存優化🐷
HBase操作過程中需要大量的內存開銷,畢竟Table是可以緩存在內存中的,一般會分配整個可用內存的70%給HBase的Java堆。但是不建議分配非常大的堆內存,因為GC過程持續太久會導致RegionServer處于長期不可用狀態,一般16~48G內存就可以了,如果因為框架占用內存過高導致系統內存不足,框架一樣會被系統服務拖死。
1) JVM優化
2)并行GC
參數:-XX:+UseParallelGC ? ?
解釋:開啟并行GC
3) 同時處理垃圾回收的線程數
參數:-XX:ParallelGCThreads=cpu_core – 1 ? ?
解釋:該屬性設置了同時處理垃圾回收的線程數。
4) 禁用手動GC ? ?
參數:-XX:DisableExplicitGC ? ?
解釋:防止開發人員手動調用GC
六、🐈Zookeeper的調優🐈
參數:zookeeper.session.timeout
文件:hbase-site.xml
解釋:In hbase-site.xml, set zookeeper.session.timeout to 30 seconds or less to bound failure detection (20-30 seconds is a good start).該值會直接關系到master發現服務器宕機的最大周期,默認值為30秒,如果該值過小,會在HBase在寫入大量數據發生而GC時,導致RegionServer短暫的不可用,從而沒有向ZK發送心跳包,最終導致認為從節點shutdown。一般20臺左右的集群需要配置5臺zookeeper。
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
總結
以上是生活随笔為你收集整理的2021年大数据HBase(十七):❤️HBase的360度全面调优❤️的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据HBase(十六):HB
- 下一篇: 2021年大数据Kafka(一):❤️消