如何在Spark

时间:2015-07-22 03:06:27

标签: cassandra apache-spark cassandra-2.0 spark-cassandra-connector

Spark版本:1.4.0 Cassandra版本:2.1.8

我正在使用数据交换Spark Cassandra连接器来连接Spark和Cassandra。我在Spark中有6个节点,运行着6个不同的工作者。我有2个Cassandra节点协助这个。

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

现在,当我将此单个作业分派给主服务器时,作业在Spark Cluster中的2个工作节点中运行(来自事件时间轴)。

问题

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

    enter image description here

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

    我的问题仍然是个问题。

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

1 个答案:

答案 0 :(得分:5)

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

现在让我谈谈你的问题:

  

我派了一份工作。为什么这是由两名工人完成的?是不是   一个工人就像这里的主人一样?

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

正如Russ所说:“增加工作的并行性。尝试增加工作中的分区数量。通过将工作分成更小的数据集,在给定时间内,必须将更少的信息驻留在内存中。 Spark Cassandra Connector作业这意味着减少分割大小变量。“

要在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个   第二)。你能否对此有所了解?

Kay who actually added the feature到网址:

“反序列化任务的时间可能相对较大 短期工作的任务时间,并了解何时可以提供帮助 开发人员意识到他们应该尝试减少封闭尺寸(例如,通过包括 任务描述中的数据较少。“

  

这两名工人似乎都与卡桑德拉建立了联系   并返回了一个结果。因此,在我看来,两者都在做同样的事情   工作。你能否对此有所了解?

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

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

  

我仍然想知道RDD的实现在哪里适合   与Cassandra分布式领域。有人能说些什么   这个?多个工人如何知道他们的Cassandra分区   必须要努力,如果可以的话,在6个中分割10k个分区   工作人员?是这样的,抓取是由一个工人和处理完成的   是由6个人完成的?即使在这种情况下,执行逻辑仍然是   所有工人都一样(取自Cassandra和流程)。 Spark如何?   这样做?

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

要获取有关如何分区作业的信息:

rdd.partitions

如果您正在集中Spark和Cassandra,就像在DSE中那样,您可以获得数据局部性的优势(无需将数据从c *传输到spark工作者)。

  

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

此处列出的内容可能太多,请参阅推荐的阅读/观看内容。大型打击者是批量和流式分析的sql样式查询(连接,聚合,组合等)+使用MLLIB进行花式统计建模,使用graphx进行分析图等等。

以下是一些可以让您加快速度的好材料:

这是Russ对Spark和C *的可能性的高级演示: http://www.slideshare.net/planetcassandra/escape-from-hadoop

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

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

关于故障排除火花的重要帖子将有助于您实际尝试获取工作。这些将回答您的大多数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/