MySQL导入Hive

来源:互联网 发布:wifi计费软件 编辑:程序博客网 时间:2024/06/05 19:26

MySQL导入Hive可以用sqoop或者dump到本地再load into的方式导入Hive。

还有一种方式就是用阿里开源的DataX,试了一下还挺方便的。用sqoop经常会出现数据倾斜的情况,DataX暂时还没有遇见。

要使用DataX只需要填写一个json格式的配置文件即可,整个安装和使用的方法参照官方给出的Quick Start即可。

配置文件中,主要填写mysqlreader与hdfswriter的信息。虽然是MySQL导入Hive表,但因为Hive的数据实际上是存在HDFS中,因此没有单独的hivewriter,用hdfswriter即可。相关参数的文档见:https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md

但是每个任务都去填JSON文件也比较繁琐,比如jdbcUrl的配置,MySQL的username和password等,当然希望以参数的形式填写,这样以后要换只要改配置文件就好。还有DataX导入HDFS的形式只有appendnonConflict,不支持insert overwrite这种形式,重跑数据还要手动去truncate就太麻烦了。所以为了方便做一些前后处理以及传入参数,还是使用shell来封装一系列的命令,中间再使用python来动态生成json配置文件更好。

python的代码大概如下

import jsonimport argparse# JSON模板template_json = {...}# 接收参数传入parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)parser.add_argument('--output_json_path', type=str, default='/data/datadev/tmp/mysql2hive.json',help='生成的DataX JSON配置文件存放路径')parser.add_argument('--mysql_jdbc_url', type=str, default=None, help='MYSQL JDBC URL,若有多个用","隔开')# 省略若干参数...args = parser.parse_args()# 填入参数template_json['job']['content'][0]['reader']['parameter']['column'] = args.mysql_jdbc_url # 为了健壮性可以再对参数做一些检查 # 输出JSON配置文件with open(args.output_json_path,'w') as f:    f.write(json.dumps(template_json))

shell脚本的写法就可以写得像用sqoop一样了

source ../mysql_confighive_table=table_namehive_db=db_namepython mysql_hive.py \        --mysql_columns field_1,field_2,field_3 \        --mysql_jdbc_url jdbc:mysql://${mysql_host}:${mysql_port}/${mysql_db} \        --mysql_tables ${mysql_table} \        --mysql_username ${mysql_user} \        --mysql_password ${mysql_pw} \        --hive_columns field_1:bigint,field_2:string,field_3:int \        --path /path/to/your/warehouse/${hive_db}.db/${hive_table} \        --fileName ${hive_table} \        --output_json_path /path/to/your/output_json \# 如果需要事先清空HIVE表hive -e "truncate ${hive_db}.${hive_table}"# 执行导入python ${YOUR_DATAX_HOME}/bin/datax.py /path/to/your/output_json# 后处理# ... 
原创粉丝点击