mapreduce split和spark paritition之间的区别

shu*_*aat 7 hadoop mapreduce hdfs apache-spark

我想问一下,在使用Hadoop/MapReduce和Spark时,数据分区有什么显着差异吗?它们都在HDFS(TextInputFormat)上工作,所以它在理论上应该是相同的.

是否有任何数据分区程序可能不同的情况?任何见解对我的学习都非常有帮助.

谢谢

mrs*_*vas 7

使用Hadoop/mapreduce和Spark时,数据分区有什么重大差异吗?

Spark支持所有hadoop I/O格式,因为它使用相同的Hadoop InputFormat API以及它自己的格式化程序.因此,默认情况下,Spark输入分区的工作方式与Hadoop/MapReduce输入分割的工作方式相同.在一个分区中的数据的大小可以在运行时配置的,并且它提供了类似改造repartition,coalesce以及repartitionAndSortWithinPartition可以给你直接控制被计算分区的数量.

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

除了Hadoop之外,I/O API Spark还有一些其他智能I/O格式(例如:Databricks CSVNoSQL DB连接器),它们将直接返回DataSet/DateFrame(在RDD之上的更高级别的东西),这些是特定于火花的.

从非Hadoop源读取数据时火花分区的关键点

  • 分区的最大大小最终由连接器决定,
    • 对于S3,该属性就像fs.s3n.block.sizefs.s3.block.size.
    • 卡桑德拉的财产spark.cassandra.input.split.size_in_mb.
    • Mongo道具是,spark.mongodb.input.partitionerOptions.partitionSizeMB.
  • 默认情况下,分区数是max(sc.defaultParallelism, total_data_size / data_block_size).有时,群集中可用核心数量也会影响分区数量,例如sc.parallelize()没有分区参数.

阅读更多.. link1