1. 程式人生 > >Hbase優化方案

Hbase優化方案

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
    調小