MapReduce切片和Spark分区之间的区别

8
我想问一下,在使用Hadoop/MapReduce和Spark时,数据分区是否有任何显著差异?它们都使用HDFS(TextInputFormat),因此在理论上应该是相同的。

是否存在任何数据分区过程不同的情况?任何洞见都会对我的研究非常有帮助。

谢谢

1个回答

8

在使用Hadoop/mapreduce和Spark时,数据分区是否存在重大差异?

Spark支持所有的Hadoop I/O格式,因为它使用相同的Hadoop InputFormat API以及自己的格式化程序。所以,默认情况下,Spark输入分区的工作方式与Hadoop/MapReduce输入拆分相同。分区中的数据大小可以在运行时进行配置,并且它提供了转换函数,如repartitioncoalescerepartitionAndSortWithinPartition,可以直接控制计算的分区数。

是否存在其数据分区过程不同的情况?

除了Hadoop I/O API之外,Spark还具有一些智能I/O格式(例如Databricks CSVNoSQL DB Connectors),它们将直接返回DataSet/DateFrame(RDD之上的更高级别的东西),这些是Spark特定的。

从非Hadoop源读取数据时,Spark分区的关键点

  • 分区的最大大小由连接器最终确定,
    • 对于S3,属性类似于fs.s3n.block.sizefs.s3.block.size
    • Cassandra propertyspark.cassandra.input.split.size_in_mb
    • Mongo prop isspark.mongodb.input.partitionerOptions.partitionSizeMB
  • 默认情况下,分区数为max(sc.defaultParallelism, total_data_size / data_block_size)。有时群集中可用核心数也会影响分区数,例如使用没有分区参数的sc.parallelize()

阅读更多.. link1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接