Spark核心概念

1、Application
     基于spark的用户程序,包含了一个Driver Program以及集群上中多个executor;
     spark中只要有一个sparkcontext就是一个application
    启动一个spark-shell也是一个application,因为在启动shark-shell时就内置了一个sc(SparkContext的实例);
 
2、Driver Program
     运行Application的main()函数并且创建SparkContext的程序。通常用SparkContext代表Driver Program;
 
3、Cluster Manager
     在集群上获取资源的外部服务。如:standalone、yarn、mesos;
  各种不同的集群的区别:只是任务调度的粗细粒度不同,对学习spark没有影响,自己在学习时使用standalone即可;
 
4、Worker Node
     集群中任何一个可以运行Application代码的节点
    可以在Worker Node启动Executor进程;
 
5、Executor
      在Worker Node上为某Application启动一个进程,该进程负责运行任务,并且负责将数据存在硬盘或者内存中;每个Application都有各自独立的executors
    比如:应用A在一个Node上启动Executor,B应用也在同一个Node上启动Executor,他们各自的Executor是相互隔离的,运行在不同的JVM上。不同的应用对应不同的Executor;
 
6、Job
    包含很多task的并行计算, spark中的一个action对应一个job,如:collect、count、saveAsTextFile;
     用户提交的Job会提交给DAGScheduler,Job会被分解成Stage(TaskSet) DAG
    RDD的transformation只会记录对元数据的操作(map/filter),而并不会真正执行,只有action触发时才会执行job;
 
7、Stage
     个Job会被拆分成多组任务,每组 任务 被称为一个Stage,可称为TaskSet
     一个stage的边界往往是从某个地方取数据开始(如:sc.readTextFile),在shuffle时(如:join、reduceByKey等)终止
    一个job的结束(如:count、saveAsTextFile等)往往也是一个stage的边界;
    有两种类型的Stage:shuffle和result;
 
8、Task
     被送到executor上的工作单元
    spark分为2类task:
    在Spark中有两类Task:shuffleMapTask和ResultTask,第一类Task的输出是shuffle所需数据,第二类task的输出是result;
  stage的划分也以此为依据,shuffle之前的所有变换是一个stage,shuffle之后的操作是另一个stage;
    比如:rdd.parallize(1 to 10).foreach(println)这个操作没有shuffle,直接就输出了,那么它的task就是resulttask,stage也只有一个;
    如果rdd.map((x,1)).reduceByKey(_+_).foreach(println),这个job因为有reduce,所以有个一shuffle过程,那么reduceByKey之前是一个stage,执行shuffleMapTask,输出shuffle所需要的数据,reduceByKey到最后是一个stage,直接就输出结果了。
    如果一个job中有多次shuffle,那么每个shuffle之前都是一个stage;
 
9、Partition
    partition类似hadoop的split,计算是以partition为单位进行的

 

RDD: Resilient Distributed Dataset

RDD的特点
1、A list of partitions  
    一系列的分片:比如说64M一片;类似于Hadoop中的split;
 
2、A function for computing each split
    在每个分片上都有一个函数去迭代/执行/计算它
 
3、A list of dependencies on other RDDs
    一系列的依赖:RDDa转换为RDDb,RDDb转换为RDDc,那么RDDc就依赖于RDDb,RDDb就依赖于RDDa
 
4、Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned) 
    对于key-value的RDD可指定一个partitioner,告诉它如何分片;常用的有hash,range
 
5、Optionally, a list of preferred location(s) to compute each split on (e.g. block locations for an HDFS file)
    要运行的计算/执行最好在哪(几)个机器上运行。数据本地性。
  为什么会有哪几个呢?
  比如:hadoop默认有三个位置,或者spark cache到内存是可能通过StorageLevel设置了多个副本,所以一个partition可能返回多个最佳位置。
 
前三个特点对应于Lineage,后两个对应于Optimized execution
 
对于如上的5个特点,对应于RDD中的5个方法
getPartitionsthe set of partitions in this RDD
computecompute a given partition
getDependenciesreturn how this RDD depends on parent RDDs
partitionerspecify how they are partitioned
getPreferredLocationsspecify placement preferences
 
 
 
 
 
 
 

HadoopRDDFiltered RDDJoinedRDD
partitionsHDFS上的block与父RDD一致一个partition一个任务
dependencies与父RDD 一对一依赖shuffle的每个父RDD
compute读取每个block的信息计算父RDD的每个分区并过滤读取shuffle数据      
partitionerHDFS block所在位置HashPartitioner
preferredLocations无(与父RDD一致)
 




 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值