10:HBaseの最適化
1 )事前パーティションのデザイン
実データが格納されている領域の範囲のセグメント維持するのrowKeyを
startRow属性〜endRowkey
- 「手動で事前にパーティションを設定します
'user_p'、 '情報'、 'パーティション' を作成し、分割=> [ '101'、 '102'、 '103'、 '104']
プレゼンス -∞+∞
最初のパーティション -∞〜101
第二隔壁 101から102まで
3番目のパーティション 102〜103
第四の区画 103から104まで
5番目のパーティション 104〜+∞
- 「を生成する16 進シーケンス{事前パーティション(15個のパーティション)
'user_p2'、 '情報'、 'パーティション'、{NUMREGIONS => 15、SPLITALGO =>「HexStを作成
スプリットリング「}
- 「設定されたルールに従って、事前パーティションファイルを設定する(ファイルが入っていることに注意のHBase のディレクトリ)
create 'user_p4','partition',SPLITS_FILE => 'splits.txt'
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
总结:尽可能的使每个rowkey随机分布在各个region中
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
调小
我们已经学了的知识:
linux/hdfs/mr/zookeeper/hive/flume/sqoop/azkaban/hbase 坚持!!!!