Spark学习笔记:运行模式

Spark运行模式

理解Spark的运行模式,需要先了解Spark的程序架构
在这里插入图片描述

这是一个Master-Slave的架构,Driver(Master)生成分布式执行计划,把执行计划里的各个任务(Task)调度到Executor(Slave)执行,可以启动多个Executor,每个Executor可以运行多个Task。运行的时候是一个Driver,多个Executor。

Spark运行模式包括三种:

  • Local(本地模式)
    单机运行,将Spark应用以多线程方式,直接运行在本地,通常用于测试,不需要搭建hadoop集群。
    本地模式分为:
    1)Local:只启动一个Executor
    2)Local[K]:启动K个Executor
    3)Local[*]:启动跟cpu数目相同的Executor
  • Standalone(独立模式)
    独立运行在一个集群中,集群只支持运行Spark,不支持运行Mapreduce或其他运算
    在这里插入图片描述
  • YARN/mesos
    运行在YARN/mesos的资源管理器中,支持分布式运算
    Spark on YARN包括两种模式:yarn-client和yarn-clustered
    1)yarn-clien
    在这里插入图片描述客户端:是提交Spark程序的机器,客户端可以不在集群上,但是可以提交Spark作业到集群。Driver运行在本地客户端,调试方便,方便查看日志,但是容错不好,一旦Driver挂掉,程序就停止。Executor运行在NodeManager上。
    在这里插入图片描述这是四个节点的集群和三个客户端,Driver首先在集群上启动一个Application Master(1-3)。Application Master会为应用程序申请资源启动Executor(4-6),Executor启动后会和Driver通讯,领取任务。

2)yarn-clustered
在这里插入图片描述Driver运行在集群里,它运行在哪个节点是由Yarn调度的,如果查看日志会比较麻烦,但是容错会比较好,因为一旦Driver挂掉,Resource Manager会再分配一个NodeManager来运行Driver
一般使用本地模式和Yarn模式
生产环境一般用yarn-clustered

Wordcount实例

import org.apache.spark._ 
import SparkContext._

object WordCount {
	def main(args: Array[String]) { 
	if (args.length != 3 ){
		println("usage is org.test.WordCount <master> <input> <output>") 
		return
	}
	val sparkConf = new SparkConf().setAppName(”WordCount") //定义程序名称”WordCount"
	val sc = new SparkContext(sparkConf)
	val rowRdd= sc.textFile(args(1))  //可以在这里输入数据所在的目录,比如:hdfs://host:port/input/data
	val resultRdd = rowRdd.flatMap(line => line.split("\\s+")).map(word => (word, 1)).reduceByKey(_ + _)
	resultRdd.saveAsTextFile(args(2))//可以在这里输出数据所在的目录,比如:hdfs://host:port/output/data
	}
}

程序通过spark-submit命令提交,通过–master参数来指定运行模式。

猜你喜欢

转载自blog.csdn.net/fegang2002/article/details/85386263
今日推荐