【问题标题】:How is Spark's default partitions calculated for HadoopPartitions?Spark 的 HadoopPartitions 的默认分区是如何计算的?
【发布时间】:2018-12-02 03:46:16
【问题描述】:

我正在阅读Jacek Laskowski's online book about Apache Spark,关于分区,他说

默认情况下,会为每个 HDFS 分区创建一个分区,由 默认为 64MB

我对 HDFS 不是很熟悉,但我遇到了一些复制此语句的问题。我有一个名为Reviews.csv 的文件,它是大约 330MB 的亚马逊食品评论文本文件。给定默认的 64MB 块,我希望有 ceiling(330 / 64) = 6 分区。但是,当我将文件加载到我的 Spark Shell 中时,我得到了 9 个分区:

scala> val tokenized_logs = sc.textFile("Reviews.csv")
tokenized_logs: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[1] at textFile at <console>:24

scala> tokenized_logs
res0: org.apache.spark.rdd.RDD[String] = Reviews.csv MapPartitionsRDD[1] at textFile at <console>:24

scala> tokenized_logs.partitions
res1: Array[org.apache.spark.Partition] = Array(org.apache.spark.rdd.HadoopPartition@3c1, org.apache.spark.rdd.HadoopPartition@3c2, org.apache.spark.rdd.HadoopPartition@3c3, org.apache.spark.rdd.HadoopPartition@3c4, org.apache.spark.rdd.HadoopPartition@3c5, org.apache.spark.rdd.HadoopPartition@3c6, org.apache.spark.rdd.HadoopPartition@3c7, org.apache.spark.rdd.HadoopPartition@3c8, org.apache.spark.rdd.HadoopPartition@3c9)

scala> tokenized_logs.partitions.size
res2: Int = 9

我确实注意到,如果我创建另一个名为 Reviews_Smaller.csv 的较小版本的 Reviews.csv,只有 135MB,我的分区大小会显着减小:

scala> val raw_reviews = sc.textFile("Reviews_Smaller.csv")
raw_reviews: org.apache.spark.rdd.RDD[String] = Reviews_Smaller.csv MapPartitionsRDD[11] at textFile at <console>:24

scala> raw_reviews.partitions.size
res7: Int = 4

但是,根据我的计算,应该有 ceiling(135 / 4) = 3 分区,而不是 4 个。

我在我的 MacBook Pro 上本地运行所有内容。谁能帮忙解释一下 HDFS 的默认分区数是如何计算的?

【问题讨论】:

    标签: apache-spark hadoop


    【解决方案1】:

    来自Spark Programming Guide

    默认情况下,Spark 为文件的每个块创建一个分区 (HDFS 中的块默认为 128MB),但您也可以要求 通过传递更大的值来增加分区数。请注意,您 分区数不能少于块数。

    128MB 只是 默认 HDFS 块大小,但对于任何文件而言,实际上都可能有所不同。您的分区数意味着您的文件是使用非默认块大小写入的(或者更有可能由多个较小的文件组成)。

    请参阅this excellent SO 了解确定 HDFS 文件分割成块数的方法。

    【讨论】:

    • 谢谢。为什么我的文件可能使用非默认块大小写入的一些典型原因是什么?我不记得在 HDFS 上调整过任何配置。
    • 这完全取决于文件的编写方式。
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2018-08-17
    相关资源
    最近更新 更多