【hive】BinlogUpdatetoHive项目学习

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozxlMgwr-1642833351869)(en-resource://database/978:1)]

  1. 项目最后更新时间为2016年,其中使用了hive streaming的api

  2. 项目中主要使用canal工具读取mysql日志,主要定义了处理binlog日志的逻辑,然后将处理完的数据打入kafka中供spark streaming进行消费
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0FVMPMP-1642833351871)(en-resource://database/980:1)]

  3. 项目中的主要spark逻辑定义在了如下的函数中
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AkKE6IMS-1642833351872)(en-resource://database/982:1)]

  4. 项目主要使用了spark streaming做数据处理,设置15s为一个周期,取出kafka中的数据,然后做数据清洗和处理,然后调用DStreamtoHiveBatchUtilLoan将数据更新到hive

  5. 在更新到hive的过程中,针对Hive中没有主键的概念,Hive使用事务Id+批次Id来唯一标识一条记录,对Hive中每条记录的增删改操作,Hive都会分配唯一的事务Id+桶Id+批次Id。 当发生增删改操作时,需要根据Mysql表的主键,查找到Hive表中对应的记录,即查找到对应的事务Id+批次Id
    问题:
    当对Hive进行插入数据操作之后,需要存储事务Id+桶Id+批次Id,Hive原生的方法是将此组合Id存储在Hive表中,这样会造成查找时候的效率低下,严重影响增删改操作的性能。
    解决方案:
    将Hive的事务Id+桶Id+批次Id存储在Hbase中,Hbase支持实时查询,这样可以大幅减少查找的时间。

  6. 使用HCatalog Streaming Mutation API向hive2中进行实时增删改数据.
    1.创建hive和hbase的连接
    2.解析数据,匹配insert操作,调用hive的insert操作,并将存储 数据ID:事务Id+桶Id+批次Id 数据put到hbase
    3.匹配update操作,在hbase取出数据ID的数据,并取出批次Id进行解析,然后添加到updateArray
    4.insert操作和update操作需要开启两个完全独立的Transaction和Coordinator,update操作在所有insert操作完成之后进行,hive对所有数据进行更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值