栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hive导入hbase笔记

hive导入hbase笔记

背景:

需要记录用户最近x天内浏览过和下过单的live房间记录

过程:

从hive捞了一波数据,发现有几亿条,初步选型为hbase,之后的工作可以说是折腾了我三天一夜,特此记录,省的下次再浪费时间

步骤:

1、需要在hive创建数据时建立一列rowkey列用来做导入hbase的rowkey

rowkey设计规则:一般建议定长,就算为了节省空间不是定长,split的前缀必须定长!!!!不然就会导致数据导入不均衡

exp:2wqps ,20G数据,7天ttl的量级数据大概需要至少14个region,如果想要均分到14个region上,我的rowkey一开始设计为(userId%100)8_(userId)_(房间Id)_(pt分区字段)

以userId作为前缀的条件是在当前场景下userId足够散列,并且userId可以作为入参用来生成rowKey,其实如果选择随机数作为前缀更好,但是要考虑到在hive上游生成随机数怎么通过服务端入参给到查询hbase的接口里比较复杂,要设计两端即服务端与hive上游的随机种子和随机算法保证一致之类,所以最后还是选择用userId来当成rowKey前缀,在这里,为了让userId更加散列,我通过userId mod 100(mod数要比region大因为要打的足够散)做前缀,由于我在建立hbase的时候,设置了8位splitKey以及decimalString(数字)做为split格式,所以第一次compact的时候会把前缀为00000000-99999999的数据均分给14个region,也就是大概是00000000-07142857是第0个region,07142857-14285714是第1个region,每07142857个前缀循环,直到最后第13个region结束,那么需要注意的是!!!userId % 100要保持定长2位,不然就会不均衡,1xxxxxxx和10xxxxxx会被分到一起,2xxxxxxx和20xxxxxx会被分到一起,3xxxxxxx和30xxxxxx会被分到一起,最后就会出现region0数据特别少的情况。

RPAD(LPAd(userId%100,2,0),8,0)_(userId)_(房间Id)_(pt分区字段)

OR

RPAD(substring(userId,-2),8,0)_(userId)_(房间Id)_(pt分区字段)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735017.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号