有个刚接触的人不知道的是,Oozie 自带 sqoop、hive 等常用组件,比如执行sqoop脚本命令时,并不是你主机里或者CDH里的的sqoop,而是 HDFS 下 Oozie 里的 sqoop 在起作用,这也是为什么 总是报 Could not load db driver class
的原因了,因为根本不是同一个sqoop。
还有 Hue 里的 Sqoop 1,你在这里写的脚本,执行时实际也是通过 Oozie 执行的。这也是为什么执行个简单的sqoop version
都会打印出八百多行的 log,没错的。仔细看日志,实际那都是 Oozie 输出的日志。
Could not load db driver class
解决方法:
1、上传 Driver 到 hdfs 的目录 /user/oozie/share/lib/sqoop
下,如果是Cloudera and HDP,则是/user/oozie/share/lib/lib_${timestamp}/sqoop
下
oozie fails with Could not load db driver class: oracle.jdbc.OracleDriver
2、重启 oozie service,让其生效,然后再运行就 OK 了
问题2: Heart Beat 死锁问题
解决办法:修改下yarn.nodemanager.resource.memory-mb
、yarn.scheduler.minimum-allocation-mb
和yarn.scheduler.maximum-allocation-mb
这三个的设置就可以了。
关系是:memory-mb >= 2 * maximum-allocation-mb; 即:memory-mb 要大于等于 2倍的 maximum-allocation-mb 。这只是 -m = 1
的情况,要是 -m = n
,那得 memory-mb >= 2 * n * maximum-allocation-mb
;
详细描述参考:Oozie 调度 Sqoop 从 Mysql 中导数据到 Hive 遇到的坑 和 Oozie搭建常见问题
问题3: Hue 中的 Oozie 使用空格作为参数分割,如果要使用空格,请合理使用双引号和单引号,特别是 --query
后边的语句要注意空格的使用,如果出现不能识别的参数这种异常了,请检查 Oozie 生成的 workflow.xml 里的内容和格式,Hue 上的界面上写的参数都是为了生成 xml,最终运行都是 xml 。
问题4:oozie 调度 sqoop, --hive-import
不起作用,可以正常导入到 HDFS,但是并没有自动导入到 Hive 中
原因和解决:原因是没有配置<job-xml>
,需要配置<job-xml>
节点,在节点里配置hive-site.xml
在hdfs上的位置(从Hive安装位置的配置文件里找到hive-site.xml
,copy 一份上传的 hdfs 上)