【问题标题】:Jupyter as Zeppelin replacement: multi-lingual SparkJupyter 作为 Zeppelin 的替代品:多语言 Spark
【发布时间】:2018-08-14 00:41:46
【问题描述】:

我的团队正在为我们构建的应用程序尝试从 Zeppelin 过渡到 Jupyter,因为 Jupyter 似乎具有更大的动力、更多的定制机会,并且通常更灵活。但是,在 Jupyter 中,Zeppelin 有一些我们无法实现的功能。

主要是支持多语言 Spark - Jupyter 是否可以在同一个笔记本中创建可通过 R、Scala、Python 和 SQL 访问的 Spark 数据帧?我们编写了一个 Scala Spark 库来创建数据帧并将它们交还给用户,用户可能想要使用各种语言来操作/查询数据帧。

Livy 是 Jupyter 上下文中的解决方案吗,即它是否允许多个连接(从各种语言前端)到一个公共 Spark 后端,以便它们可以操作相同的数据对象?我不能从 Livy 的网站上完全判断给定的连接是否只支持一种语言,或者每个会话是否可以有多个连接。

如果 Livy 不是一个好的解决方案,BeakerX 可以满足这个需求吗? BeakerX 网站称其两个主要卖点是:

  • 多语言魔法和自动翻译,让您可以在同一个笔记本中访问多种语言,并在它们之间进行无缝通信;
  • Apache Spark 集成,包括 GUI 配置、状态、进度、中断和表格;

但是,我们无法使用 BeakerX 连接到本地 Spark 集群以外的任何东西,因此我们无法验证多语言实现的实际工作原理。如果我们可以连接到 Yarn 集群(例如 AWS 中的 EMR 集群),多语言支持是否可以让我们使用不同的语言访问相同的会话?

最后,如果这些都不起作用,自定义魔法会起作用吗?也许可以将请求代理到其他内核,例如sparkpysparksparkr 内核?我看到这种方法的问题是,我认为每个后端内核都有自己的 Spark 上下文,但是有没有我没有想到的解决方法?

(我知道 SO 问题不应该征求意见或建议,所以我在这里真正要问的是,上述三种选择是否确实存在可能的成功之路,不一定我应该选择。)

【问题讨论】:

  • 一方面,确实,这类问题不适合 SO。事实上,Zeppelin 的优势之一是在语言之间共享上下文。在这种情况下,您需要一个允许这样做的中间件。看看这里github.com/awesome-spark/awesome-spark#middleware也许你会找到你要找的东西
  • 否则,我必须投票结束这个题外话。

标签: apache-spark jupyter-notebook livy beaker-notebook


【解决方案1】:

另一种可能是 SoS(Script of Scripts)多语言笔记本https://vatlab.github.io/sos-docs/index.html#documentation。 它在一个笔记本中支持多个 Jupyter 内核。 SoS 有几种原生支持的语言(R、Ruby、Python 2 & 3、Matlab、SAS 等)。 Scala 本身不支持,但可以将信息传递给 Scala 内核并捕获输出。还有一种看似简单的添加新语言的方法(已经使用 Jupyter 内核);见https://vatlab.github.io/sos-docs/doc/documentation/Language_Module.html

【讨论】:

  • 谢谢@tupolev,我去看看。
【解决方案2】:

我在我的应用程序中使用 Livy。它的工作方式是任何用户都可以使用 REST(异步调用)连接到已经建立的 Spark 会话。我们有一个集群,Livy 在其上发送 Scala 代码以供执行。发送 scala 代码后是否要关闭会话由您决定。如果会话打开,那么任何有权访问的人都可以再次发送 Scala 代码以进行进一步处理。我没有尝试在通过 Livy 创建的同一会话中发送不同的语言,但我知道 Livy 在交互模式下支持 3 种语言,即 R、Python 和 Scala。因此,理论上您可以发送任何语言的代码以供执行。

希望在一定程度上有所帮助。

【讨论】:

  • 感谢@BDA,您的设置描述很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多