环境配置为hadoop3.1.3,hive为3.1.2,sqoop为1.4.7,hbase为2.4.11,mysql8.0.27,hadoop环境搭建是根据尚硅谷学习的,hive和hbase是根据尚硅谷的开发文档进行搭建的环境
本篇主要讲的是我在做学校的期末大作业的时候发生的sqoop从hive导出到mysql的时候发生的报错
1.如果你在导出进程,即mapreduce进程开始之前进行报错退出,那大概是出现了maprduce任务分配问题,解决方法:
报错内容为:进行MapReduce操作出现错误:
错误: 找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster
这个是你当时搭建伪分布或者分布式环境的时候发生的报错内容,主要原因还是你的yarn-site.xml和mapread-site.xml文件没有进行相应的配置这时候你需要打开你的hadoop文件配置界面进行重新配置
其中yarn的内容为
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapread文档的内容为:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改完之后进行yarn的重启操作之后进行sqoop的后续相关操作。
2.如果你是能够正常的运行mapread,但是报错显示导出数据报错Can‘t parse input data‘中文字符’
解决方法,检查你的hive和mysql中数据库中的支持的字符集是否相同,
其中hive中的字符集为utf-8,但是mysql中默认的字符集为utf8mb4 ,这个字符集是utf-8的扩展类,但是和utf-8不互相兼容,这个字符集能够接受的字符数为4个utf-8的字符数为3个,需要更改mysql中的字符集为utf8mb3,MySQL中的这个字符集是和utf-8相对应。
其中要求改的配置文件为,windows端为my.ini linux端为my.cnf
文件所在位置为:
linux端所在的位置为:/etc/my.cnf或者在/etc/mysql/my.cnf
要加入的内容为:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
skip-character-set-client-handshake
如果没有上面两项client和mysql中的标志,请自己把他加上。
另外写一下sqoop日志分析,参考博客解决Sqoop导出数据报错Can‘t parse input data 和 NoSuchElementExceptionsqoop报错日志定位问题,可以参考 博客 和 博客 第二个是在hdfs文件系统中寻找logs日志文件,通过分析日志文件进行分析报错原因。
utf8mb4是4位字节的存储,utf8mb3是3位字节的存储,utf-8是3位字节,导入导出的时候格式要匹配
我的主要报错就是在mysql和hive中的字符不匹配问题,没有更改为utf8mb3格式。
版权归原作者 摆烂的电子锁 所有, 如有侵权,请联系我们删除。