Apache火花中的Spark驱动程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache火花中的Spark驱动程序相关的知识,希望对你有一定的参考价值。

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

答案

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图提交给主服务器。主服务器从中创建任务并将其提交给工作人员执行。它协调不同的工作阶段。
  • 工人是实际执行任务的地方。它们应具有执行RDD上请求的操作所需的资源和网络连接。
另一答案

你的问题与纱线上的火花展开有关,请参阅1http://spark.apache.org/docs/latest/running-on-yarn.html“在YARN上运行火花”

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

  1. cmd将请求纱线资源管理器(RM)在您的一台集群计算机上启动ApplicationMaster(AM)进程(那些计算机上安装了纱线节点管理器)。
  2. AM启动后,它将调用驱动程序的主要方法。因此,驱动程序实际上是您定义火花上下文,rdd和作业的地方。驱动程序包含启动spark计算的entry main方法。
  3. spark上下文将为执行者准备RPC端点以进行对话,以及许多其他事情(内存存储,磁盘块管理器,jetty服务器......)
  4. AM将为容器运行你的spark执行器请求RM,并在执行程序的start cmd上指定驱动程序RPC url(类似spark:// CoarseGrainedScheduler @ ip:37444)。

黄色框“Spark上下文”是驱动程序。 Yarn cluster mode

另一答案

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

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

另一答案

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

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

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

另一答案

如果设置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”更改端口

另一答案

Spark驱动程序是允许应用程序创建SparkContext的节点,sparkcontext是与计算资源的连接。现在,驱动程序可以运行它提交的框,或者在使用某些资源管理器(如YARN)时可以在集群的一个节点上运行。

客户端/集群的两个选项都有一些权衡

  1. 访问集群上一次节点的CPU /内存,这段时间很好,因为集群节点的内存很大。
  2. 驱动程序日志位于群集节点与提交作业的本地框之间。
  3. 您应该有群集模式的历史服务器其他明智的驱动程序端日志丢失。
  4. 有时很难安装依赖(即一些本机依赖)执行程序,并在客户端模式下运行spark应用程序来拯救。

如果您想了解有关Spark Job解剖学的更多信息,那么http://ashkrit.blogspot.com/2018/09/anatomy-of-apache-spark-job.html帖子可能会有用

以上是关于Apache火花中的Spark驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

使用部署模式群集的Apache Spark任务中的大调度程序延迟

Apache Spark和Livy集群

有没有办法修改此代码以让火花流从 json 中读取?

火花在UDF中创建数据框

火花避免收集尽可能

如何在火花中使用 Regexp_replace