我刚刚开始使用Apache Spark。我正在使用集群模式(master,slave1,slave2),我想处理一个保存在Hadoop(hdfs)中的大文件。我正在使用SparkContext中的textFile方法;当文件正在处理时我监视节点,我可以看到只有slave2正在工作。处理完成后,slave2有任务但slave1没有任务。 如果不是使用hdfs我使用本地文件,那么两个从属服务器同时工作。 我不明白这种行为的原因。拜托,有人能给我一些线索吗?
答案 0 :(得分:2)
该行为的主要原因是数据位置的概念。当Spark的Application Master要求创建新的执行程序时,会尝试在数据所在的同一节点中分配它们。
即。在您的情况下,HDFS可能已在同一节点上写入文件的所有块。因此Spark将在该节点上实例化执行程序。相反,如果您使用本地文件,它将出现在所有节点中,因此数据位置将不再是问题。