【问题标题】:Partition processing on same node?同一节点上的分区处理?
【发布时间】:2017-06-04 04:00:48
【问题描述】:

Spark 在 RDD 中创建逻辑分区。我有两个问题:-

1) 在谷歌上到处都说分区有助于并行处理,每个分区可以在单独的节点上处理。我的问题是我是否有多核 机器,我不能在同一个节点处理分区吗?

2) 假设我从文件系统中读取文件,并且 spark 创建了一个具有四个分区的 RDD。现在可以将每个分区进一步划分为 RDD 吗?例如:-

 firstRDD=sc.textFile("hdfs://...")
 //firstRDD contains four partition which are processed on four diff nodes
 secondRDD=firstRDD.filter(someFunction);
// Now will each node create separate secondRDD  which will have further paritions ?

【问题讨论】:

    标签: java apache-spark


    【解决方案1】:

    一个输入文本文件被分成 4 个分区,可能在一个节点内或最多 4 个节点,不会被分成更多的分区,因此将由读取它们的同一个执行程序进行评估最初。 但是,您可以repartition RDD/数据帧来增加并行化(例如为您的 64 个执行程序设置 64 个分区)。这将迫使洗牌,这可能是昂贵的,但特别是在计算昂贵的工作中是值得的。出现此问题的常见情况是读取不可拆分的文件,例如 GZIP 文件。无论大小如何,单个执行程序都必须读取文件(并进行处理!!)。因此,重新分区它对许多 GZIP 工作负载非常有益,因为它有助于并行计算。

    【讨论】:

    • 你说..will thus be evaluated by the same executor that read them in initially如果在4个节点上处理4个partitions,会有4个executors而不是1个对吧?另外,当您However, you may repartition.. 时,您的意思是一旦在 RDD 中创建了一个分区,在我们明确执行之前,默认情况下它不会被进一步分区?
    • 是的,如果 4 个节点在 1 个分区中读取,每个分区意味着 4 个执行器。根据转换(即聚合)的不同,可以将一个分区中的数据拆分为多个分区。例如,读取一个大的 gzip 文件,添加几列并在不聚合的情况下清理数据,然后将其写出将使单个执行程序完成整个工作负载,除非您明确告诉它重新分区。
    • @scottmiles Jacek 是一个很好的来源,那本书充满了好东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多