我们有一个Hadoop集群,数据节点有275个节点(总内存55T,12000个VCores(。 这个集群与几个项目共享,我们有一个资源有限的 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和数据位于相同的节点中。
违背Hadoop的哲学:"将计算转移到数据"吗?
一般来说是的。特别是如果这些节点位于不同的数据中心。越近越好。现在,我读到它们在同一个网络中:
在同一网络中的中观上
测量计算机之间的延迟。只有这样,你才能判断它是否好。
为了获得最佳性能,新的 Spark 群集需要多少节点?
最适合谁?这仅取决于您的用例。
例如,如果我对表执行SparkSQL查询,它是否通过从Hadoop集群加载数据在Mesos Spark集群中创建RDD,然后在生成的RDD上进行处理?
是的,虽然它不是一个固定的过程"读取所有内容然后处理它"——它不断地读取、处理然后写下"部分结果",因为正如您可能猜到的那样,它无法在内存中加载 1 TB 的数据。
这种跨集群数据 IO 不会影响性能吗?由于通常在YARN-Spark设置中,RDD和数据位于相同的节点中。
绝对!但是,正如我已经提到的,如果您想要更精确的估计,您至少应该测量该网络中节点之间的延迟 - 也许某些节点比其他节点更接近HDFS机器。
如果没有测量(无论是延迟、性能测试等(和对网络拓扑的仔细分析,这纯粹是推测。