sqoop的 迁移数据到hive的报错

常见原因:

原因1:

未将hive中的hive-common-*.jar , hive-exec-*.jar(*为你的hive下的文件号)以及mysql-connect-java-*.jar(*为你mysql对应版本的对应的文件号)拷贝至sqoop安装目录下的lib文件中

解决方法:将hive安装目录下的lib文件中的hive-common-*.jarhive-exec-*.jar拷贝至sqoop安装目录下的lib文件下,之后将对应版本的mysql-connect-java-*.jar下载移动至sqoop安装目录下的lib文件下

mysql-connect-java对应表(资料来源于官网MySQL :: MySQL Connector/J 5.1 Developer Guide :: 2 Connector/J Versions, and the MySQL and Java Versions They Require):

Connector/J versionJDBC versionMySQL Server versionJRE RequiredJDK Required for CompilationStatus
5.13.0, 4.0, 4.1, 4.25.61, 5.71, 8.01JRE 5 or higher1JDK 5.0 AND JDK 8.0 or higher2, 3General availability
8.04.25.6, 5.7, 8.0JRE 8 or higherJDK 8.0 or higher2General availability. Recommended version.

原因2:

libthrift jar 包不兼容的原因(hbase与hive中的libthrift 版本不同)

解决方法一:查看hbase和hive安装目录下的lib目录中的libthrift版本是否一致,不一致可任选其一改为一致,之后将libthrift *.jar复制到sqoop安装目录下的lib文件夹中

解决方法二:将Sqoop配置文件中的 HBASE_HOME 设置为空,让Sqoop不能加载hbase版本的libthrift(不建议使用)

疑难杂症:

情况一:mysql表的编码格式与hive表中的编码格式不同(未尝试可能不准,视情况使用)

首先:hive的元数据是由mysql管理的,mysql默认编码是latin1

但是,因为MySQL通过my.cnf一般情况下设置为utf-8编码,所以需要将库改为latin1

alter database 数据库名 character set utf8;

如果数据库中有中文字体,为了保存那些utf8的中文(防止乱码),要将mysql存储注释的那几个字段的字符集单独修改为utf8

情况二(*):第三方连接工具(mobaxterm)问题:这是我遇到的最无语的问题了,直接上图

首先在第三方连接工具中是报此错的:

回到VM虚拟机执行导出导入命令,是成功的,啥操作都不做再回到mobaxterm执行

任然报此错了。。。。。。。

 

可见mobaxterm(其他第三方连接工具未使用过不知是否也有类似情况)执行此命令是有问题的,所有如果你也是用第三方连接工具进行操作,在配置没问题下报错找不出原因的话,建议直接进linux系统操作。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐