集群中使用Sqoop迁移数据到hive时报错

一、问题描述

数据从mysql到hive报错找不到数据库

将MySql中的数据通过Sqoop迁移到Hive中,实现MySql<–>Hive数据流通体系;

执行Sqoop命令后,报错无法找到目标数据库,显示导入失败,但hive中却真实导入了部分数据的情况

Sqoop命令

root@master:cd/opt/sqoop-1.4.7.bin__hadoop-2.6.0/bin
sqoop import \
    --connect jdbc:mysql://127.0.0.1:3306/bookhub?useSSL=false \
    --username debian-sys-maint \
    --password 123456  \
    --table applications \
    --hive-import  \
    --hive-overwrite  \
    --hive-table bookhub.applications \
    --input-fields-terminated-by '\001'

日志报错(因为第二次遇到这个问题才解决,因此图例有些不对应)

在这里插入图片描述

Error: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Unknown database 'test1'

日志显示无法在数据库中查找到目标数据库‘test1’

二、原因分析

因为搭建的是Hadoop集群模式,执行时会将Sqoop命令发送到集群中的其他主机中去执行,但是其他集群中并没有相应的mysql数据库,也就是找不到"目标数据库‘test1’"这个报错;

重点在于Sqoop命令中的"127.0.0.1"表明要求本机数据库,因此导致报错;

三、问题解决

修改"127.0.0.1"为"master"主机,因为mysql数据库储存在master主机上

# Sqoop命令
./sqoop import \
    --connect jdbc:mysql://master:3306/bookhub?useSSL=false \
    --username root \
    --password 123456\
    --table users \
    --hive-import  \
    --hive-table bookhub.users \
    --target-dir /user/hive/warehouse/bookhub.db/users \
    --fields-terminated-by '\001'
    
# 注意需要先删除hdfs中的相应目录数据
hdfs dfs -rm  /user/hive/warehouse/bookhub.db/users/*
hdfs dfs -rmdir  /user/hive/warehouse/bookhub.db/users 
# 使用root用户是因为我设置了远程访问数据库的用户就是root,集群中对master数据库的访问是远程访问
--username root \
--password 123456\
# 还可能遇到Public Key Retrieval is not allowed问题,及时更新驱动即可
四、结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值