我有一个HDFS集群(比如说它有5个数据节点),如果我想设置一个Spark集群(比如说它有3个工作节点),要向HDFS集群读/写数据,我是否需要确保Spark工作节点与HDFS数据节点位于同一台计算机中吗? IMO他们可以是不同的机器。但是,如果Spark工作程序节点和HDFS数据节点是不同的机器,则从HDFS读取数据时,Spark工作程序节点需要从不同的机器下载数据,这可能导致更高的延迟。如果它们在同一台计算机上,则可以减少延迟。我的理解正确吗?
答案 0 :(得分:1)
在最初由MR假定的裸机设置中,数据本地性原则适用于您声明的状态,并且Spark将安装在所有数据节点上,这意味着它们也是工作节点。因此,Spark Worker驻留在数据节点上,以实现机架感知和HDFS的数据局部性。也就是说,还有其他存储管理器,例如现在的KUDU和其他不使用HDFS的NOSQL变体。
使用适用于Hadoop的云方法,您会发现存储和计算必然离婚,例如AWS EMR和EC2等。就计算的弹性而言,这是不可能的。不错,因为只要有可能获取到相关密钥的数据,Spark就会对相同的Worker进行洗牌。
因此,对于Cloud,问题实际上不再重要。对于裸机,Spark可以安装在不同的机器上,但没有意义。我将在所有HDFS节点上安装5个(而不是3个),据我所知。