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

标签 hadoop cassandra hbase apache-spark

我正在尝试了解 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/

相关文章:

hadoop - Apache Flume 1.5 未在 Hadoop 2/自动故障转移集群配置中给出预期结果

cassandra - spark-cassandra-connector 性能 : executors seem to be idle

PIG 的 Python UDF 给出错误

amazon-web-services - 将 PIG 与 Hadoop 结合使用,我如何通过正则表达式匹配具有未知组数的部分文本?

hadoop - 使用 “Add File”部分时,Hortonworks Hue Oozie流作业失败(shell脚本)

hadoop - HDFS上的HBase更新操作

hadoop - 数据分析用什么

cassandra - 如何在cassandra表中添加多列?

performance - cassandra 数据库 - 获取大量数据

scala - 在scala Spark2中运行saveAsNewAPIHadoopDataset到hbase时出现空指针异常