Spark(二) -- Spark简单介绍
spark是什么?
spark开源的类Hadoop MapReduce的通用的并行计算框架
spark基于map reduce算法实现的分布式计算
拥有Hadoop MapReduce所具有的优点
但不同于MapReduce的是Job中间输出和结果可以保存在内存中
从而不再需要读写HDFS
从上面的官方解释中我们可以得到的信息时,spark是一套并行计算的框架,并且性能要比hadoop的map-reduce好
那么到底性能比较好是体现在哪里呢
基于内存的处理是spark速度快的原因之一
还有一个很重要的因素就是DAG
DAG,有向无循环图
spark的任务可以分为数据转换和获得结果两步
在获得计算结果之前的操作,都是不执行的,而是根据这些步骤画成一张DAG
到真正要结果的时候才会执行这些计算,拿到计算结果
熟悉hadoop mr模型的人都知道,在mr任务中,每次步骤都会读取HDFS,也就是I/O操作,而一般来说,在数据转换操作过程中产生的中间数据我们是不需要保存在磁盘的(当然这么做的原因也有容错性的因素)
和spark一对比,mr的速度当然被爆10086条大街
另外一个原因就是spark的容错处理机制,在hadoop中一旦某个执行步骤出现问题,那么之前的所有操作都要重新计算。在spark中则只要重新执行出错的步骤即可
简单来说,可以将spark看成是一个开发分布式并行计算程序的SDK,通过spark生态圈提供的各种API来进行开发
spark生态圈大致如下图:
从图中左下角可以看出,spark既可以直接对hadoop的hdfs进行操作,也能在Amazon的S3上运行
spark和hadoop的关系其实是十分紧密的,它可以在hadoop中和传统的mr任务并存,共享数据信息等
一句话概括spark生态圈的组件
SparkStreaming:一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kdfka、Flume、Twitter、 Zero和TCP 套接字)进行类似map、reduce、join、window等复杂操作
SharkSQL:可以将hive的sql语句在spark上执行
BlinkDB:一个在速度和精度上做抉择的交互式查询系统,用户查询的时候可以选择查询的速度或者精度,二者选一
MLbase/MLlib:MLlib是Spark实现一些常见的机器学习算法和实用程序,包括分类,回归,聚类,协同过滤,降维,以及底层优化。
GraphX:基于Spark的图处理和图并行计算API
spark生态圈的各个组件计算都是以一种名为RDD的数据结构为基础的
首先RDD是一种数据结构,根据不同的使用场景,如实时流处理或者批处理都会生成不同的RDD模型
但是各种RDD模型之间都有互相转换的方式,也就是说,spark各个组件之间处理的数据都可以很方便的进行交流互换
RDD将各个组件融合在spark平台上(不同的组件提供不同的功能,根据需求组合组件处理问题)使得spark能够适用于各种大数据场合
spark RDD之间存在着明确的依赖关系,一旦某个环节发生错误,可以根据这种依赖找到错误的父节点来进行重新操作,所以spark在容错性方面十分强大
Spark生态圈以Spark为核心、以RDD为基础,打造了一个基于内存计算的大数据平台,为人们提供了all-in-one的数据处理方案。人们可以 根据不同的场景使用spark生态圈的多个产品来解决应用,而不是使用多个隔离的系统来满足场景需求。
众所周知,在大数据的实时流处理方面storm一直是一个热点,那么和spark的streaming相比如何呢?
storm的亮点在与处理延迟是毫秒级别的,而吞吐量不高
spark streaming则是高吞吐量,处理延迟是秒级的
两者可以使一种互补的关系
上面说过spark任务的容错处理
那么如果spark集群中有节点罢工了怎么办?
如果是master主节点挂了怎么办?
对于第一个问题,如果有slave node在工作环境中当掉了,master对起一个新的节点来进行同样的工作,哪个节点先完成任务就采用哪个节点,那么master是如何知道slave node的状态呢?–心跳机制,相信熟悉hadoop的人对心跳机制不会陌生
至于第二个问题,很多人都会想到HA,其实很简单,zookeeper
zookeeper框架可以保证master节点的安全容错性,并且可以同步数据
现在大家知道spark是基于内存来进行计算的,但是在spark集群中,一个集群一起执行一个任务,那么这个集群之间每台机器是如何共享内存的??–Tachyon可以做到这一点
一、Spark是什么
1、与Hadoop的关系
如今Hadoop已经不能狭义地称它为软件了,Hadoop广泛的说可以是一套完整的生态系统,可以包括HDFS、Map-Reduce、HBASE、HIVE等等。。
而Spark是一个计算框架,注意,是计算框架
其可以运行在Hadoop之上,绝大部分情况下是基于HDFS
说代替Hadoop其实是代替Hadoop中的Map-Reduce,用来解决Map-Reduce带来的一些问题
更具体地讲,Spark是基于内存的 大数据并行计算框架,可以完美的融入到Hadoop的生态系统中去
而既然是分布式框架必须要解决的两个问题:
1、可扩展性
2、容错性
Spark是如何解决这两个问题待之后整理发布
2、相对于Map-Reduce的迭代模型,Spark的计算模型有何优缺点?
优势:
(1)基于内存,计算速度快
迭代过程中,通过RDD算子生产DAG图的方式,无须将中间数据写入磁盘中
(2)DAG图的执行策略
只有Action操作才会触发执行Job,记录了每个Job的执行流程,形成Lineage和划分Stage等
(3)使用AKKA作为事件驱动来调度任务,开销小
(4)全栈支持
缺陷:
(1)机器配置要求比Map-Reduce高
(2)牺牲硬件提高性能
3、Spark能带来什么?
(1)全栈多计算范式,不仅仅只是简单的Map-Reduce操作,SQL查询、流计算、机器学习、图算法
这里有你想要的一切~
(2)轻量级快速处理:基于内存
(3)支持多语言,丰富的算子,允许在Shell中进行交互式计算,像书写单机程序一样书写分布式程序(这就是Spark诞生的目的)
(4)与HDFS等存储层兼容,可以独立运行,可以运行与Yarn等集群管理系统,可以读取和使用任何Hadoop数据
没天理了~
二、Spark生态系统BDAS(数据分析栈)
Spark也可以脱离Hadoop而存在,它也有自己的生态系统
主要的组件如下列表:
1、核心框架为Spark
提供分布式编程框架
提供除了MR之外的丰富算子以及计算模型
将分布式数据抽象为弹性分布式数据集(RDD)
2、结构化数据SQL查询和分析引擎Spark SQL
可直接执行SQL语句
可执行Spark SQL提供的丰富的API
基于RDD操作
3、分布式机器学习库Mllib
4、并行图计算框架GraphX
5、流计算框架Spark Streaming
将实时数据按照指定时间片划分为流数据
6、近似计算查询引擎BlinkDB
交互式SQL的近似查询
允许用户在查询精确度和查询响应时间之间做出权衡
7、内存分布式文件系统Tachyon
内存中的HDFS
8、资源管理框架Mesos
提供类似Yarn的功能
9、1.4新特性SparkR
三、Spark构架
1、构架组成
Spark集群中一些核心概念:
(1)Master
集群中含有Master进程的节点
负责集群的协作和管理
本身不参与计算任务
在Yarn上运行时表现为ResourceManager
(2)Slaves
集群中含有Worker进程的节点
接受Master命令和进行状态汇报
Worker本身并不是处理计算任务的
在Yarn上运行时表现为NodeManager
(3)Driver
负责控制Client提交的任务的执行
执行程序的main函数并创建SparkContext
分发Task到具体的Worker上的Executor
分发任务执行所需要的file和jar包(序列化后)给Worker节点
(4)SparkContext:整个应用的上下文,控制应用的生命周期
RDD:基本计算单元,提供丰富的算子,一组RDD可执行成DAG图
DAGScheduler:输入DAG图,根据RDD之间的依赖关系划分为Stages输出
TaskScheduler:输入Stages,将其划分为更小的Task分发给具体的Executor执行
SparkEnv:存储运行时的重要组件的引用,包括:
=>MapOutPutTracker:负责Shuffle元信息的存储
=>Broadcastmanager:负责广播变量的控制与元信息的存储
=>BlockManager:负责存储管理、创建和查找块
=>MetricsSystem:监控运行时性能指标信息
=> SparkConf:负责存储配置信息
(5)Client
用户提交任务的工具
2、Spark执行任务流程(简略版)
(1)Client提交应用
(2)Master找到Worker并启动Driver
(3)Driver向Master申请资源
(4)操作RDD形成DAG图交给DAGScheduler
(5)DAGScheduler将DAG图划分为Stages输出给TaskScheduler
(6)TaskScheduler划分Task分发给Worker节点上的Executor执行
四、 Spark分布式构架与单核构架的异同
基本概念:
(1)Spark是分布式计算框架
(2)在上面可以编写分布式程序和软件
编写分布式程序需要注意的点:
内存和磁盘共享问题
Spark(二) -- Spark简单介绍的更多相关文章
- Spark Streaming的简单介绍
本文讲解Spark流数据处理之Spark Streaming.本文的写作时值Spark 1.6.2发布之际,Spark 2.0预览版也已发布,Spark发展如此迅速,请随时关注Spark Stream ...
- 深入浅出JMS(二)--ActiveMQ简单介绍以及安装
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...
- salesforce lightning零基础学习(一) lightning简单介绍以及org开启lightning
lightning对于开发salesforce人员来说并不陌生,即使没有做过lightning开发,这个名字肯定也是耳熟能详.原来的博客基本都是基于classic基于配置以及开发,后期博客会以ligh ...
- openfire spark 二次 开发 服务插件
==================== 废话 begin ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即 ...
- 1. Spark的安装及介绍
*以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第一部分是记录如何安装Spark?同时,简单介绍下Spark. 一.Spark安装 二.Spark介绍 一.Spark安装 如 ...
- 关于spark的一些简单认识。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ . 网站上有对应每 ...
- Spark记录-spark介绍
Apache Spark是一个集群计算设计的快速计算.它是建立在Hadoop MapReduce之上,它扩展了 MapReduce 模式,有效地使用更多类型的计算,其中包括交互式查询和流处理.这是一个 ...
- Spark安装和简单示例
spark的安装 先到官网下载安装包 注意第二项要选择和自己hadoop版本相匹配的spark版本,然后在第4项点击下载.若无图形界面,可用windows系统下载完成后传送到centos中. 本例中安 ...
- spark教程(13)-shuffle介绍
shuffle 简介 shuffle 描述了数据从 map task 输出到 reduce task 输入的过程,shuffle 是连接 map 和 reduce 的桥梁: shuffle 性能的高低 ...
- spark单机模式简单搭建
待安装列表hadoophivescalaspark一.环境变量配置:~/.bash_profilePATH=$PATH:$HOME/bin export PATH JAVA_HOME=/usr/loc ...
随机推荐
- Launcher3自定义壁纸旋转后拉伸无法恢复
MTK8382/8121平台. 描述:将自定义图片设置成壁纸后,横屏显示时,旋转为竖屏,图片由于分辨率过小,会拉伸:再旋转为横屏,拉伸不恢复. 这两天正在解这个问题,研究了很久,走了不少弯路,最后发现 ...
- Python垃圾回收机制:gc模块(zz)
在Python中,为了解决内存泄露问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收. 由于Python 有了自动垃圾回收功能,就造成了不少初学者误认为不必再受内存泄漏的骚扰了.但如果仔细查看一 ...
- node.js的全局变量的注意
在node.js中,如果一个变量没有用var来声明,就会变为全局变量: 看如下代码: 1)6.js function myadd(a) { return a+abc; } function conta ...
- rabbitmq安装-Erlang
安装Erlang Install Erlang from the Erlang Solutions repository or Follow the instructions under " ...
- hdu 5748(LIS)
Bellovin Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- DockerFile的编写和注意的一些知识点
CMD,RUN,ENTRYPOINT之类的差别. VOLUMN和-V之间的差别. EXPOSE和-P的对应等. 今天上午写了一个脚本,可以传参数进IMAGE,让启动的CONTAINER具有不同的行为. ...
- Yii2中如何访问controller的二级目录下的控制器
Yii2默认的控制器下只有一层目录放在controller目录下,当开发的需要的时候需要在该目录下面新增一层目录也就是在controller下增加二级目录,比如controller/api/Membe ...
- HDU 1495 非常可乐【BFS/倒水问题】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- CF984 C. Finite or not?【数论/GCD】
[链接]:CF [题意]:n组样例,对于每组样例,给你三个数p q b,问你p/q在b进制下是不是一个有限小数,是的话输出Finite,否则输出Infinite. [分析]:b的过程是对q约分,那么只 ...
- 如何破解Webstorm 2016.2
嗯,随着Webstorm2016.2的推出,网上的很多破解方法已经不能用了,不过功夫不负有心人,我终于查到了新的方法, 选择“license server” 输入:http://114.215.133 ...