【问题标题】:How does Spark partition's HDFS files?Spark分区的HDFS文件如何?
【发布时间】:2017-04-24 00:43:42
【问题描述】:

如果我们有一个未压缩的 320 块 HDFS 文件存储在 16 个数据节点的集群上。每个节点有 20 个块,如果我们使用 Spark 将此文件读入 RDD(在创建 RDD 时不显式传递 numPartitionstextFile = sc.textFile("hdfs://input/war-and-peace.txt")

如果我们在每个节点上有 16 个执行器,那么 Spark RDD 将为每个执行器创建多少个分区?它会为每个 HDFS 块创建一个分区,即 20 个分区吗?

【问题讨论】:

    标签: apache-spark hdfs


    【解决方案1】:

    如果你有320 blocks的HDFS,那么下面的代码将创建一个有320个分区的RDD

    val textFile = sc.textFile("hdfs://input/war-and-peace.txt")
    

    textFile() 方法产生一个RDD,当文件存储在 HDFS 中时,该same number of blocks 被分区。

    您可以查看这个question,它可以解决您对分区的疑问

    【讨论】:

    • 320个RDD分区是什么意思?我的理解是,在我提到的场景中,它会在每个从节点上创建总共 16 个分布式 RDD,每个从节点上的每个 RDD 将包含 20 块 HDFS 文件?
    • 它不会创建16个RDD,它只会创建一个320个分区的RDD,分区将分布在从节点上。
    • 你的答案可能是正确的,但我还是不明白。您已经提到“Spark 分区将分布在从属节点上”。如果它是 Scala 或 Java 集合,我明白了,但我的问题是,当 HDFS 文件已经作为块分布在从节点上时,为什么 Spark 还要进一步分发 HDFS 文件?现在问题的第二部分是这个由 320 个分区组成的单个 RDD 位于 Master 上的哪个节点?还是从节点之一?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多