在 Ubuntu 14.04 上以 Yarn-Client 模式在 Spark 上的 Zeppelin 中加载外部依赖项

Posted

技术标签:

【中文标题】在 Ubuntu 14.04 上以 Yarn-Client 模式在 Spark 上的 Zeppelin 中加载外部依赖项【英文标题】:Loading external dependencies in Zeppelin on Spark in Yarn-Client mode on Ubuntu 14.04 【发布时间】:2017-01-16 14:36:28 【问题描述】:

亲爱的社区!在我描述问题之前,这里先简要介绍一下所使用的软件(后两者运行在一个由三个节点组成的小集群中,每个节点都使用 Ubuntu 14.04):

齐柏林飞艇 0.6.1 Spark 2.0.0 以及 Scala 2.11.8 Hadoop 2.7.3

情况如下: 为了在 Zeppelin 笔记中编写的 Spark Streaming 应用程序中使用 TwitterUtils 类,我需要包含 org.apache.spark.streaming.twitter ._ 来自 Maven (org.apache.bahir:spark-streaming-twitter_2.11:2.0.0-preview)。到目前为止,我学到的是有几个选项可以在 Zeppelin 中使用外部依赖项:

conf/zeppelin-env.sh 中导出 SPARK_SUBMIT_OPTIONS 变量并设置 --jars(在我的情况下为 -- jars hdfs://admdsmaster:54310/global/jars/spark-streaming-twitter_2.11-2.0.0-preview.jar(指向本地文件系统的路径也经过测试)。 导出 SPARK_SUBMIT_OPTIONS 并设置 --packages(在我的情况下为 --packages org.apache.bahir:spark-streaming-twitter_2.11:2.0. 0-预览)。 在 conf/spark-defaults.conf 中使用上述值设置 spark.jarsspark.jars.packages。李> 在 Zeppelin 本身中使用 %dep 解释器,如下所示:z.load("org.apache.bahir:spark-streaming-twitter_2.11:2.0.0-preview") 。不过,这已被弃用。 在 Zeppelin 注释中使用 sc.addJar() 手动添加 .jar 文件。

在尝试了以上所有方法(以及几乎任意组合和变体)之后,问题是我仍然无法从 Zeppelin 注释中导入 TwitterUtils 类:

Class import failing in Zeppelin note.

从图片中也可以看到sc.listJars()的输出,它表明.jar文件实际上被包含在内。尽管如此,类导入失败。

我的第一个想法是问题的出现是因为 Spark 在 yarn-client 模式下运行,所以我也以 yarn-client 模式启动了 Spark shell,并尝试从那里导入 TwitterUtils 类-- 有效:

Class import working from Spark shell.

为了弄清是怎么回事,我搜索了 Zeppelin、Spark 和 YARN 的日志文件,但没有找到任何错误消息来指出问题的原因。

长话短说:虽然 jar 文件包含在 Zeppelin 中(如 sc.listJars() 所证明的那样)并且虽然类导入可以从 spark-shell在 yarn-client 模式下,我无法在 Zeppelin 笔记中进行导入。

长话短说:非常感谢您对如何解决这个问题的想法!

提前感谢您的时间和精力。

PS:很抱歉我无法将图片直接上传到这篇文章中——它说我需要至少 10 个我没有的声望点,因为这是我第一次在这里发帖。

【问题讨论】:

您是否尝试从解释器选项卡中添加它们? 【参考方案1】:

按照@eliasah 的建议从解释器选项卡添加依赖项实际上起到了作用——非常感谢!

对于那些可能遇到同样问题的人,我将很快描述解决方案,并添加一张图片,说明对 sc.listJars() 的调用实际上应该如何看起来像(与原始问题中的图片相比)。

前往 Zeppelin 的解释器选项卡并向下滚动或搜索 spark 解释器,然后点击 edit。在可用设置的最底部有一个 Dependencies 部分。在此处添加您的依赖项(通过指定 Maven 坐标,例如,在我的情况下为 org.apache.bahir:spark-streaming-twitter_2.11:2.0.0-preview)并保存设置。重新启动解释器后,依赖项应该可用。

在执行上述步骤后,在我的案例中,对 sc.listJars() 的调用如下所示:

如果您将此图片与原始问题中的第一张图片进行比较,您会注意到该列表现在包含更多条目。不过,我仍然想知道,为什么只有包含它的 .jar 文件存在时,类导入不起作用。无论如何,感谢@eliasah 解决了问题——再次感谢,你值得拥有一块饼干! -- 我希望这个简短的描述也能对其他人有所帮助。

【讨论】:

以上是关于在 Ubuntu 14.04 上以 Yarn-Client 模式在 Spark 上的 Zeppelin 中加载外部依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ubuntu20 上以 theano 为后端的 termux 运行 keras

如何安装ubuntu14.04

Ubuntu14.04下Python3.4启动IDLE

无法在 Ubuntu (16.04) 上以伪模式启动 Hadoop (3.1.0)

在 ubuntu 14.04 上安装 tkinter

在ubuntu14.04环境下编译gcc