我目前正在使用IBM Bluemix中的Apache Spark Service。由于IBM Cloud依赖OpenStack Swift作为此服务的数据存储,我想知道该架构是否存在任何数据位置(至少可能)。
如果我使用HDFS,SparkDriver会向HDFS namenode询问包含文件各个块的datanode,然后将工作安排到SparkWorkers。
所以我检查了Swift API有一个Range参数,它允许SparkWorker至少只读取本地块,但SparkDriver如何找出这些范围?
有什么想法吗?
答案 0 :(得分:3)
这是计算和存储的分解。也就是说,火花计算节点根本不与快速群集存储节点共享。这为与存储分开的计算的可扩展性带来了好处,反之亦然。但是在这个模型中,根据定义,你不能拥有数据局部性。因此,粗略地说,这是如何工作的,每个火花执行器都可以从快速集群中拉出自己的对象块范围,这样每个执行器都不需要拉入所有对象数据,只能在它自己的部分上运行;这将是低效的。但是仍然从远程swift集群中拉出块,然后不是本地的。这里唯一的问题是将块拉入每个执行器需要多长时间,这样就不会减慢你的速度。对于Bluemix Apache Spark服务和Bluemix或Softlayer对象存储服务,它们之间存在低延迟和快速网络。
re:"由于IBM Cloud依赖OpenStack Swift作为此服务的数据存储"。随着测试版的推进,spark服务将提供其他数据源,因此不会100%依赖。