Mesos 上的独立 Spark 集群访问不同 Hadoop 集群中的 HDFS 数据

Posted

技术标签:

【中文标题】Mesos 上的独立 Spark 集群访问不同 Hadoop 集群中的 HDFS 数据【英文标题】:Standalone Spark cluster on Mesos accessing HDFS data in a different Hadoop cluster 【发布时间】:2017-08-28 08:38:36 【问题描述】:

我们有一个 Hadoop 集群,其中包含 275 个节点的数据节点(55Tb 总内存,12000 个 VCore)。 这个集群与几个项目共享,我们有一个资源有限的 YARN 队列分配给我们。

为了提高性能,我们正在考虑为我们的项目构建一个单独的 Spark 集群(在同一网络中的 Mesos 上)并访问 Hadoop 集群上的 HDFS 数据。

如 Spark 文档中所述:https://spark.apache.org/docs/latest/spark-standalone.html#running-alongside-hadoop

我的问题是:

    这不违反 Hadoop 的哲学:“将计算转移到数据”吗?

    为了获得最佳性能,新 Spark 集群需要多少节点?

--编辑--

    我想知道这个数据加载是如何发生的。例如,如果我对表执行 SparkSQL 查询,它是否通过从 Hadoop 集群加载数据在 Mesos Spark 集群中创建 RDD,然后对生成的 RDD 进行处理? 这个跨集群数据IO不会影响性能吗?由于通常在 YARN-Spark 设置中,RDD 和数据位于相同的节点中。

【问题讨论】:

为什么不在 Mesos 中运行 HDFS? Doesn't this cross cluster data IO impact the performance ? - 是的。但是您仍然在同一个网络中,如下面的答案所述 【参考方案1】:

这不是违背 Hadoop 的哲学:“将计算转移到数据”吗?

一般来说是的。特别是如果这些节点位于不同的数据中心。越近越好。现在,我读到它们在同一个网络中:

在同一网络中的 Mesos 上

测量机器之间的延迟。只有这样才能判断好不好。

为了获得最佳性能,新 Spark 集群需要多少节点?

最适合谁?这仅取决于您的用例。

例如,如果我对表执行 SparkSQL 查询,它是否通过从 Hadoop 集群加载数据在 Mesos Spark 集群中创建 RDD,然后对生成的 RDD 进行处理?

是的,虽然它不是“读取所有内容然后处理它”的固定过程 - 它不断读取、处理然后写下“部分结果”,因为您可能猜到,它无法加载 1 TB 的数据记忆。

这种跨集群数据 IO 不会影响性能吗?由于通常在 YARN-Spark 设置中,RDD 和数据位于相同的节点中。

绝对!然而,正如我已经提到的,如果你想要更精确的估计,你至少应该测量这个网络中节点之间的延迟——也许一些节点比其他节点更接近 HDFS 机器。

如果没有测量(延迟、性能测试等)和对网络拓扑的仔细分析,这纯粹是推测。

【讨论】:

修改第三题

以上是关于Mesos 上的独立 Spark 集群访问不同 Hadoop 集群中的 HDFS 数据的主要内容,如果未能解决你的问题,请参考以下文章

Spark概念介绍

Spark的集群管理器

Spark 独立集群轮胎访问本地 python.exe

大数据平台实战(05)深入Spark Cluster集群模式YARN vs Mesos vs Standalone vs K8s

如何在 Windows 机器上设置 Spark 集群?

跟我一起学docker(16)--单节点mesos集群