使用sqoop将mysql数据导入到hive报错ClassNotFoundException、Zero date value prohibited等错误

第一个错误:
bash 复制代码
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.StringEscapeUtils
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 13 more
原因:

缺少org.apache.commons.lang包

解决办法:

从hive中复制commons-lang-2.6.jar包到sqoop中:

bash 复制代码
cp /opt/installs/hive/lib/commons-lang-2.6.jar /opt/installs/sqoop/lib/
第二个错误:
bash 复制代码
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
原因:

缺少org.apache.hadoop.hive.conf包

解决方法:

从hive中复制hive-common-3.1.2.jar包到sqoop中:

bash 复制代码
cp /opt/installs/hive/lib/hive-common-3.1.2.jar /opt/installs/sqoop/lib/
第三个错误:
bash 复制代码
2024-09-19 15:38:09,650 ERROR tool.ImportTool: Import failed: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://shucang:9820/user/root/xxxx already exists
原因:

hdfs中对应文件已存在

解决方法:

删除对应的文件即可

bash 复制代码
hdfs dfs -rm -R /user/root/xxxx
# 后面的路径为报错信息中已经存在的路径
第四个错误:
bash 复制代码
Caused by: java.sql.SQLException: Zero date value prohibited
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:99)
        at com.mysql.cj.jdbc.result.ResultSetImpl.getTimestamp(ResultSetImpl.java:939)
        at org.apache.sqoop.lib.JdbcWritableBridge.readTimestamp(JdbcWritableBridge.java:111)
        at com.cloudera.sqoop.lib.JdbcWritableBridge.readTimestamp(JdbcWritableBridge.java:83)
        at user_quota.readFields(user_quota.java:307)
        at org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:244)
        ... 12 more
原因:

导入表的时候,表中的一个日期字段是 0000-00-00 00:00:00 就会报错

解决方法:

加上一句话:zeroDateTimeBehavior=convertToNull

bash 复制代码
# 主机名和数据库名字换成自己的
--connect jdbc:mysql://主机名:3306/数据库名?zeroDateTimeBehavior=convertToNull \
第五个错误:

在hive中执行sql语句时,可以开启本地模式:

sql 复制代码
set hive.exec.mode.local.auto=true;
set hive.exec.mode.local.auto.inputbytes.max=50000000;
set hive.exec.mode.local.auto.input.files.max=10;

但是运行sql时会报错:

bash 复制代码
[08S01][2] Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
原因:

yarn内存不足

解决方法:

修改hadoop的yarn-site.xml

bash 复制代码
<!--添加如下内容-->
<property>
           <name>yarn.scheduler.minimum-allocation-mb</name>
           <value>2048</value>
           <description>default value is 1024</description>
</property>
相关推荐
爱编程的王小美14 小时前
本地MySQL连接hive
数据库·hive·mysql
火龙谷1 天前
【hadoop】案例:Sqoop迁移仓库数据
hive·hadoop·sqoop
暮 夏2 天前
在登录页面上添加验证码
数据仓库·hive·hadoop
火龙谷2 天前
【hadoop】Sqoop数据迁移工具的安装部署
数据库·hadoop·sqoop
IT成长日记2 天前
【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析
数据库·hive·sqoop·关系型数据库同步·增量数据导入
IT成长日记3 天前
【Hive入门】Hive安全管理与权限控制:审计日志全解析,构建完善的操作追踪体系
hive·hadoop·安全·审计日志
IT成长日记4 天前
【Hive入门】Hive安全管理与权限控制:用户认证与权限管理深度解析
hive·hadoop·安全·权限管理·用户认证
IT成长日记4 天前
【Hive入门】Hive行级安全:基于Apache Ranger的细粒度访问控制深度解析
hive·安全·apache·apache ranger
IT成长日记5 天前
【Hive入门】Hive安全管理与权限控制:基于SQL标准的授权GRANT REVOKE深度解析
hive·sql·安全·grant·revoke
AIGC方案5 天前
基于Hive + Spark离线数仓大数据实战项目(视频+课件+代码+资料+笔记)
大数据·hive·spark