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

Loading external dependencies in Zeppelin on Spark in Yarn-Client mode on Ubuntu 14.04

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

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

在尝试了以上所有方法——以及几乎任意组合和变体——之后,问题是我仍然无法导入 TwitterUtils class来自 Zeppelin 音符:

Class import failing in Zeppelin note.

从图片中还可以看出sc.listJars()的输出,这表明实际上包含了.jar文件。尽管如此,class 导入失败。

我的第一个想法是问题的发生是因为 Spark 运行 处于 yarn-client 模式,所以我也以 yarn-client 模式启动了 Spark shell 并尝试导入 TwitterUtils class 从那里开始——有效:

Class import working from Spark shell.

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

长话短说:尽管 jar 文件包含在 Zeppelin 中(由 sc.listJars() 证明)并且尽管 class 导入在 yarn-client 模式下从 spark-shell 开始工作,但我无法在我的 Zeppelin note 中进行导入。

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

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

P.S.: 很抱歉我无法将图像直接上传到这个 post -- 它说我至少需要 10 个信誉点,但我不需要因为这是我第一次 post 来这里。

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

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

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

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

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