軟件環境:
CDH:5.7.3;Oozie:4.1.0-CDH5.7.3 ; Spark:1.6.0-cdh5.7.3-hadoop2.6.0-cdh5.7.3 ; Hadoop:hadoop2.6.0-cdh5.7.3(HDFS 採用HA方式);
問題描述:
解決思路:
1. 首先就是各種網上找
2. 查看源碼
#oozie.use.system.libpath=true
oozie.libpath=${nameNode}/user/oozie/share/lib/lib_20161222004831/spark
採用第二行的方式,而非第一行的方式(第二行中的lib_2016...是時間戳,每個集羣應該不一樣);val cachedSecondaryJarLinks = ListBuffer.empty[String]
List(
(args.addJars, LocalResourceType.FILE, true),
(args.files, LocalResourceType.FILE, false),
(args.archives, LocalResourceType.ARCHIVE, false)
).foreach { case (flist, resType, addToClasspath) =>
if (flist != null && !flist.isEmpty()) {
flist.split(',').foreach { file => // add distinct operation to avoid multiple same jars
val (_, localizedPath) = distribute(file, resType = resType)
println("fansy: ---->file:"+file)
require(localizedPath != null)
if (addToClasspath) {
cachedSecondaryJarLinks += localizedPath
}
}
}
}
然後再次查看日誌:解決方案:
1. 修改源碼:
val cachedSecondaryJarLinks = ListBuffer.empty[String]
List(
(args.addJars, LocalResourceType.FILE, true),
(args.files, LocalResourceType.FILE, false),
(args.archives, LocalResourceType.ARCHIVE, false)
).foreach { case (flist, resType, addToClasspath) =>
if (flist != null && !flist.isEmpty()) {
flist.split(',').distinct.foreach { file => // add distinct operation to avoid multiple same jars
val (_, localizedPath) = distribute(file, resType = resType)
println("fansy: ---->file:"+file)
require(localizedPath != null)
if (addToClasspath) {
cachedSecondaryJarLinks += localizedPath
}
}
}
}
編譯該源碼(如果自己編譯記得去掉那行打印),得到其class,如下:2. 替換Jar包
/user/oozie/share/lib/lib_20161222004831/spark/spark-yarn_2.10-1.6.0-cdh5.7.3.jar
把這個jar包先下載到linux,然後下載到windows;接着刪掉HDFS上的該jar包:hdfs dfs -rm -r /user/oozie/share/lib/lib_20161222004831/spark/spark-yarn_2.10-1.6.0-cdh5.7.3.jar
在windows裏面使用winRAR打開下載的spark-yarn_2.10-1.6.0-cdh5.7.3.jar包,並使用編譯後的Client的所有class替換對應的class;替換完成後得到該spark jar(可以在這裏下載 http://download.csdn.net/detail/fansy1990/9720059 )hdfs dfs -put spark-yarn_2.10-1.6.0-cdh5.7.3.jar /user/oozie/share/lib/lib_20161222004831/spark/
再次運行,發現Oozie任務成功運行: