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...
5 回答
spark驱动程序是声明对RDD数据进行转换和操作的程序,并将此类请求提交给master .
实际上,驱动程序是创建SparkContext的程序,连接到给定的Spark Master . 对于本地群集,就像你的情况一样,
master_url=spark://<host>:<port>
它的位置独立于主/从 . 您可以与主服务器共处一地,也可以从另一个节点运行它 . 唯一的要求是它必须位于可以从Spark Workers中寻址的网络中 .
这是驱动程序的配置如下所示:
更多地解释不同的角色:
驱动程序准备上下文并使用RDD转换和操作声明对数据的操作 .
驱动程序将序列化的RDD图提交给主站 . 主服务器从中创建任务并将其提交给工作人员执行 . 它协调不同的工作阶段 .
Worker 是实际执行任务的地方 . 它们应具有执行RDD上请求的操作所需的资源和网络连接 .
您的问题与纱线上的火花展开有关,请参阅1:http://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"是驱动程序 .
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"更改端口