【发布时间】: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