如果我有一个非常简单的Spark程序,那就是:
val rdd2 = sc.textFile("hdfs:///text.txt")
println(rdd.count)
当我使用纱线群集向YARN提交此火花程序时:
我的问题是,因为Hadoop中的数据分布在多台计算机上(假设上面示例中的text.txt分为3个块:
答案 0 :(得分:1)
好问题,但对于这个论坛来说可能太大了。
首先,您的假设通常是正确的,但时机不对。
- YARN ResourceManager将协商一个容器并启动Spark ApplicationMaster。
- 然后,ApplicationMaster将向ResourceManager注册并请求资源。
- 从ResourceManager获取资源规范后,ApplicationMaster将启动容器 NodeManager。
醇>
如果你正在使用sc
(SparkContext
),那么这已经发生了。如果添加或删除执行程序,可以使用ResourceManager进行其他工作,但SparkContext
仅在分配初始资源后才存在。
- 是否在具有text.txt块的每台计算机上启动了应用程序主服务器?
醇>
不,但是可以在任何有块的机器上启动工作程序或执行程序。或者,它们可以在一台机器上启动。 然而每个块都(可能)被工作者读取。在此HDFS案例中,工作人员可以从群集中的任何位置进行阅读。
- spark执行器是否已经安装在集群的每个节点上的软件,或者执行程序是否已实例化 进入由ApplicationMaster启动的容器 节点?
醇>
它可以安装在节点上,也可以在运行时提供给节点。 Spark执行器只是一个罐子。我已经看到它放入HDFS本身,或者作为本地资源放置在集群中的每台机器上。您可以将它放在工作人员可以访问的任何位置。