实现思路:
1、每天凌晨将前一天增量的数据从业务系统导出到文本,并FTP到Hadoop集群某个主节点上
上传路径默认为:/mnt/data/crawler/
2、主节点上通过shell脚本调用hive命令加载本地增量温江到hive临时表
3、shell脚本中,使用hive sql 实现临时表中的增量数据更新或者新增增量数据到hive 主数据表中
实现步骤:
1.建表语句, 分别创建两张表test_temp, test 表
crrawler.test_temp( ) row format delimited fields terminated by ',' stored as textfile ; +++++++++++++++++++++++++++++++++ create table crawler.test( ) partitioned by (dt string) row format delimited fields terminated by '\t' stored as orc ; |
2.编写处理加载本地增量数据到hive临时表的shell脚本test_temp.sh
#! /bin/bash ################################## # 日期参数可选,默认是系统日期-1 # ################################## dt='' table=test_temp #获取当前系统日期 sysdate=`date +%Y%m%d` #获取昨日日期,格式: YYYYMMDD yesterday=`date -d yesterday +%Y%m%d` #数据文件地址 file_path=/mnt/data/crawler/ if [ $# -eq 1 ]; then elif [ $# -eq 0 ]; then else fi filename=$file_path$table'_'$dt'.txt' if [ ! -e $filename ]; then hive<<EOF EOF if [ $? -eq 0 ]; then else fi |
3.增量加载临时数据到主数据表的shell脚本test.sh
#! /bin/bash ################################## table=test #获取当前系统日期 sysdate=`date +%Y%m%d` #实现增量覆盖 hive<<EOF set hive.exec.dynamic.partition.mode=nonstrict; insert overwrite table crawler.test partition (dt) select a.id, a.name, a.email, a.create_time, a.create_time as dt from ( ) a; quit; EOF if [ $? -eq 0 ]; then else |