当前有一个需求,读取HDFS中的分区数据,然后将数据写入到MongoDB。
由于要求每次导入Mongo的是增量的数据,但HDFS中没有相应的字段对数据进行标识哪些是新增的。需要依据相应的策略去判断相应的增量数据。
通过Hive的SQL将每天的全量数据与历史的增量数据进行关联(LEFT OUTER JOIN)where条件是右表的关联字段IS NULL,而关联条件是基于判重的字段组合生成MD5,以md5进行数据是否是新增数据的判断依据。
SELECT
*
FROM olap.community_six t1
LEFT JOIN olap.community_six_inc t2 ON t1.md5 = t2.md5
得到新增数据后,写入以日期为分区字段的新增数据表相应的分区中。通过DataX抽取增量数据写入Mongo,但是要求每天读取当天的分区,避免导入重复的数据。
以下为shell脚本:
#!/bin/bash
TODAY=`date +"%Y-%m-%d"`
python /export/servers/datax/bin/datax.py -p "-DTODAY=${TODAY}" \
/export/servers/datax/job/deal.json
以下为DataX的job文件中需要传入动态参数的地方:
"reader": {
"name": "hdfsreader",
"parameter": {
"path":"/user/hive/warehouse/olap.db/community_six/update_date=${TODAY}/*",
"defaultFS": "hdfs://10.66.202.88:9000"