Sqoop抽数到Hive表异常分析

时间:2022-06-05
本文章向大家介绍Sqoop抽数到Hive表异常分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.问题描述

使用Sqoop抽取MySQL数据到Hive表时,抽取语句正常执行但数据没有写入Hive的表中,执行的Sqoop抽数脚本如下:

export HADOOP_USER_NAME=hive
sqoop import 
--connect "jdbc:mysql://cdh02.fayson.com:3306/cm" 
--username cm 
--password password 
--table HOSTS 
--fields-terminated-by ',' 
--target-dir /user/hive/warehouse/hive_hosts 
--delete-target-dir 
--hive-import 
--hive-overwrite 
--hive-table hive_hosts 
--m 1 
--input-null-string '\N' 
--input-null-non-string '\N'

(可左右滑动)

在命令行执行上述Sqoop脚本,显示作业正常执行

执行结果显示文件数和数据大小均为0,登录Hive查询生成的hive_hosts表

2.异常处理及分析

1.在Sqoop抽数的脚本中存在target-dir参数,指向的HDFS数据目录,为hive_hosts表的仓库目录,将target-dir参数去掉执行

脚本执行成功

如上脚本的日志可以看到,向HDFS写入一个数据文件,文件大小481Byte。

2.使用hive命令查看hive_hosts表,数据已正常的抽取到hive_hosts表中

target-dir参数说明及影响:

在Sqoop抽数脚本中,指定了target-dir目录Sqoop抽取的数据会写到target-dir指定的目录,在Sqoop完成数据抽取后会将target-dir目录的数据load到Hive表对应的仓库目录并删除target-dir目录及数据。因为在上述异常中我们指定的target-dir目录与Hive表的仓库目录一致,所以会导致Sqoop抽数成功,但对应的Hive表中无数据问题。

Sqoop脚本中如果不指定target-dir目录时,默认会将抽取的数据写入到/user/{username}/{db_tablename}目录下。

3.总结

1.使用Sqoop抽数到Hive表,如果使用target-dir指定HDFS数据抽取目录时不能设置目标目录与hive表的仓库目录一致,否则会导致抽取的数据被Sqoop删除。

2.Sqoop抽数时如果不指定target-dir目标HDFS目录时,默认会将抽取的数据写入到/user/{username}/{DB_TABLENAME}目录下。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。