首页 文章

Apache火花中的Spark驱动程序

提问于
浏览
48

我已经拥有一个运行Hadoop 1.0.0的3台机器(ubuntu1,ubuntu2,ubuntu3,VM virtualbox)的集群 . 我在每台机器上安装了火花 . ub1是我的主节点,其他节点作为slave工作 . 我的问题是究竟什么是火花驱动器?我们应该通过 spark.driver.host 设置一个IP和端口来激活驱动程序以及它将被执行和定位的位置? (主人或奴隶)

5 回答

  • 1

    spark驱动程序是声明对RDD数据进行转换和操作的程序,并将此类请求提交给master .

    实际上,驱动程序是创建SparkContext的程序,连接到给定的Spark Master . 对于本地群集,就像你的情况一样, master_url=spark://<host>:<port>

    它的位置独立于主/从 . 您可以与主服务器共处一地,也可以从另一个节点运行它 . 唯一的要求是它必须位于可以从Spark Workers中寻址的网络中 .

    这是驱动程序的配置如下所示:

    val conf = new SparkConf()
          .setMaster("master_url") // this is where the master is specified
          .setAppName("SparkExamplesMinimal")
          .set("spark.local.ip","xx.xx.xx.xx") // helps when multiple network interfaces are present. The driver must be in the same network as the master and slaves
          .set("spark.driver.host","xx.xx.xx.xx") // same as above. This duality might disappear in a future version
    
    val sc = new spark.SparkContext(conf)
        // etc...
    

    更多地解释不同的角色:

    • 驱动程序准备上下文并使用RDD转换和操作声明对数据的操作 .

    • 驱动程序将序列化的RDD图提交给主站 . 主服务器从中创建任务并将其提交给工作人员执行 . 它协调不同的工作阶段 .

    • Worker 是实际执行任务的地方 . 它们应具有执行RDD上请求的操作所需的资源和网络连接 .

  • 1

    您的问题与纱线上的火花展开有关,请参阅1http://spark.apache.org/docs/latest/running-on-yarn.html "Running Spark on YARN"

    假设您从 spark-submit --master yarn cmd开始:

    • cmd将请求纱线资源管理器(RM)在您的一台集群计算机上启动ApplicationMaster(AM)进程(在其上安装了纱线节点管理器) .

    • AM启动后,它将调用驱动程序的主要方法 . 因此,驱动程序实际上是您定义火花上下文,rdd和作业的地方 . 驱动程序包含启动spark计算的entry main方法 .

    • spark上下文将为执行者准备RPC endpoints 以进行对话,以及许多其他事情(内存存储,磁盘块管理器,jetty服务器......)

    • AM将为容器运行你的spark Actuator 请求RM,并在执行程序的start cmd上指定驱动程序RPC url(类似spark:// CoarseGrainedScheduler @ ip:37444) .

    黄色框"Spark context"是驱动程序 .
    Yarn cluster mode

  • 5

    Spark驱动程序是创建和拥有SparkContext实例的过程 . 它是您的Spark应用程序,它启动创建SparkContext实例的main方法 . 它是作业和任务执行的驾驶舱(使用DAGScheduler和任务计划程序) . 它托管环境的Web UI

    它将Spark应用程序拆分为任务并安排它们在执行程序上运行 . 驱动程序是任务调度程序所在的位置,并在工作程序之间生成任务 . 驱动程序协调工作人员和任务的总体执行 .

  • 118

    简单来说,Spark驱动程序是一个包含main方法的程序(main方法是程序的起点) . 因此,在Java中,驱动程序将是包含public static void main(String args [])的Class .

    在群集中,您可以通过以下任一方式运行此程序:1)在任何远程主机中 . 在这里,您必须在将驱动程序提交到远程主机时提供远程主机的详细信息 . 驱动程序在远程计算机中创建的JVM进程中运行,并且只返回最终结果 .

    2)从您的客户端机器(您的笔记本电脑)本地 . 这里驱动程序在本地机器中创建的JVM进程中运行 . 从这里它将任务发送到远程主机并等待每个任务的结果 .

  • 6

    如果设置config "spark.deploy.mode = cluster",那么您的驱动程序将在您的工作主机(ubuntu2或ubuntu3)上启动 .
    如果spark.deploy.mode = driver(默认值),则驱动程序将在您提交应用程序的计算机上运行 .
    最后,您可以在Web UI上看到您的应用程序:http://driverhost:driver_ui_port,其中driver_ui_port默认为4040,您可以通过set config "spark.ui.port"更改端口

相关问题