我最初认为spark任务在计算之前读取整个hdfs块,但是我发现对于每个应用程序,executor读取hdfs的速度是不同的。根据原理,hdfs的下载速度应该是全网速度的上限,但实际情况并非如此。这取决于这项任务有多容易处理。
例如,我的网络上限是100mb/s,但是在logisticregression中,一个执行器(单核,意味着一次只能处理一个任务),hdfs下载速度只有30mb/s。当我在executor中添加内核的数量时,hdfs的下载速度将相应提高。
所以我认为,spark读取hdfs文件是否类似于流模型,在读取时计算。
1条答案
按热度按时间7eumitmz1#
namenode将从datanodes获取块位置并将它们返回给客户机,是的。然后客户机(在本例中是spark)将开始将它们作为流进行处理,并同时获取下一个块,假设文件是可拆分的。当任务进入完成阶段时,将根据应用程序逻辑对其结果进行操作。