Spark-如何在节点周围分配数据?

3 apache-spark

spark如何将数据分发给工人?

工作者是从数据源读取的,还是驱动程序是从数据源读取并将其发送给工作者的?当一个工作人员需要另一个工作人员中的数据时,他们是否可以直接通信?

谢谢!

Den*_*Huo 5

如果您使用诸如SparkContext.textFile之类的分布式输入法,则工作程序直接从您的数据源读取(或者,如果您从工作程序任务代码内部显式打开HDFS文件,那么这些当然也会在工作程序上发生)。

如果您在主驱动程序上手动读取数据,然后使用SparkContext.parallelize,那么实际上您的驱动程序将向您的工作人员发送数据。

工人与工人之间的数据依赖性通常被称为随机(shuffle) ; 在大多数情况下,这种类型的工人之间的通信是大多数大数据处理系统的核心,这恰恰是因为高效而可靠地进行操作很棘手。从概念上讲,您可以将它或多或少地视为“直接通信”,但根据如何处理数据依赖关系,幕后情况可能会很多。

  • 这是一个 [相关问题](http://stackoverflow.com/questions/28817940/recursively-fetch-file-contents-from-subdirectories-using-sc-textfile),它解释了 `sc.textFile` 如何委托给 Hadoop `文本输入格式`; `TextInputFormat` 执行 `listStatus` 以获取目录中具有相应大小的文件的完整列表,然后使用各种拆分大小配置设置将其拆分为所谓的“拆分”数组,这些文件只是文件名加上文件名中的字节范围。Spark 接受拆分并告诉工作人员获取拆分的子集。 (2认同)