【发布时间】:2015-02-22 15:40:41
【问题描述】:
我正在尝试了解 Apache Spark 的内部结构。我想知道 Spark 在从 InputFormat 读取或写入 OutputFormat(或 Spark 原生支持且不是从 MapReduce 派生的其他格式)时是否使用某些机制来确保数据局部性。
在第一种情况下(阅读),我的理解是,在使用 InputFormat 时,拆分与包含数据的主机(或主机??)相关联,因此 Spark 尝试将任务分配给执行程序以减少网络尽可能转移。
在写作的情况下,这样的机制将如何运作?我知道从技术上讲,HDFS 中的文件可以保存在本地的任何节点中并复制到其他两个(因此您将网络用于 3 个副本中的两个),但是,如果您考虑写入其他系统,例如 NoSQL 数据库( Cassandra、HBase 等),这样的系统有自己的数据分发方式。有没有办法告诉 spark 根据输出接收器(目标 NoSQL 数据库,本机或通过 OutputFormat 看到的)预期数据分布优化数据局部性的方式对 RDD 进行分区?
我指的是 Spark 节点和 NoSQL 节点位于同一物理机中的环境。
【问题讨论】:
标签: hadoop cassandra hbase apache-spark