sqoop 导hive数据到mysql报错:Job job_1678187301820_35200 failed with state FAILED due to: Task failed task_

文章讲述了如何使用Sqoop将Hive数据导出到MySQL,重点在于处理数据分隔符不匹配的问题。当出现数据导入错误时,作者建议检查字段分隔符设置和数据库字段类型的一致性,并通过YARN日志定位错误。在本文的示例中,更改分隔符从01到 成功解决了问题。

首先使用sqoop导hive数据到mysql命令:

/home/data/office/sqoop-1.4.6-cdh5.14.0/bin/sqoop export --connect 'jdbc:mysql://****.com:3306/test' \
--username '**' \
--password '123**' \
--table 'bidata_residents_base_20230410' \
--export-dir  /user/hive/warehouse/dwd.db/bidata_residents_base_20230408 \
--input-fields-terminated-by '\001' \
--input-null-string '\\N' \
--input-null-non-string '\\N'



参数说明:
--connect '数据库连接' \
--username '数据库账号' \
--password '数据库密码' \
--table '数据库表名' \
--export-dir  集群hdfs中导出的数据目录 \
--input-fields-terminated-by '分隔符,textfile类型默认\001' \
--input-null-string '空值处理:\\N' \
--input-null-non-string '空值处理:\\N'

1.首先确保hive表的字段和数据类型和mysql一致。

2.如果上面一致的话,寻找错误需要查看yarn运行日志,因为sqoop是靠yarn调度的。通过yarn的web页面查看你刚刚运行sqoop的applicationId

 当然也可以使用命令行获取application(这里就不说了)
然后执行下面命令
yarn logs -applicationId application_1678187301820_35198
获取报错日志:

明显把 这一条数据当作一个字段处理,解析不了,说明--input-fields-terminated-by '\001' \ 分隔符有问题,我查看了下hive表分隔符使用的是 \t  。然后把分割符改为 --input-fields-terminated-by '\t' \问题解决。

ps:遇到这些问题别慌,找日志,找到日志就很好解决了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值