Hbase優化方案
阿新 • • 發佈:2018-12-16
1、預分割槽設計
真正儲存資料的是region要維護一個區間段的rowkey startRow~endRowkey -》手動設定預分割槽 create 'user_p','info','partition',SPLITS => ['101','102','103','104'] 存在-∞ +∞ 第一個分割槽 -∞ ~ 101 第二個分割槽 101~102 第三個分割槽 102~103 第四個分割槽 103~104 第五個分割槽 104 ~ +∞ -》生成16進位制序列預分割槽 create 'user_p2','info','partition',{NUMREGIONS => 15,SPLITALGO => 'HexStringSplit'} -》按照檔案中設定的規則設定預分割槽 create 'user_p4','partition',SPLITS_FILE => 'splits.txt'
附:splits.txt
a1
b2
c3
d4
2、rowkey設計
一條資料的唯一標識是rowkey,此rowkey儲存在哪個分割槽取決於屬於哪個預分割槽內。 為什麼要設計rowkey?資料傾斜 為了防止出現數據傾斜 (1)生成隨機數/hash/雜湊值 例如:rowkey是101 變成:dd21231dqwdqd123131d112131 102 變成:wqdqdq212131dqdwqwdqdw1d21 (2)字串反轉 2018120800011 1100080218102 2018120800012 2100080218102 (3)字串拼接 2018120800011_a12e 2018120800012_odd12c 101~105 105~100000
3、HBase優化
(1)記憶體優化 一般分配70%記憶體給Hbase的java堆 不建議分配非常大的堆記憶體 一般設定為 16~48G記憶體即可 設定:export HADOOP_PORTMAP_OPTS="-Xmx512m $HADOOP_PORTMAP_OPTS" 注意:etc/hadoop下 hadoop-env.sh (2)基礎優化 -》優化DataNode 最大檔案開啟數 hdfs-site.xml 屬性:dfs.datanode.max.transfer.threads 預設值:4096 設定大於4096 -》優化延遲高的資料操作等待時間 hdfs-site.xml 屬性:dfs.image.transfer.timeout 預設:60000毫秒 調大 -》資料寫入效率 壓縮 屬性:mapreduce.map.output.compress 值:org.apache.hadoop.io.compress.GzipCodec -》優化Hstore的檔案大小 屬性:hbase.hregion.max.filesize 預設值:10GB 調小