2

Spark 版本:1.4.0 Cassandra 版本:2.1.8

我正在使用 datastax Spark Cassandra 连接器来桥接 Spark 和 Cassandra。我在 Spark 中有 6 个节点与 6 个不同的工作人员一起运行。我有 2 个 Cassandra 节点来协助此操作。

我尝试了一个示例应用程序来计算列族中的行数(CassandraUtil.javaFunctions(sc).cassandraTable("keyspace","columnfamily").count())。

现在,当我将这个单一作业分派给主服务器时,该作业在 Spark 集群中的 2 个工作节点中运行(从事件时间线获取)。

问题

  1. 我派遣了一份工作。为什么是两个工人做的?一个工人在这里像主人一样吗?
  2. 我发现一名工人的反序列化时间非常长。其他工人很快完成了这项工作(1 人用了 40 秒,2 人用了 1 秒)。你能对此有所了解吗?
  3. 两个工人似乎都与 Cassandra 建立了联系并返回了结果。所以,在我看来,两者都在做同样的工作。你能对此有所了解吗?
  4. 我仍然想知道 RDD 的实现在哪里适合 Cassandra 的分布式领域。有人可以对此有所了解吗?多个工作人员如何知道他们必须处理 Cassandra 的哪个分区,例如,如果可以在 6 个工作人员之间拆分 10k 个分区?是不是全部由一名工人完成,而处理由其中 6 人完成?即使在这种情况下,所有工作人员的执行逻辑都保持不变(从 Cassandra 和进程中获取)。Spark 是如何做到这一点的?
  5. 想知道将 Spark 与 Cassandra 一起使用的真正优势。它是在内存管理级别还是有其他一些优势?

编辑

在此处输入图像描述

我添加了跑步的图片。我只有 10 个不同的分区。这是一个简单的计数操作。

我猜我的问题仍然是一个谜。

如果您看到提供的附件,我想您会有所了解。这是提交给我的火花大师的单一工作。想知道它是如何在两个不同的执行器中运行的。两个执行程序都返回相同数量的字节。因此,这表明两者都从 cassandra 获取了所有 10 个分区。如果这是它发生的方式,那么 spark 为我提供了 cassandra 什么?或者,我是否必须以其他方式获取它,以便两个不同的工作人员获取十个分区?

4

1 回答 1

6

我建议您花几个小时阅读 Spark 和 C*。我在这篇文章的底部挑选了一些推荐的材料。

现在让我回答你的问题:

我派遣了一份工作。为什么是两个工人做的?一个工人在这里像主人一样吗?

可能与资源可用性或工作中的分区数量有关(可能是后者)。

正如 Russ 所说,“提高工作的并行度。尝试增加工作中的分区数量。通过将工作分成更小的数据集,在给定时间必须驻留在内存中的信息更少。对于 Spark Cassandra 连接器工作,这将意味着减少拆分大小变量。”

要在 1.2 中调整它,请使用:

spark.cassandra.input.split.size spark.cassandra.output.batch.size.rows spark.cassandra.output.batch.size.bytes

在较新的版本中,您还拥有: spark.cassandra.output.throughput_mb_per_sec

我发现一名工人的反序列化时间非常长。其他工人很快完成了这项工作(1 人用了 40 秒,2 人用了 1 秒)。你能对此有所了解吗?

来自实际将功能添加到 web ui的 Kay :

“相对于短作业的任务时间,反序列化任务的时间可能会很大,并且了解什么时候很长可以帮助开发人员意识到他们应该尝试减少闭包大小(例如,通过在任务描述中包含更少的数据)。”

两个工人似乎都与 Cassandra 建立了联系并返回了结果。所以,在我看来,两者都在做同样的工作。你能对此有所了解吗?

Spark 并行工作。因为这是一种分布式计算范式,您可以通过启动并行工作的执行程序来利用多个节点和多个内核。两个执行器都将从 C* 中提取数据,但它们会根据分区提取不同的数据。

有关详细信息,请参阅一些介绍视频。

我仍然想知道 RDD 的实现在哪里适合 Cassandra 的分布式领域。有人可以对此有所了解吗?多个工作人员如何知道他们必须处理 Cassandra 的哪个分区,例如,如果可以在 6 个工作人员之间拆分 10k 个分区?是不是全部由一名工人完成,而处理由其中 6 人完成?即使在这种情况下,所有工作人员的执行逻辑都保持不变(从 Cassandra 和进程中获取)。Spark 是如何做到这一点的?

每个人都将根据分区获取和处理自己的数据。

要获取有关如何划分作业的信息,请使用:

rdd.partitions

如果您将 Spark 和 Cassandra 放在一起,就像DSE中的情况一样,您将获得数据本地化的优势(无需将数据从 c* 流式传输到 spark 工作人员)。

想知道将 Spark 与 Cassandra 一起使用的真正优势。它是在内存管理级别还是有其他一些优势?

这里可能列出的太多了,请参阅推荐阅读/查看。大热门是用于批处理和流分析的 sql 样式查询(连接、聚合、groupby 等)+ 使用 MLLIB 的精美统计建模、使用 graphx 的分析图等。

以下是一些可以帮助您快速入门的好材料:

这是来自 Russ 的关于 Spark 和 C* 可能实现的高级演示: http ://www.slideshare.net/planetcassandra/escape-from-hadoop

OReily 与来自 DataBricks 的 Sameer 就 DSE 如何与 Spark 集成的网络研讨会: http ://www.oreilly.com/pub/e/3234

连接器如何读取数据: https ://academy.datastax.com/demos/how-spark-cassandra-connector-reads-data

一旦您真正尝试使某些东西正常工作,有关故障排除 spark 的重要帖子将很有帮助。这些将回答您的大部分 opps/perf 问题: http ://www.datastax.com/dev/blog/common-spark-troubleshooting

https://databricks.com/blog/2015/06/16/zen-and-the-art-of-spark-maintenance-with-cassandra.html

来自 Sandy 的两篇类似且有价值的帖子(非 c* 特定): http: //blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-1/ http ://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

于 2015-07-22T05:25:27.947 回答