您好,登录后才能下订单哦!
小编给大家分享一下Sqoop抽数到Hive表异常怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
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}目录下。
以上是“Sqoop抽数到Hive表异常怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。