[大数据] Spark架构详解
Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势: 目录: 架构及生态: Spark与hadoop: 运行流程及特点: 构建Spark Application的运行环境,启动SparkContextSparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend,Executor向SparkContext申请TaskSparkContext将应用程序分发给ExecutorSparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行Task在Executor上运行,运行完释放所有资源 Spark运行特点: 每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行Task。这种Application隔离机制是有优势的,无论是从调度角度看(每个Driver调度他自己的任务),还是从运行角度看(来自不同Application的Task运行在不同JVM中),当然这样意味着Spark Application不能跨应用程序共享数据,除非将数据写入外部存储系统Spark与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个Rack里,因为Spark Application运行过程中SparkContext和Executor之间有大量的信息交换Task采用了数据本地性和推测执行的优化机制 常用术语: Standalon : spark原生的资源管理,由Master负责资源的分配Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架Hadoop Yarn: 主要是指Yarn中的ResourceManager Spark on Standalone模式为TaskSchedulerYARN-Client模式为YarnClientClusterSchedulerYARN-Cluster模式为YarnClusterScheduler Spark运行模式: standalone:独立集群运行模式 SparkContext连接到Master,向Master注册并申请资源(CPU Core 和Memory)Master根据SparkContext的资源申请要求和Worker心跳周期内报告的信息决定在哪个Worker上分配资源,然后在该Worker上获取资源,然后启动StandaloneExecutorBackend;StandaloneExecutorBackend向SparkContext注册;SparkContext将Applicaiton代码发送给StandaloneExecutorBackend;并且SparkContext解析Applicaiton代码,构建DAG图,并提交给DAG Scheduler分解成Stage(当碰到Action操作时大数据存储架构,就会催生Job;每个Job中含有1个或多个Stage,Stage一般在获取外部数据和shuffle之前产生),然后以Stage(或者称为TaskSet)提交给Task Scheduler,Task Scheduler负责将Task分配到相应的Worker,最后提交给StandaloneExecutorBackend执行;StandaloneExecutorBackend会建立Executor线程池,开始执行Task,并向SparkContext报告,直至Task完成所有Task完成后,SparkContext向Master注销,释放资源 yarn:(参考:) Spark Cluster模式: 第一个阶段是把Spark的Driver作为一个ApplicationMaster在YARN集群中先启动;第二个阶段是由ApplicationMaster创建应用程序,然后为它向ResourceManager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成 Spark Client 和 Spark Cluster的区别: 思考:我们在使用Spark提交job时使用的哪种模式? RDD运行流程: 创建RDD对象DAGScheduler模块介入运算,计算RDD之间的依赖关系,RDD之间的依赖关系就形成了DAG每一个Job被分为多个Stage。划分Stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个Stage,避免多个Stage之间的消息传递开销 (编辑:武汉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |