gpt4 book ai didi

hadoop - Spark 是否使用数据局部性?

转载 作者:可可西里 更新时间:2023-11-01 14:10:52 25 4
gpt4 key购买 nike

我正在尝试了解 Apache Spark 的内部结构。我想知道 Spark 是否使用某些机制来确保在从 InputFormat 读取或写入 OutputFormat(或 Spark native 支持但不是从 MapReduce 派生的其他格式)时的数据局部性。

在第一种情况(阅读)中,我的理解是,当使用 InputFormat 时,拆分与包含数据的主机(或主机??)相关联,因此 Spark 尝试将任务分配给执行程序以减少网络尽可能转移。

在写作的情况下,这种机制将如何运作?我知道从技术上讲,HDFS 中的文件可以保存在本地的任何节点中并复制到其他两个节点(因此您将网络用于 3 个副本中的两个),但是,如果您考虑写入其他系统,例如 NoSQL 数据库( Cassandra, HBase, others.. ),这些系统有自己的数据分布方式。有没有办法告诉 spark 根据输出接收器(目标 NoSQL 数据库, native 或通过 OutputFormat 查看)预期的数据分布以优化数据局部性的方式对 RDD 进行分区?

我指的是 Spark 节点和 NoSQL 节点位于同一物理机中的环境。

最佳答案

如果你在同一台物理机器上使用 Spark 和 Cassandra,你应该查看 spark-cassandra-connector它将确保读取和写入的数据局部性。

例如,如果您将 Cassandra 表加载到 RDD 中,连接器将始终尝试在每个节点上本地对该 RDD 执行操作。当您将 RDD 保存到 Cassandra 中时,连接器也会尝试将结果保存在本地。

这假设您的数据已经在您的 Cassandra 集群中保持平衡。如果您的 PartitionKey 没有正确完成,无论如何您最终都会得到一个不平衡的集群。

还要注意 Spark 上的改组作业。例如,如果您在 RDD 上执行 ReduceByKey,无论如何您最终都会通过网络流式传输数据。因此,请始终仔细规划这些工作。

关于hadoop - Spark 是否使用数据局部性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27638281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com