Spark任务在计算之前是否读取了整个HDFS块?

Is Spark task read entire HDFS block before computing?

本来以为Spark任务是先读取整个HDFS块再计算,结果发现每个应用程序执行器读取HDFS的速度都不一样。按照原理,HDFS的下载速度应该是全网速的上限,但实际情况并非如此。这取决于这项任务的难易程度。

比如我的网络上限是100MB/S,但是在LogisticRegression中,一个executor(单核,就是一次只能处理一个任务),HDFS下载速度只有30MB/S。当我增加executor的核数后,HDFS的下载速度会相应提高。

所以我认为,Spark读取HDFS文件是否类似于流模型,边读边计算。

Namenode 将从数据节点获取块位置,然后 return 将它们发送给客户端,是的。然后客户端(在本例中为 Spark)将开始将它们作为流处理,并同时获取下一个块,假设文件是​​可拆分的。当任务进入完成状态时,将根据您的应用程序逻辑对其结果进行操作。