HDFS中数据以文件块的形式存储在DataNode上,
比如一个1GB的数据文件,会切分成多个128M的文件块,
数据写入存储的时候,每个128M文件块会存放在一个DataNode上,
同时通过机架感知,在最近的两个DataNode节点上分别存放2个副本文件。
ps:极限情况,如果128M文件块的个数超过DataNode的个数,会随机选出DataNode存放多余的文件块,但是一个128M文件块只存储在一个DataNode中,机架感知出最近的两个DataNode存放其副本。
这样spark在读取HDFS数据进行计算的时候,先通过hadoop获取每个文件块所在的DataNode节点位置,然后把每个文件块从各自所处节点的磁盘传输到各自所处节点的RAM中,这样每个节点的RAM中的128M文件块的数据,就构成spark的一个分区数据,交给executor的一个core去计算,每个节点在RAM中只计算该节点上文件块的数据,最后数据汇总生成最终数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)