spark常见操作系列(3)--spark读写hbase(1)

spark读写hbase,先写一下hbase的常用操作方式.

hbase建表:

create 'hbase_test_table', 'info', {NAME=>'info', SPLITALGO => 'HexStringSplit', REPLICATION_SCOPE =>0}, SPLITS => ['S0','S1','S2', 'S3', 'S4','S5','S6','S7','S8','S9']

建表提示:

(1)
通过

describe ‘hbase_test_table’

可查看该表所有默认属性.实际中发现,有些属性不能同时设置,比如设置:

REPLICATION_SCOPE =>1

,则会使某些属性无效,比如我建立2个column family.

(2)
一般加上压缩属性,SPLITALGO => ‘HexStringSplit’

(3)
预分区要写明每个分区的名称,如写成NUMREGIONS => 100 实际创建的分区只有一个.
随着该分区装载的数据增多,默认达到256M的时候,hbase会自动生成一个新的分区,如果数据的rowkey是有序列的,则写入会继续写入最大rowkey所在的分区,也就是新的分区.旧的分区不会继续写入,这个会造成:

  • hbase自动生成分区,也就是split 操作时,会有一些时间消耗,写数据时,会有效率降低的情况;
  • 一般一个分区一段时间才会达到生成新分区阈值,假设一个月.当然我可以把分区设大一点,可以设置hbase.hregion.max.filesize
    参数.新的分区继续写数据,旧的分区不再写入数据,这种写法,在查询的时候,比如某时间段查询,结果数据存在某几个分区可能性较大;不仅如此,随便某个条件查询,结果集中在某几个分区的几率会增大,
    这个会导致分区查询IO 的不均. 另一方面, 有资料说,这个新分区阈值跟hbase.hregion.max.filesize
    参数并不是同一个参数,可能是小于filesize ,这样,
    继续写入,会出现旧的分区不会写满,每个分区所写入的数据大小都只能是这个阈值.是这样吗?本人没有实际测试过.
    除了通过hbase.hregion.max.filesize 参数来预分区,还有通过rowkey的方式. 设置splitKey
    ,可以在某个分区生成临界splitKey
    后,然后程序来控制新分区的建立.不过这种方式依赖于rowkey的设计,而rowkey设计不确定性较高,个人感觉可操作性不高.
    这让我想起手动建预分区,长远来看,也不是太可靠,有没有在代码中规划分区和表的.这个对我们也是个难题.
  • 分区命名是否需要意义?
    如果是hbase自动生成的分区,自然意义不明确.手工预设分区,以序列命名,表面上比较直观.一般在查询中,并没有设置查询哪个分区的必要,分区命名也无意义.但如把分区信息写入rowkey,数据分类有那么一丁点作用.
  • 数据倾斜的情况.
    hbase默认某段时间,只有一个分区会写入,这个也会有数据倾斜.另外,在实际中,我们还遇到数据写入节点不均,这个也是数据倾斜.这个多数情况跟rowkey设计有关.当然,节点性能不均,节点网络IO不均,配置不均也会有这种情况.

rowkey设计

rowkey设计,我们把几个关键字段拼接,生成一个新的字段,为了使rowkey可用,好用,我们做了以下步骤:

(1)
新的字段必须唯一;

(2)
rowkey尽量简短,意义紧凑,比如时间:2018/03/01 17:54, 转换成1803011754;

(3)
每一行rowkey等长,比如每一行rowkey都是16个字母长度;

(4)
对于数据倾斜问题,一开始我们参照网络资料,使用

new_rowkey=hash(rowkey)

这个直接有一个问题不能忽视,就是rowkey查询问题,rowkey命名变成无意义了,然后改成

new_rowkey=hash(rowkey)+rowke
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值