首页 > 应用开发 > Java > spark中的一些看法
Application和Hadoop MapReduce中的类似,指用户编写的Spark应用程序。包含了一个driver program和集群中多个executor。
运行Application的main()函数并创建SparkContext。创建SparkContext是为了准备Spark应用程序的运行环境,SparkContext负责与Cluster Manager通信,进行资源的申请、任务的分配和监控等。当application运行完成后,Driver负责将SparkContext关闭。通常SparkContext代表Driver。
某Application运行在worker上的一个进程,该进程负责运行某些Task,并且负责将数据存在内存或者磁盘上。一个Application拥有着一批各自独立的Executor。在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutor Backend,类似于Hadoop MapReduce中的YarnChild。一个CoarseGrainedExecutor Backend进程有且只有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task。这样每个CoarseGrainedExecutor Backend弄并行运行Task的数量就取决于分配给他的cpu个数了。
在集群上获取资源的外部服务
- Standalone : Spark原生的资源管理。由master负责资源的分配
- Apache Mesos : 与Apache MapReduce兼容较好的资源调度
- Hadoop Yarn : Yarn中的ResourceManager
集群中任何可以运行Application代码的节点,类似与Yarn中NodeManager节点。在Standalone模式中,指的是在slaves中配置的节点;在Spark on Yarn模式中指的是NodeManger节点。
被送到某个Execuotr上的工作单元,与Hadoop MapReduce中的MapTask和ReduceTask概念一样,是运行application的基本单元。多个task组成一个stage,task的调度和管理由TaskScheduler负责
由多个task组成的并行计算,往往由action操作触发。一个application运行时,可能会产生多个job。
每个job会分成很多组task,作为一个TaskSet,就叫做Stage。Stage的划分和调度由下面的DAGScheduler负责。Stage有非最终的Stage(shuffle map stage)和最终的Stage(result stage)两种。Stage的边界就在shuffle的地方。
Resilient Distributed Datasets,弹性分布式数据集。Spark的基本计算单元,可以通过一系列算子进行操作(transfermation和action)。RDD是Spark的核心,它表示已被分区的、被序列化的、不可变的、有容错机制的,并且可以并行操作的数据集合。存储级别可以是内存或磁盘,在spark.storage.StroageLevel属性配置。
Spark提供两种共享变量
也叫ShuffleDependency,指多个子RDD的分片会依赖同一个父RDD分片或者说同一个父RDD的分片都有多个子RDD的分片使用。宽依赖需要计算好所有父RDD对应分区的数据,然后在节点节点之间进行shuffle。
也叫narrow dependency,指某个具体的RDD其分区partition a最多被子RDD中的一个分区parttition b依赖。
根据job构建基于stage的DAG,java培训并提交stage给taskScheduler。其划分stage的依据是RDD的依赖关系。
将task提交给worker运行。Executor运行的任务就是在此时进行分配的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29917475/viewspace-2120795/ ,如需转载,请注明出处,否则将追究法律责任。