第一个错误:
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.StringEscapeUtilsat 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中:
cp /opt/installs/hive/lib/commons-lang-2.6.jar /opt/installs/sqoop/lib/
第二个错误:
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConfat 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中:
cp /opt/installs/hive/lib/hive-common-3.1.2.jar /opt/installs/sqoop/lib/
第三个错误:
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中对应文件已存在
解决方法:
删除对应的文件即可
hdfs dfs -rm -R /user/root/xxxx
# 后面的路径为报错信息中已经存在的路径
第四个错误:
Caused by: java.sql.SQLException: Zero date value prohibitedat 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
# 主机名和数据库名字换成自己的
--connect jdbc:mysql://主机名:3306/数据库名?zeroDateTimeBehavior=convertToNull \
第五个错误:
在hive中运行sql时报错:
[08S01][2] Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
可以查看hive、hiveserver2和hadoop的日志,查看具体问题出在哪里:
第一个原因:
yarn内存不足
解决方法:
修改hadoop的yarn-site.xml
<!--添加如下内容-->
<property><name>yarn.scheduler.minimum-allocation-mb</name><value>2048</value><description>default value is 1024</description>
</property>
第二个原因:
如果查看hiveserver2日志发现出现以上问题,则说明动态分区数超过了设置的最大限制
解决办法:
修改最大分区数:
set hive.exec.max.dynamic.partitions = 100000;
set hive.exec.max.dynamic.partitions.pernode=10000;
第三个原因:
查看hive的日志,出现以上问题,则说明hive的内存溢出
解决方法:
将hive内存调大
修改hive目录下conf下的hive-env.sh 文件:
export HADOOP_HEAPSIZE=4096