项目作者: sunyaf

项目描述 :
hive udf 读写存储到hbase的roaringbitmap
高级语言: Java
项目地址: git://github.com/sunyaf/bitmapudf.git
创建时间: 2020-01-06T07:59:09Z
项目社区:https://github.com/sunyaf/bitmapudf

开源协议:

关键词:
hbase hive-udf roaringbitmap

下载


bitmapudf

hive udf 读写存储到hbase的roaringbitmap 咆哮位图

在cc.youshu.redis包里面是一个redis相关的函数,比较简单,这里我就不在多说了,下面重点说一下roaringbitmap相关的udf

本项目主要是将hive udf 、roaringbitmap 、hbase集成到一起
打包方法
mvn clean package
然后将target下jar包上传到hdfs指定目录,以方便创建udf函数,或者您也可以直接上传到服务器,通过add jar命令创建udf函数。
本人上传到了/utils/hiveUdf/,pom文件里面的额额依赖包,放到hive的第三方依赖包目录里面

bit_map_byte函数

  1. 作用:将数字去重的集合存储到roaringbitmap里面,输出二进制
  2. 创建UDF
    1. create function bit_map_byte as 'cc.youshu.roaringbitmap.RoaringBitMapByteUDAF'
    2. using jar 'hdfs://nameservice1/utils/hiveUdf/hiveudf.jar';
  3. 使用例子
    1. SELECT plan_code,bit_map_byte(id) FROM dw.rw_plan GROUP BY plan_code;

    hbase_put函数

  4. 将二进制或者字符串等导入hbase中
  5. 创建UDF
  1. create function hbase_put as 'cc.youshu.roaringbitmap.HbasePut_UDF'
  2. using jar 'hdfs://nameservice1/utils/hiveUdf/hiveudf.jar';
  1. 使用

    1. SELECT hbase_put( map('hbase.zookeeper.quorum',
    2. 'XXX,XXX,XXX',
    3. 'table_name',
    4. 'test_roaring_syf',
    5. 'family',
    6. 'group',
    7. 'qualifier',
    8. 'q'), concat('group_plan_',plan_code),
    9. val)
    10. FROM(
    11. SELECT plan_code,bit_map_byte(id) FROM dw.rw_plan GROUP BY plan_code) a;

    hbase_put_add函数

  2. 作用:首先判断此字段有没有bitmap的二进制存在,如果有,则进行or然后,插入,如果没有直接插入

  3. 创建
  1. create function hbase_put_add as 'cc.youshu.roaringbitmap.HbasePutAdd_UDF'
  2. using jar 'hdfs://nameservice1/utils/hiveUdf/hiveudf.jar';
  1. 使用
  1. SELECT hbase_put_add( map('hbase.zookeeper.quorum',
  2. 'XXX,XXX,XXX',
  3. 'table_name',
  4. 'test_roaring_syf',
  5. 'family',
  6. 'group',
  7. 'qualifier',
  8. 'q'), concat('group_plan_',plan_code),
  9. val)
  10. FROM(
  11. SELECT plan_code,bit_map_byte(id) FROM dw.rw_plan GROUP BY plan_code) a;

bitmap_to_id函数(udtf)

  1. 作用:读取bitmap的二进制,返回里面所有的id,分成不同的行
  2. 创建
  1. create function bitmap_to_id as 'cc.youshu.udtf.BitMapUDTF' using jar 'hdfs://nameservice1/utils/hiveUdf/hiveudf.jar';
  1. 使用
  1. SELECT key, BitMapCount(user_id) from hbase_table_1 LIMIT 10;

说明:hbase_table_1是我创建的一个hive on hbase的表,user_id列是存储的roaringbitmap的二进制
hbase_table_1表创建语句

  1. CREATE EXTERNAL TABLE hbase_table_1(key String, user_id BINARY)
  2. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
  3. WITH SERDEPROPERTIES (
  4. "hbase.columns.mapping" = ":key,group:user_id"
  5. )TBLPROPERTIES("hbase.table.name" = "user_roaring_bit_map_test");