• 离线数据全量导入与增量导入方案


    Hive增量更新方案
    方案一(总结出来业界可行方案):
    1、Hive原始表提前规划好以时间分区,初始化装载源库记录为base_table(最新数据)
    2、每个相关表都会有一个timestamp列,对每一行操作做了修改,都会重置这列timestamp为当前时间戳;
    3、新增数据通过sqoop(支持当天抽取)或者导出当天文件两种形式,抽取或导入到hive表,记录为新增表incremental_table
    4、(1)如果incremental_table表中数据不涉及到更新,直接导入到以时间分区的base_table表中   (2)如果某几个分区涉及到更新操作,将这段时间分区内的base_table和incremental_table数据进行合并,有相同主键的取timestamp最新的那条,合并后新数据重新写回base_table分区中;
    (3)如果涉及到删除数据操作,分软删除(打标签)和硬删除;如果是软删除,记录数据也会存在incremental_table,只是在合并base_table和incremental_table表中过滤掉此记录写回base_table即可。如果是硬删除,需将删除的数据行放入额外审计表中audit_table,与base_table和incremental_table一起进行合并过滤处理后,再写回base_table。

    采用Oozie、NiFi或者Shell脚本等方式,将上述流程统一做成一个工作流,方便调度。 

    方案二(如有业务诉求,需要对Hive表具体某条记录进行delete或update操作):
    如果一个HIVE表要实现update和delete功能,该表就必须支持ACID,需开启ACID,同时必须满足以下条件:
    1、表的存储格式必须是ORC(STORED AS ORC);
    2、表必须进行分桶(CLUSTERED BY (col_name, col_name, ...)  INTO num_buckets BUCKETS);
    3、Table property中参数transactional必须设定为True(tblproperties('transactional'='true'));
    4、以下配置项必须被设定:
         Client端:
    hive.support.concurrency – true
    hive.enforce.bucketing – true
    hive.exec.dynamic.partition.mode – nonstrict  
    hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager  
         服务端:
    hive.compactor.initiator.on – true
    hive.compactor.worker.threads – 1
    hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager(经过测试,服务端也需要设定该配置项)

    https://blog.csdn.net/wujiandao/article/details/80413661

  • 相关阅读:
    libevent源码分析--(转)
    libevent源码分析(转)
    服务器模型---总结
    暴力英语学习法 + 严格的目标管理 = 成功快速靠谱的学好英语(转)
    log4net写入mysql完整例子
    form操作
    ASP.NET Razor
    java爬虫:在请求body中增加json数据采集
    asp.net mvc3登录验证
    远程复制无法读取源文件或磁盘
  • 原文地址:https://www.cnblogs.com/tjp0210/p/11774450.html
Copyright © 2020-2023  润新知