笔记:Spark简介
Spark简介
[TOC]
Spark是什么
- Spark是基于内存计算的大数据并行计算框架
- Spark是MapReduce的替代方案
Spark与Hadoop
Spark是一个计算框架,而Hadoop中包含计算框架MapReduce和分布式文件系统HDFS,Hadoop更广泛地说还包括在其生态系统上的其他系统.
Spark的优势
中间结果输出
- 基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行储存和容错.当一些查询翻译到MapReduce任务是,往往会产生多个Stage,而这些串联的Stage又依赖于底层的文件系统来存储每一个Stage的输出结果.
- Spark将执行模型抽象为通用的有向无环图执行计划(Directed Acyclic Graph,DAG).这可以将多个Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS中.类似的引擎包括Dryad,Tez
数据格式和内存布局
Spark抽象出分布式内存储存结构弹性分布式数据集RDD,进行数据存储.RDD能支持粗粒度写操作,但对于读取操作,RDD可以精确到每条记录,这使得RDD可以用来作为分布式索引.
执行策略
MapReduce在数据Shuffle之前花费了大量的时间来排序,Spark任务在Shuffle中不是所有情景都需要排序.所以支持Hash的分布式聚合,调度中采用更为通用的任务执行计划图(DAG),每一轮次的输出结果在内存中缓存.
任务调度的开销
- 传统的MapReduce系统,如Hadoop,是为了运行常达数小时的批量作业而设计的
- Spark采用了事件驱动的类库AKKA来启动任务,通过线程池复用线程来避免进程或线程启动和切换开销
Spark能带来什么
打造全栈多计算范式的高效数据流水线
Spark支持复杂查询(SQL查询,流式计算,机器学习和图算法)
轻量级快速处理
- 这是由于Scala语言的简洁和丰富的表达力
- Spark充分利用和集成Hadoop等其他第三方组件
- Spark通过将中间结果缓存在内存减少磁盘I/O来达到性能的提升
易于使用,Spark支持多语言
- Spark支持通过Scala,Java,Python编写程序
- 同事允许在Shell中进行交互计算
- 用户可以利用Spark像书写单机程序一样编写分布式程序
与HDFS等存储层兼容
- Spark可以独立运行,除了可以运行在当下的YARN等集群管系统之外,它还可以读取已有的任何Hadoop数据
- 它可以运行在任何Hadoop数据源上,比如Hive,HBase,HDFS等
Spark的局限性
- RDD模型适合的是粗粒度的全局数据并行计算,不适合细粒度的,需要异步更新的计算
- 如果针对特定工作负载达到最优性能,还是需要使用一些其他的大数据系统
Spark生态系统BDAS
Spark
- Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map函数和reduce函数的计算模型,还提供了更为丰富的算子,如filter,join,groupByKey等.
- Spark将分布式数据集(RDD),实现了应用任务调度,RPC,序列化和压缩,并为运行在其上的上层组件提供API.
- 底层采用Scala这种函数式语言书写成
- 所提供的API深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口
- Spark将数据在分布式环境下分区,然后将作业转化为有向无环图(DAG),并分阶段进行DAG的调度和任务的分布式并行处理
Shark
- Shark是构建在Spark和Hive基础上的数据仓库
- Shark已经完成学术使命,终止开发,但其架构和原理仍具有借鉴意义
- 提供了能够查询Hive中所储存数据的一套SQL接口,兼容现有的Hive QL语法
- 熟悉Hive QL和SQL的用户可以基于Shark进行快速的Ad-Hoc,Reporting等类型的SQL查询
- Shark底层复用Hive的解析器,优化器以及元数据存储和序列化接口
- Shark将Hive QL编译转化为一组Spark任务,进行分布式运算
Spark SQL
- Spark SQL提供在大数据上的SQL查询功能
- Spark SQL使用Catalyst做查询解析和优化器,并在底层使用Spark作为执行引擎实现的SQL的Operator
- 用户可以在Spark上直接书写SQL
Spark Streaming
- Spark Streaming通过将流数据按指定时间片累积为RDD,然后将RDD进行批处理,进而实现大规模的流数据处理
GraphX
- GraphX基于BSP模型,在Spark之上,封装类似Pregel的接口,进而大规模同步全局的图计算
- 当用户进行多轮迭代时,基于Spark内存计算的优势尤为明显
Tachyon
- Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS
- 为了提供更高的性能,将数据存储剥离Java Heap
- 用户可以通过Tachyon实现RDD或者文件的跨应用共享,并提高容错机制,保证数据的可靠性
Mesos
- Mesos是一个资源管理框架
- 提供类似于YARN的功能
- 用户可以在其中插件式地运行Spark,MapReduce,Tez等计算框架任务
- Mesos对资源和任务进行隔离,并实现高效的资源任务调度
BlinkDB
- BlinkDB是一个用于在海量数据上进行交互式SQL的近似查询引擎
- 允许用户通过查询准确性和查询时间之间做出权衡,完成近似查询
- 核心思想:通过一个自适应优化框架,随着时间的推移,从原始数据建立并维护一组多维样本,通过一个动态样本选择策略,选择一个适当大小的示例,然后基于查询的准确性和响应时间满足用户查询需求
Spark架构
- Spark是整个BDAS的核心,各个组件通过Spark来实现对分布式并行任务处理的程序支持
Spark代码结构
| Spark Core | |
|---|---|
| 名称 | 说明 |
| scheduler | 文件夹中含有负责整体的Spark应用,任务调度的代码 |
| broadcast | 含有Broadcast(广播变量)的实现代码,API中是Java和Python API的实现 |
| deploy | 含有Spark部署与启动运行的代码 |
| common | 不是一个文件夹,而是代表Spark通用的类和逻辑实现 |
| metrics | 是运行时状态监控逻辑代码,Executor中含有Worker节点负责计算的逻辑代码 |
| partial | 含有近似评估代码 |
| network | 含有集群通信模块代码 |
| serializer | 含有存储模块的代码 |
| storage | 含有存储模块的代码 |
| ui | 含有监控界面的代码逻辑,其他的代码模块分别是对Spark生态系统中其他组件的实现 |
| 其他 | |
|---|---|
| 名称 | 说明 |
| streaming | Spark Streaming的实现代码 |
| YARN | Spark on YARN的部分实现代码 |
| praphx | 含有GraphX实现代码 |
| interpreter | 交互式Shell代码 |
| mllib | 代表MLlib算法实现的代码 |
| sql | 代表Sqark SQL的代码 |
Spark的架构
- Spark架构采用了分布式计算中的Master-Slave模型.Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点
- Master作为整个集群的控制器,负责整个集群的正常运行
- Worker相当于是计算节点,接受主节点命令与进行状态汇报
- Executer负责任务的执行
- Client作为用户的客户端,负责提交应用
- Driver负责控制一个应用的执行
- Spark集群部署后,需要在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制
- 在一个Spark应用的执行过程中,Driver和Worker是两个重要角色
- Driver程序是应用逻辑执行的起点,负责作业的调度,即执行Task任务的分发
- 多个Worker用来管理计算节点和创建Executor并行处理任务
- 在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机器,同时Executor对相应数据分区的任务进行处理
Spark架构中的基本组件
| 组件名 | 介绍 |
|---|---|
| ClusterManager | 在Standalone模式中即为Master(主节点),控制整个集群,监控Master.在YARN中为资源管理器 |
| Worker | 从节点,负责控制计算节点.启动Executor或Driver.在YARN模式中为NodeManager,负责计算节点的控制 |
| Driver | 运行Application的main()函数并创建SparkContext |
| Executor | 执行器,在worker node上执行任务的组件,用于启动线程池运行任务.每个Application拥有独立的一组Executors |
| SparkContext | 整个应用的上下文,控制应用的生命周期 |
| RDD | Spark的基本计算单元,一组RDD可形成执行的有向无环图RDD Graph |
| DAG Scheduler | 根据作业构建基于Stage的DAG,并提交Stage给TaskScheduler |
| TaskScheduler | 将任务分发给Executor执行 |
| SparkEnv | 线程级别的上下文,存储运行时的重要组件的引用 |
SparkEnv内创建并包含如下一些重要组件的引用
| SparkEnv内创建并包含的重要组件的引用 | |
|---|---|
| 组件 | 介绍 |
| MapOutPutTracker | 负责Shuffle元信息的存储 |
| BroadcastManager | 负责广播变量的控制与云信息的存储 |
| BlockManager | 负责存储管理,创建和查找块 |
| MetricsSystem | 监控运行时性能指标信息 |
| SparkConf | 负责存储配置信息 |
Spark的整体流程
- Client提交应用
- Master找到一个Worker启动Driver
- Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Grath
- DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler
- TaskScheduler提交任务给Executor执行
- 任务执行过程中,其他组件协同工作
Spark运行逻辑
- 在Spark应用中,整个执行流程在逻辑上会形成有向无环图.Action算子触发之后,将所有累积的算子形成一个有向无环图.
- Action算子触发之后,将所有累积的算子形成一个有向无环图,然后由调度器调度该图上的任务进行运算
- Spark根据RDD之间不同的依赖关系切分成不同的阶段,一个阶段包含一系列函数执行流水线
笔记:Spark简介的更多相关文章
- 二十三、Hadoop学记笔记————Spark简介与计算模型
spark优势在于基于内存计算,速度很快,计算的中间结果也缓存在内存,同时spark也支持streaming流运算和sql运算 Mesos是资源管理框架,作为资源管理和任务调度,类似Hadoop中的Y ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Python编程从入门到实践笔记——列表简介
Python编程从入门到实践笔记——列表简介 #coding=utf-8 #列表——我的理解等于C语言和Java中的数组 bicycles = ["trek","cann ...
- Data - Spark简介
Spark简介 Spark是基于内存计算的大数据并行计算框架,可用于构建大型的.低延迟的数据分析应用程序. HomePage:http://spark.apache.org/ GitHub:https ...
- Spark简介安装和简单例子
Spark简介安装和简单例子 Spark简介 Spark是一种快速.通用.可扩展的大数据分析引擎,目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark S ...
- Spark之 spark简介、生态圈详解
来源:http://www.cnblogs.com/shishanyuan/p/4700615.html 1.简介 1.1 Spark简介Spark是加州大学伯克利分校AMP实验室(Algorithm ...
- 《Java并发编程实战》读书笔记一 -- 简介
<Java并发编程实战>读书笔记一 -- 简介 并发的历史 并发的历史,也是人类利用有限的资源去提高生产效率的一个的例子. 设想现在有台计算机,这台计算机具有以下的资源: 单核CPU一个 ...
- spark 简介
spark 是基于内存计算的 大数据分布式计算框架,spark基于内存计算,提高了在大数据环境下处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将spark部署在大量廉价的硬件上,形成集群. 1 ...
随机推荐
- 更改CI框架默认访问路径及去掉index.php
下面是去掉index.php的操作 PHP CodeIgniter(CI)去掉 index.php - Langjun - 博客园 设置访问的默认路径是在
- Education Round16
A题:题意:给定国际象棋king的坐标,求能向几个方向移动分析:处理一下边界情况,其他的都是8 #include <iostream> #include <cstdio> #i ...
- Linux中cat、more、less、tail、head命令的区别
一.cat 显示文件连接文件内容的工具 cat 是一个文本文件(查看)和(连接)工具,通常与more搭配使用,与more不同的是cat可以合并文件.查看一个文件的内容,用cat比较简单,就是cat后面 ...
- iOS第三方常用类库
1.AFNetworking AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操作简单, 功能强大, 现在许多人 ...
- POJ 2373 Yogurt factory
简单DP. 这周所用的实际花费是上一周的花费+S与这周费用的较小值. #include<cstdio> #include<cstring> #include<cmath& ...
- JdbcTemplate的主要用法
JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...
- php传输大数据大文件时候php.ini相关设置
post_max_size which is directly related to the POST size---针对采用post上传的,大文件,此项为关键 upload_max_filesize ...
- CodeSmith生成实体类
1.新建一个模板,将以下代码复制进去,在属性工具栏里设置 SourceTtable和NameSpace , 点击生成即可 <%@ CodeTemplate Language="C#&q ...
- Object修改链表
以前学习过链表的时候由于类型的接收不同,每次要重写链表 下面修改可用链表 class Link{ private class Node{ private Object data ; private N ...
- 英文版Ubuntu安装配置搜狗拼音输入法
下载搜狗输入法 1 进入搜狗输入法官网,进入上面导航兰的 "输入法Linux版" 2 根据你安装的ubuntu是32位还是64位下载 END ubuntu安装搜狗输入法 1 进 ...