您的位置:首页 > 大数据 > Hadoop

关于PDI与HDP24对接问题解决

2016-07-26 09:38 281 查看
准备工作:

PDI工具下载地址:http://community.pentaho.com/ 6.1.0.1-169版本

与PDI对接的HDP24环境依赖包 https://github.com/pentaho/pentaho-hadoop-shims/tree/hdp24-61.2016.05.00-R 下载后仅对hdp24版本编译,如果你是用的是其他hadoop发行版,可以进行对应编译。

hdp24编译后目录结构。



编译过程中需要注意两个问题:

(1) 源码根目录下 common-shims-build.xml文件中,javac标签下需要添加javac执行路径executable="C:/Program Files/Java/jdk1.7.0_79/bin/javac", 否则会报无效的发行版本错误。

(2) hdp24目录下 ivy.xml文件中排除掉队jetty的依赖,否则编译时候会报错终止,因为jetty依赖在仓库中无法找到。<exclude org="org.mortbay.jetty" module="jetty"/>
<exclude org="org.mortbay.jetty" module="jetty-util"/>

一 使用PDI提交Spark任务。

PDI对spark任务提交,我认为就是简单的为spark-submit提供了界面化的操作。也就是对于spark任务的的支持,仅支持到jar包源码级别,而不支持源码内部流程定义。

那么使用起来就很简单了,但是使用pdi提交spark任务后,任务是提交成功了,但是任务运行失败了,查找spark任务日志。



由于classpath中 含有未解析的${hdp.version}变量,所以报bad substitution。这种异常造成原因是在执行java应用的时候,java的option中没有指定hdp.version这个变量。因此想到的方法就是在spark提交任务的时候为java option添加上这个变量的值。解决方法是在spark-defaults.conf文件中加入以下两行:

spark.driver.extraJavaOptions=-Dhdp.version=2.4.0.0-169
spark.executor.extraJavaOptions=-Dhdp.version=2.4.0.0-169

得解!

二 使用PDI提交MR任务。

PDI提供了MR流程定义,也就是对MR的支持不是到源码级别,而是可以支持到M/R的流程自定义,并且会自动生成MRjob提交到大数据平台,这是相当灵活的。但是在提交PDI提供的word_count任务后,任务是提交成功了,但是任务执行总是报错:

原因就是:

Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

根据原因分析应该是类路径问题,可是对比了类路径又觉得没问题,

这个问题一直持续了两天,毫无头绪,最终感谢这篇博客 , http://qq85609655.iteye.com/blog/2193911 抱着试试看的态度居然在百度搜索到了你。!

那么导致以上问题的原因就是 windows/linux对类路径的分隔符是不一致的。

解决方案就是在mapred-site.xml中添加

<property>

<name>mapreduce.app-submission.cross-platform</name>

<value>true</value>

</property>

问题完美解决!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息