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


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脚本,显示作业正常执行

Sqoop抽数到Hive表异常分析_sqoop

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

Sqoop抽数到Hive表异常分析_sqoop_02


2.异常处理及分析



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

Sqoop抽数到Hive表异常分析_sqoop_03

脚本执行成功

Sqoop抽数到Hive表异常分析_数据_04

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

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

Sqoop抽数到Hive表异常分析_hive_05


target-dir参数说明及影响:

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

Sqoop抽数到Hive表异常分析_hive_06

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}目录下。


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


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

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



推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

Sqoop抽数到Hive表异常分析_数据_07

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操