我已经拥有一个运行Hadoop 1.0.0的3台机器(ubuntu1,ubuntu2,ubuntu3,VM virtualbox)的集群.我在每台机器上安装了火花.ub1是我的主节点,其他节点作为slave工作.我的问题是究竟什么是火花驱动器?我们应该设置一个IP和端口来激活驱动器spark.driver.host
以及它将被执行和定位的位置?(主人或奴隶)
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上请求的操作所需的资源和网络连接.
您的问题与纱线上的spark部署有关,请参阅 1:http://spark.apache.org/docs/latest/running-on-yarn.html"在YARN上运行Spark"
假设你从一个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上下文"是驱动程序.
Spark驱动程序是创建和拥有SparkContext实例的过程.它是您的Spark应用程序,它启动创建SparkContext实例的main方法.它是作业和任务执行的驾驶舱(使用DAGScheduler和任务计划程序).它托管环境的Web UI
它将Spark应用程序拆分为任务并安排它们在执行程序上运行.驱动程序是任务调度程序所在的位置,并在工作程序之间生成任务.驱动程序协调工作人员和任务的总体执行.