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上请求的操作所需的资源和网络连接。
你的问题与纱线上的火花展开有关,请参阅1:http://spark.apache.org/docs/latest/running-on-yarn.html“在YARN上运行火花”
假设你从spark-submit --master yarn
cmd开始:
- cmd将请求纱线资源管理器(RM)在您的一台集群计算机上启动ApplicationMaster(AM)进程(那些计算机上安装了纱线节点管理器)。
- AM启动后,它将调用驱动程序的主要方法。因此,驱动程序实际上是您定义火花上下文,rdd和作业的地方。驱动程序包含启动spark计算的entry main方法。
- spark上下文将为执行者准备RPC端点以进行对话,以及许多其他事情(内存存储,磁盘块管理器,jetty服务器......)
- AM将为容器运行你的spark执行器请求RM,并在执行程序的start cmd上指定驱动程序RPC url(类似spark:// CoarseGrainedScheduler @ ip:37444)。
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)时可以在集群的一个节点上运行。
客户端/集群的两个选项都有一些权衡
- 访问集群上一次节点的CPU /内存,这段时间很好,因为集群节点的内存很大。
- 驱动程序日志位于群集节点与提交作业的本地框之间。
- 您应该有群集模式的历史服务器其他明智的驱动程序端日志丢失。
- 有时很难安装依赖(即一些本机依赖)执行程序,并在客户端模式下运行spark应用程序来拯救。
如果您想了解有关Spark Job解剖学的更多信息,那么http://ashkrit.blogspot.com/2018/09/anatomy-of-apache-spark-job.html帖子可能会有用
以上是关于Apache火花中的Spark驱动程序的主要内容,如果未能解决你的问题,请参考以下文章