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

时间:2016-09-08 15:18:04

标签: hadoop apache-spark spark-streaming yarn apache-zeppelin

亲爱的社区!在我描述问题之前,这里是对正在使用的软件的简短描述(其中后两个在三个节点的小集群中运行,每个节点使用 Ubuntu 14.04 ):

  • Zeppelin 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的<。strong 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.jars spark.jars.packages
  • 在Zeppelin中使用%dep 解释器,如下所示: z.load(&#34; org.apache.bahir:spark-streaming-twitter_2.11:2.0.0-预览&#34)即可。不过这是弃用的。
  • 在Zeppelin备注中使用 sc.addJar()手动添加.jar文件。

在尝试了上述所有内容之后 - 几乎是任意组合及其变体 - 问题是我仍然无法从Zeppelin笔记中导入 TwitterUtils 类:< / p>

Class import failing in Zeppelin note.

从图中可以看出, sc.listJars()的输出显示实际包含了.jar文件。但是,类导入失败。

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

Class import working from Spark shell.

为了了解发生了什么,我搜索了Zeppelin,Spark和YARN的日志文件,但是找不到任何错误消息指出问题的原因。

长话短说:虽然jar文件包含在Zeppelin中(由 sc.listJars()证明)虽然类导入可以从spark-shell中运行在纱线客户端模式下,我无法从我的Zeppelin笔记中获取导入功能。

长篇故事更短:我非常感谢您对如何解决此问题的想法!

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

PS:我很抱歉我无法直接将图像上传到这个帖子 - 它说我需要至少10个声望点,我没有,因为这是我在这里的第一个帖子

1 个答案:

答案 0 :(得分:0)

@eliasah提出的解释器选项卡中添加依赖项实际上就是这样做的 - 非常感谢!

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

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

以下是执行上述步骤后对 sc.listJars()的调用看起来像我的情况:

Call to sc.listJars().

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