数据局部性如何与 IBM Bluemix 上的 OpenStack Swift 协同工作?

How does data locality work with OpenStack Swift on IBM Bluemix?

我目前正在使用 IBM Bluemix 中的 Apache Spark 服务。由于 IBM Cloud 依赖 OpenStack Swift 作为此服务的数据存储,我想知道该架构是否存在任何数据局部性(至少可能)。

如果我对 HDFS 的看法是正确的,SparkDriver 会向 HDFS namenode 询问包含文件各个块的数据节点,然后将工作安排给 SparkWorkers。

所以我检查了 Swift API 有一个 Range 参数,它允许 SparkWorker 至少只读取本地块,但是 SparkDriver 如何找到这些范围?

有什么想法吗?

这是计算和存储的分解。也就是说,spark 计算节点根本不与 swift 集群存储节点共享。这赋予计算与存储分离的可扩展性优势,反之亦然。但是在这个模型中,你不能有数据局部性......根据定义。那么这是如何工作的,粗略地说,每个 spark 执行器都可以从 swift 集群中拉出自己的对象块范围,这样每个执行器就不需要拉入所有对象数据,只需要自己操作部分;这将是低效的。但是这些块仍然是从远程 swift 集群中提取的,而不是本地的。这里唯一的问题是将块拉入每个执行程序需要多长时间,这样才不会减慢你的速度。对于 Bluemix Apache Spark 服务和 Bluemix 或 Softlayer 对象存储服务,它们之间的延迟低且网络速度快。

回复:"Since the IBM Cloud relies on OpenStack Swift as Data Storage for this service"。随着 beta 的进行,spark 服务将有其他数据源可用,因此不会 100% 依赖。