在 YARN 上管理的 Zeppelin 上带有 Scalding 的 ClassNotFoundException

ClassNotFoundException with Scalding on Zeppelin managed on YARN

我正在尝试让 Scalding 在使用 YARN 的同时在 Zeppelin 上工作。我按照文档 here 中的步骤构建解释器并设置类路径覆盖。当我 运行 处于本地模式时,代码可以正常执行。但是,当我通过 YARN 在我的集群上 运行 时,我的作业失败了:

Error: java.lang.ClassNotFoundException: cascading.CascadingException

Error: java.lang.ClassNotFoundException: cascading.tuple.TupleException

更让我感到奇怪的是,我可以进入 Zeppelin 并执行:

import cascading.tuple.TupleException
import cascading.CascadingException

而且两者似乎都能轻松找到 类。只有当我尝试实际使用 scalding(在 YARN 上)时,比如将数据加载到类型化管道并转储时,我才得到 ClassNotFoundException。关于如何调试或修复什么的任何想法?

看起来级联 jar 没有分发到 YARN 集群。请将"zeppelin/interpreter/scalding/*"添加到args.string 属性 烫解器

这是我们使用的args.string:

-libjars /home/zeppelin-user/zeppelin/interpreter/scalding/,/home/zeppelin-user/deploy-bundle-201608111417/libs/ -Dscalding.reducer.estimator.classes=com.twitter.scalding.reducer_estimation.InputSizeReducerEstimator -Delephantbird.use.combine.input.format=true -Delephantbird.combine.split.size=134217728 --hdfs --repl

tmpjars 包含分发到 YARN 集群的 jar。您可以使用以下命令查看其内容:

%scalding 
mode.asInstanceOf[Hdfs].conf.get("tmpjars").split(",").foreach(println)