首页 文章

如何在Spark中分配工作

提问于
浏览
2

Spark版本:1.4.0 Cassandra版本:2.1.8

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

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

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

问题

  • 我派了一份工作 . 为什么这是由两名 Worker 完成的?是不是像一个 Worker 在这里像大师一样?

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

  • 这两名 Worker 似乎都与Cassandra Build 了联系并返回了结果 . 因此,在我看来,两者都在做同样的工作 . 你能对此有所了解吗?

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

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

EDIT

enter image description here

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

我的猜测仍然是我的问题 .

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

1 回答

  • 5

    我建议您花几个小时阅读Spark和C * . 我有一些我在本文底部选择的推荐材料 .

    我现在就谈谈你的问题:

    我派了一份工作 . 为什么这是由两名 Worker 完成的?是不是像一个 Worker 在这里像大师一样?

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

    正如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

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

    Kay who actually added the feature到web ui:

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

    这两名 Worker 似乎已经与 Cassandra Build 了联系并且已经返回了结果 . 因此,在我看来,两者都在做同样的工作 . 你能对此有所了解吗?

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

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

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

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

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

    rdd.partitions

    如果您正在使用Spark和Cassandra,就像在_2544068中那样,您可以获得数据局部性的优势(无需将数据从c *传输到spark worker) .

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

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

    Here is some good material that should get you up to speed:

    这是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的两篇类似且有 Value 的帖子(不是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/

相关问题