RDD的分布式计算如何在Apache Spark中运行?

时间:2018-01-30 22:08:13

标签: hadoop apache-spark yarn

如果我有一个非常简单的Spark程序,那就是:

val rdd2 = sc.textFile("hdfs:///text.txt")
println(rdd.count)

当我使用纱线群集向YARN提交此火花程序时:

  1. YARN ResourceManager将协商一个容器并启动Spark ApplicationMaster。
  2. 然后,ApplicationMaster将向ResourceManager注册并请求资源。
  3. 资源规范是从ResourceManager获取的,ApplicationMaster将在NodeManager上启动容器。
  4. 我的问题是,因为Hadoop中的数据分布在多台计算机上(假设上面示例中的text.txt分为3个块:

    1. 是否在具有text.txt块的每台计算机上启动了应用程序主服务器?
    2. spark执行器是一个已经安装在集群的每个节点上的软件,还是执行器被实例化到由节点上的ApplicationMaster启动的容器中?

1 个答案:

答案 0 :(得分:1)

好问题,但对于这个论坛来说可能太大了。

首先,您的假设通常是正确的,但时机不对。

  
      
  1. YARN ResourceManager将协商一个容器并启动Spark ApplicationMaster。
  2.   
  3. 然后,ApplicationMaster将向ResourceManager注册并请求资源。
  4.   
  5. 从ResourceManager获取资源规范后,ApplicationMaster将启动容器   NodeManager。
  6.   

如果你正在使用scSparkContext),那么这已经发生了。如果添加或删除执行程序,可以使用ResourceManager进行其他工作,但SparkContext仅在分配初始资源后才存在。

  
      
  1. 是否在具有text.txt块的每台计算机上启动了应用程序主服务器?
  2.   

不,但是可以在任何有块的机器上启动工作程序或执行程序。或者,它们可以在一台机器上启动。 然而每个块都(可能)被工作者读取。在此HDFS案例中,工作人员可以从群集中的任何位置进行阅读。

  
      
  1. spark执行器是否已经安装在集群的每个节点上的软件,或者执行程序是否已实例化   进入由ApplicationMaster启动的容器   节点?
  2.   

它可以安装在节点上,也可以在运行时提供给节点。 Spark执行器只是一个罐子。我已经看到它放入HDFS本身,或者作为本地资源放置在集群中的每台机器上。您可以将它放在工作人员可以访问的任何位置。