准备工做:java
PDI工具下载地址:http://community.pentaho.com/ 6.1.0.1-169版本linux
与PDI对接的HDP24环境依赖包 https://github.com/pentaho/pentaho-hadoop-shims/tree/hdp24-61.2016.05.00-R 下载后仅对hdp24版本编译,若是你是用的是其余hadoop发行版,能够进行对应编译。git
hdp24编译后目录结构。github
编译过程当中须要注意两个问题:apache
(1) 源码根目录下 common-shims-build.xml文件中,javac标签下须要添加javac执行路径executable="C:/Program Files/Java/jdk1.7.0_79/bin/javac", 不然会报无效的发行版本错误。windows
(2) hdp24目录下 ivy.xml文件中排除掉队jetty的依赖,不然编译时候会报错终止,由于jetty依赖在仓库中没法找到。<exclude org="org.mortbay.jetty" module="jetty"/>
<exclude org="org.mortbay.jetty" module="jetty-util"/>app
一 使用PDI提交Spark任务。工具
PDI对spark任务提交,我认为就是简单的为spark-submit提供了界面化的操做。也就是对于spark任务的的支持,仅支持到jar包源码级别,而不支持源码内部流程定义。oop
那么使用起来就很简单了,可是使用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中添加
问题完美解决!