环境:
软件 | 版本 | 配置 |
---|---|---|
HDP | 2.6.3 | 1 master ,2 core |
Hue | 4.4.0 | Hue server(master) |
Sqoop | 1.4.6 | client(master and 2 core) |
Hive | 1.2.1000 | Hive Metastore 、HiveServer2、WebHCat Server (master) , client(master and 2 core) |
作业内容:
把postgresql 中sqooptest 数据库中的test 表中的数据导入到到Hive
import --connect jdbc:postgresql://xxxxxx:xxx/sqooptest --username cmonitor --password cmonitor --table test --hive-import --hive-database default --hive-table test1 -m 1
问题一:缺少postgresql 数据库驱动
5562 [main] ERROR org.apache.sqoop.Sqoop - Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: org.postgresql.Driver
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]
添加 /usr/hdp/2.6.3.0-235/oozie/libtools/postgresql-9.0-801.jdbc4.jar 到 **/user/oozie/share/lib/lib_*/sqoop/ 目录中下 ,重启Oozie
问题二:Heart beat
Heart beat
Heart beat
Heart beat
Heart beat
有可能是机器的内存太小,可以减小yarn每个core分配的最小内存和调整AM容器可占用的内存比例。
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.capacity.maximum-am-resource-percent,默认0.2, 即20%
问题三:java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
27737 [main] ERROR org.apache.sqoop.hive.HiveConfig - Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
27737 [main] ERROR org.apache.sqoop.hive.HiveConfig - Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
27738 [main] ERROR org.apache.sqoop.tool.ImportTool - Encountered IOException running import job: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
缺少hive相关的jar包,这个错误可以通过两种方式处理:
1. 把缺少的jar在xml方式引入,缺少一个引入一个
比如:org.apache.hadoop.hive.conf.HiveConf 是在hive-common.jar包中,通过设置添加文件的方式引入xml.
2. hive2相关的包都在hive2的sharelib路径下,直接把hive2 的 sharelib 配置到 sqoop的action中
oozie-size.xml 添加
oozie.action.sharelib.for.sqoop=sqoop,hive
重启oozie。
问题四:143
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143.
这种一般是物理内存达到限制,导致container被kill掉报错。
从报错时刻看是执行reduce阶段报错;故可能reduce处理阶段container的内存不够导致,可以进行以下修改(根据机器配置调整):
mapreduce.map.memory.mb=4096
mapreduce.reduce.memory.mb=4096
yarn.nodemanager.vmem-pmem-ratio=4.2
因此,单个map和reduce分配物理内存4G;虚拟内存限制4*4.2=16.8G;
如果还是有问题看问题五。
问题五:Permission denied : /tmp/hive/yarn/_tez_session_dir//hive-hcatalog-core.jar*
数据在最后写入hive阶段, container kill。或者出现以下情况:
[Thread-28] INFO org.apache.sqoop.hive.HiveImport - org.apache.hadoop.security.AccessControlException: Permission denied: user=hue, access=EXECUTE, inode="/tmp/hive/yarn/_tez_session_dir/*hive-hcatalog-core.jar":yarn:hdfs:drwx------
[Thread-28] hive.HiveImport (LoggingAsyncSink.java:run(85)) - org.apache.hadoop.security.AccessControlException: Permission denied: user=urep, access=EXECUTE, inode="/tmp/hive/yarn/_tez_session_dir/*/hive-hcatalog-core.jar":yarn:hdfs:drwx------
可能是缺少定制的hive和tez配置文件,可以直接把机器上的hive-site.xml,tez-site.xml文件传入hdfs 的 sqoop 的lib 目录下。比如
hdfs dfs -put /etc/oozie/2.6.3.0-235/0/action-conf/hive/tez-site.xml /user/oozie/share/lib/lib_*/sqoop/
hdfs dfs -put /etc/oozie/2.6.3.0-235/0/action-conf/hive/hive-site.xml /user/oozie/share/lib/lib_*/sqoop/
重启Oozie,导入成功。