Spark调度架构原理详解
1.启动spark集群,就是执行sbin/start-all.sh,启动master和多个worker节点,master主要作为集群的管理和监控,worker节点主要担任运行各个application的任务。master节点需要让worker节点汇报自身状况,比如CPU,内存多大,这个过程都是通过心跳机制来完成的 2.master收到worker的汇报信息之后,会给予worker信息 3.driver提交任务给spark集群[driver和master之间的通信是通过AKKAactor来做的,也就是说master是akkaactor异步通信模型中的一个actor模型,driver也是一样,driver异步向mater发送注册信息(registerApplication)异步注册信息] 4.master节点对application预估,7个G的内存完成任务,对任务进行分配,每一个worker节点上都分配3.5G的内存去执行任务,在master就对各个worker上的任务进行整体的监控调度 5.worker节点领到任务,开始执行,在worker节点上启动相应的executor进程来执行,每个executor中都有一个线程池的概念,里面存有多个task线程 6.executor会从线程池中取出task去计算rddpatition中的数据,transformation操作,action操作 7.worker节点向driver节点汇报计算状态 通过本地并行化集合创建RDD public class JavaLocalSumApp{ public static void main(String[] args){ SparkConf conf = new SparkConf().setAppName("JavaLocalSumApp"); JavaSparkContext sc = new JavaSparkContext(conf); List<Integer> list = Arrays.asList(1,3,4,5,6,7,8); //通过本地并行化集合创建RDD JavaRDD <Integer> listRDD = sc.parallelize(list); //求和 Integer sum = listRDD.reduce(new Function2<Integer,Integer,Integer>(){ @Override public Integer call(Integer v1,Integer v2) throws Exception{ return v1+v2; } } ); System.out.println(sum) } } //java 中的函数式编程,需要将编译器设置成1.8 listRDD.reduce((v1,v2)=> v1+v2) Sparktransformation和action操作 RDD:弹性分布式数据集,是一种集合,支持多种来源,有容错机制,可以被缓存,支持并行操作,一个RDD代表一个分区里的数据集 RDD有两种操作算子: Transformation(转化):Transformation属于延迟计算,当一个RDD转换成另一个RDD时并没有立即进行转换,紧紧是记住了数据集的逻辑操作 Action(执行):触发Spark作业的运行,真正触发转换算子的计算 spark算子的作用 该图描述的是Spark在运行转换中通过算子对RDD进行转换,算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作。 输入:在Spark程序运行中,数据从外部数据空间(如分布式存储:textFile读取HDFS等,parallelize方法输入Scala集合或数据)输入Spark,数据进入Spark运行时数据空间,转化为Spark中的数据块,通过BlockManager进行管理 运行:在Spark数据输入形成RDD后便可以通过变换算子,如filter等。对数据进行操作并将RDD转换为新的RDD,通过Action算子,触发Spark提交作业,如果数据需要复用,可以通过Cache算子,将数据缓存到内存 输出:程序运行结束数据会输出Spark运行时空间,存储到分布式存储中(如saveAsTextFile输出到HDFS),或Scala数据或集合中(collect输出到Scala集合,count返回Scala int 型数据) Transformation 和 Actions操作概况 Transformation map(func):返回一个新的分布式数据集,由每个原元素经过func函数转换后组成 Actions操作 reduce(func): 通过函数func聚集数据集中的所有元素。Func函数接受2个参数,返回一个值。这个函数必须是关联性的,确保可以被正确的并发执行 WordCount执行过程 总结 以上就是本文关于Spark 调度架构原理详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |