关于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>
问题完美解决!
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>
问题完美解决!
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Spark RDD API详解(一) Map和Reduce
- 使用spark和spark mllib进行股票预测
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- Spark随谈——开发指南(译)
- 单机版搭建Hadoop环境图文教程详解
- Spark,一种快速数据分析替代方案
- hadoop常见错误以及处理方法详解
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- Apache Hadoop版本详解
- linux下搭建hadoop环境步骤分享
- hadoop client与datanode的通信协议分析
- hadoop中一些常用的命令介绍
- Hadoop单机版和全分布式(集群)安装
- 用PHP和Shell写Hadoop的MapReduce程序
- hadoop map-reduce中的文件并发操作