当我做spark.textFile(“hdfs://...log.txt”)

时间:2016-06-20 07:02:48

标签: apache-spark

伙计我是Spark的新手,并学习了Spark的一些基本概念。虽然我现在已经对分区,阶段,任务,转换等概念有了一些了解,但我发现连接这些概念或点有点困难。

假设文件有4行(每行占用64MB,因此默认情况下它与每个分区的大小相同),我有一个主节点和4个从节点。

val input = spark.textFile("hdfs://...log.txt")
#whatever transformation here
val splitedLines = input.map(line => line.split(" "))
                    .map(words => (words(0), 1))
                    .reduceByKey{(a,b) => a + b}

我想知道主节点和从节点会发生什么?

这是我的理解,如果我错了,请纠正我。 当我启动上下文SparkContext时,每个worker根据这篇文章What is a task in Spark? How does the Spark worker execute the jar file?

启动一个执行者

然后应用程序将被推送到从属节点

4个从节点中的每一个都会从文件中读取一行吗?如果是这样,那意味着在每个从节点上都会生成一个RDD?然后将基于RDD生成DAG,并且将构建阶段并且还将识别任务。在这种情况下,每个从节点都有一个RDD和一个分区来保存RDD。

OR,主节点是读取整个文件并构建RDD,然后是DAG,然后是阶段,然后只将任务推送到从节点,然后从节点将只处理map,filter或reduceByKey等任务。但如果是这种情况,从节点将如何读取文件?文件或RDD如何在从属设备之间分配?

我正在寻找的是逐步理解流程并了解主节点或从节点上每个步骤的发生位置?

谢谢你的时间。 欢呼声

1 个答案:

答案 0 :(得分:0)

4个从节点中的每一个都会从文件中读取一行吗?

是的,由于文件被拆分,文件将并行读取。 (Tuneable属性#行读取)

文件或RDD如何在从属设备之间分配?

HDFS负责拆分,火花工人将负责阅读。

enter image description here

来源:此处https://github.com/jaceklaskowski/mastering-apache-spark-book