环境
软件 | 版本 | 备注 |
---|---|---|
HDP | 2.6.3 | 2rm+3nm(=48g,24c)+1client |
Hue | 4.1.0 | client节点 |
centos | 7.0 |
其他:
- slave2+master1在一个母机
- slave1,slave3,master2在一个母机
- 母机之间是万兆网卡
部署过程
- 运维帮忙安装必要的依赖包(curl,jdk8+,ntp,openssl 1.01,python 2.7.x ,rpm,scp,tar,unzip,wget,yum)
- 通过ambari先部署的hdp基础的hadoop环境,然后部署的oozie,保证配置,软件环境等一致。
调试过程
在Hue的editor下使用sqoop执行
1 | import --connect jdbc:mysql://xx:3306/xx --username xx --password xx --table weight --hive-table tmp.test --hive-import --hive-overwrite -m 1 |
问题1:只安装了jre没有安装jdk
主要报错内容
1 | 13/04/19 10:35:24 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Could not start Java compiler. |
解决思路
- 首先安装java-1.7.0-openjdk-devel
yum install -y java-1.7.0-openjdk-devel
- 整个平台的jdk路径由ambari-server分发,配置ambari.properties中java.home=/usr/lib/jvm/java
- 重启整个平台,ambari分发配置
问题2:hiveconf class not find
主要报错内容
1 | Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly. |
解决思路
- oozie在安装的时候回自动在hdfs中上传对应的jar包,更加action的类型取classpath,sqoop该action没有将hive的jar包含进来
- 可以通过设置oozie.action.sharelib.for.{action}参数来指定某个action的全局classpath,所以设置oozie.action.sharelib.for.sqoop=sqoop,hive
- 重启oozie服务
问题3:system kill 没有hive-site.xml
主要报错内容:
1 | Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1] |
只有这么一句话没有其他任何对应的提示,通过google发现很多报错都是这个信息,但是对应不同的具体错误
解决方案
- 尝试直接用oozie调度hive,可以成功的写入hive
- 发现每次oozie调度sqoop的时候都能够写入hdfs,说明最后一步写入hive出错
- 结合网上的资料发现需要制定hive-site.xml,tez-site.xml
- 考虑到都是新人就直接全局把hive-site.xml,tez-site.xml放到sqoop这个sharelib中,并update
- 重启oozie服务
问题4:hue默认不开启rerun参数
主要报错内容
1 | Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1] |
和上面的完全一致,但是偶尔成功,通过观察发现sqoop这个job如果是在slave2节点上启动的时候都成功,但是如果是其他节点启动sqoop的container就会失败,于是认为是节点之间的环境不一致,但是ambari统一部署的不会存在环境问题,怀疑是网络不稳定,同时多次试验发现slave2也会出现失败,其他节点也会有极小的概率成功
解决过程:
- oozie的报错真的很不友好,基本上靠猜。
- 想到会不会是hue和hdp水土不服,毕竟之前有hive的教训,hdp中要加入hive.server2.parallel.ops.in.session=true,否则hue中无法正常使用hive。
- 尝试使用ambari的workflow view来编写调度,一样的命令发现可以执行,发现2者的workflow不完全一直,action的版本上面有一些差异
- 对应在hue中修改一致workflow,但是发现还是不行,继续查找到job.properties中的重要信息oozie.wf.rerun.failnodes=true
- 参考oozie官网说明也是很少
- hue中workflow加上该参数,发现可以执行
- 考虑到sqoop前期用的很多,hue中的sqoop editor没有可以设置参数的地方,于是全局设置oozie.wf.rerun.failnodes=true
- 重启服务,一切正常
后话
部署软件调试是一个细心的活,尤其是对于这种报错信息极少的,需要靠经验来猜,而自己经验有不足。