Apache Zeppelin + Spark 的按需用户集群?

Posted

技术标签:

【中文标题】Apache Zeppelin + Spark 的按需用户集群?【英文标题】:On demand user cluster for Apache Zeppelin + Spark? 【发布时间】:2018-01-16 22:13:24 【问题描述】:

我们使用 cloudera 来部署一个 zeppelin-spark-yarn-hdfs 集群。目前,只有一个 zeppelin 和 spark 的实例,所有 spark notebook 的执行都会影响到每个用户。例如,如果我们停止用户笔记本中的 spark 上下文,它会影响所有其他用户的笔记本。我已经看到 zeppelin 中有一个选项可以隔离口译员,但是有没有办法根据需要为每个用户提供自己的“集群”?也许使用 Docker 并为每个用户使用 zeppelin 和 spark 构建图像,并将他们的资源限制为用户集群提供的资源?对于如何实现它,或者是否有可能,我很迷茫,但我理想的情况是像 databricks 那样的方法。在那里您可以拥有自己的集群,并且所有资源都与其他用户隔离。

【问题讨论】:

【参考方案1】:

有几种方法可以解决。

我假设您无论如何都在运行集群,因此任何按需资源都仅限于静态资源,但由 YARN 以动态方式分配。 您应该首先查看 YARN-queues 和 YARN-authorization。这样,您就可以根据组织的公平标准有效地管理资源可用性。

在 Zeppelin 方面,确保还启用身份验证 - 这会传递到 YARN 和 HDFS。有效隔离用户。如果您有不同的要求,并且想确保口译员不会发生冲突,您可以

使用隔离模式。这是最容易设置的,但很难维护。 为每个团队/组织单位设置一名口译员。这会产生很小的开销,并且您可以在一个 Zeppelin 实例中管理所有 OU,但这可能是集中管理不同需求的最佳方式。 使用可部署的 Zeppelins(例如 Dockerized)将 OU 彼此隔离,但您还必须维护每个 OU 的配置并在部署时将它们注入到映像中,或者管理一大堆自定义映像 只需让 OU 管理自己的 Zeppelin 并使用集群访问权限来限制它们在集群端实际可以执行的操作。由于没有“一般” Zeppelin 用户,因此此建议取决于用户的技术技巧。维护这一点应该不会太困难,而且灵活性可能会让它变得值得。显然,预计会有更高的支持/协助工作量。

哪种解决方案适合您,很大程度上取决于组织构成、技术技能和用户的各种需求。要记住的一件事是依赖管理——一旦集群访问得到解决,这可能是最大的问题。一旦越来越多的人开始使用 Zeppelin 并共享一个解释器设置,您就越有可能遇到依赖冲突,这将毁掉每个人的一天。我个人会推荐我的第二个和第四个命题,但我看到第三个命题也用于大型企业——如果品种不太高,它可以工作。

我会做的一件事是每个用户创建一个 Zeppelin 实例。 Zeppelin 主要用于共享信息,因此应该在希望从彼此的工作中受益的一组用户之间共享一个 Zeppelin 实例。我认为您可以使用 netmounted notebook-directories 重新合并笔记本,但可能会出现写入争用问题,即意外覆盖/恢复以前的写入。

【讨论】:

基于这个问题,我建议提问者首先探索“每个团队一个口译员”选项,因为这似乎是实现充分分离的最简单方法。

以上是关于Apache Zeppelin + Spark 的按需用户集群?的主要内容,如果未能解决你的问题,请参考以下文章

在 YARN 中为 Apache zeppelin 分配 Spark 内存

如何在现有的 Apache Spark 独立集群上安装 Apache Zeppelin

Apache Zeppelin + EMR(Spark) Cluster 用于打开防火墙

Kubernetes 上的 Spark + Zeppelin

使用 zeppelin 在 kubernetes 上运行 Spark

Apache Zeppelin 中的 org/bson/conversions/Bson 错误