【问题标题】:Apache Spark: How partitions are processed in an executorApache Spark:如何在执行程序中处理分区
【发布时间】:2018-02-16 21:32:43
【问题描述】:

我一直在研究火花,但有些领域对我来说仍然是灰色的,如果有人可以深入研究这将是一个很大的帮助。

1) 如果我有下面的 spark 提交配置,并且 spark 创建了大约 100 个分区,这个分区是如何在单个执行器中一个一个或并行处理的? > 1个执行者会是什么情况。

--master yarn \
--deploy-mode cluster \
--num-executors 1  \
--executor-memory 3g \
--executor-cores 3 \

2) 我们可以在 spark 中控制分区处理吗?

3) 我了解执行器核心有助于并行化分区中的任务,如果我有一个用例,我有一个 foreachPartition 方法,我正在处理一些消息(例如 max 和 min)并将此消息发送到 Kafka,什么角色执行器核心将在此操作中发挥作用。

【问题讨论】:

    标签: hadoop apache-spark dataframe


    【解决方案1】:
    1. 现在您指定的执行器数量为 1,执行器核心数为 3。因此在您的机器上只有一个执行器将运行 这将同时运行最多 3 个任务。执行器内存指定 Spark 可以缓存的数据量。 因此,一个执行器上的 100 个分区中最多可以并行处理 3 个。

    2. 我们可以使用 repartition 方法来更改 spark 中 RDD 的分区。 reduceByKey 和其他一些方法也有一个选项 传递要作为参数传递的输出 RDD 中的分区数。

    3. 我没有完全理解你的最后一个问题。但是执行器核心将扮演与上述相同的角色,以并行运行任务 一个执行者。

    【讨论】:

    • The executor memory specifies the amount of data Spark can cache,我觉得不是这样,executor内存是用来缓存和执行代码的。
    • 好的,这意味着如果我将执行器从 1 增加到 2,那么可以并行处理的最大分区数将是 6 对,因为我为每个执行器分配了 3 个核心。
    • @RaphaelRoth 感谢您的加入。我在回答时错过了关于执行代码的要点。
    • @nilesh1212 您的理解是正确的,但这是它可以处理的最大值。您可以参考下面的链接以获得更详细的解释blog.cloudera.com/blog/2015/03/…
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多