hadoop – Spark是否使用数据本地化?

我正在试图了解Apache Spark的内部部件.我不知道Spark是如何使用一些机制来确保从InputFormat读取数据时,或者写入一个OutputFormat(或由Spark本来支持的其他格式,而不是派生自MapReduce).

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

在写作的情况下,这种机制如何运作?我知道在技术上,HDFS中的文件可以保存在任何节点本地并复制到其他两个(所以你使用网络中的3个副本中的两个),但如果你考虑写入其他系统,如NoSQL数据库Cassandra,HBase等),这样的系统有自己的方式分发数据.有没有办法告诉火花分割RDD的方法是根据输出接收器预期的数据分布(目标NoSQL数据库,本机或通过OutputFormat看到)优化数据位置的方式?

我指的是Spark节点和NoSQL节点居住在同一个phisical机器中的环境.

如果您在同一物理机上使用Spark和Cassandra,则应检查spark-cassandra-connector它将确保读取和写入的数据位置.

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

假设您的数据在Cassandra群集之间已经平衡.如果您的PartitionKey不正确,您将最终得到一个不平衡的群集.

还要注意Spark上的洗牌工作.例如,如果您在RDD上执行ReduceByKey,那么您最终将通过网络流式传输数据.所以,要经常计划这些工作.

翻译自:https://stackoverflow.com/questions/27638281/does-spark-use-data-locality

转载注明原文:hadoop – Spark是否使用数据本地化?