spark rdd分区与hadoop拆分

ccgok5k5  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(370)

我很难理解rdd分区和hdfs输入拆分之间的区别。因此,基本上,当您提交spark申请时:
当spark应用程序想要从hdfs读取时,hdfs上的文件将具有输入分割(假设每个输入分割为64mb,并且每个输入分割都存在于不同的数据节点上)。
现在假设spark应用程序希望使用( sc.textFile(PATH_IN_HDFS) ). 文件大约是256MB,有4个输入分割,其中2个分割在数据节点1上,另外2个分割在数据节点2上。
现在,当spark将这个256mb加载到它的rdd抽象中时,它会将每个输入分割(64mb)加载到4个单独的rdd中(在数据节点1中有2个具有64mb数据的rdd,在数据节点2上有另外两个具有64mb数据的rdd)。或者rdd会在hadoop上进一步划分这些输入分割吗?那么这些分区将如何重新分配呢?我不明白rdd分区和hdfs输入拆分之间是否存在关联?

vojdkbi0

vojdkbi01#

我对spark还很陌生,但是split和mapreduce的工作有着严格的联系。spark以分布式方式将数据加载到内存中,哪些机器将加载数据取决于数据所在的位置(read:在某种程度上取决于数据块所在的位置,这与split的想法非常接近)。SparksAPI允许您根据rdd进行思考,而不再分裂。您将在rdd上工作,如何将数据分发到rdd不再是程序员的问题。你的整个数据集,在spark下,叫做rdd。

iecba09b

iecba09b2#

希望下面的答案能对你有所帮助。
当spark从hdfs读取一个文件时,它会为一个输入分割创建一个分区。
如果您在hdfs上存储了30gb的文本文件,那么使用默认的hdfs块大小设置(128mb),它将存储在235个块中,这意味着您从该文件读取的rdd将有235个分区。

相关问题