Spark之 spark简介、生态圈详解
来源:http://www.cnblogs.com/shishanyuan/p/4700615.html
1、简介
1.1 Spark简介
Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了Spark SQL、Spark Streaming、MLLib和GraphX等组件,也就是BDAS(伯克利数据分析栈),这些组件逐渐形成大数据处理一站式解决平台。从各方面报道来看Spark抱负并非池鱼,而是希望替代Hadoop在大数据中的地位,成为大数据处理的主流标准,不过Spark还没有太多大项目的检验,离这个目标还有很大路要走。
Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala 提供一个称为 Actor 的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing 模型)。在Spark官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。
l运行速度快
Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。
l易用性好
Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。
l通用性强
Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架、SparkStreaming的实时处理应用、Spark SQL的即席查询、MLlib或MLbase的机器学习和GraphX的图处理,它们都是由AMP实验室提供,能够无缝的集成并提供一站式解决平台。
l随处运行
Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。
1.2 Spark与Hadoop差异
Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:
1.3 Spark的适用场景
1. 复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;
2. 基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间
3. 基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间
lSpark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小
l由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合
1.4 Spark演进时间表
l 2009年由Berkeley's AMPLab开始编写最初的源代码
l Hadoop最大的厂商Cloudera宣称加大Spark框架的投入来取代Mapreduce
l Apache Mahout放弃MapReduce,将使用Spark作为后续算子的计算平台
1.5 Spark成功案例
1.6 Spark术语
1.6.1 Spark运行模式
运行环境 |
模式 |
描述 |
Local |
本地模式 |
常用于本地开发测试,本地还分为local单线程和local-cluster多线程; |
Standalone |
集群模式 |
典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持 ZooKeeper来实现HA |
On yarn |
集群模式 |
运行在yarn资源管理器框架之上,由yarn负责资源管理,Spark负责任务调度和计算 |
On mesos |
集群模式 |
运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算 |
On cloud |
集群模式 |
比如AWS的EC2,使用这个模式能很方便的访问Amazon的S3; Spark支持多种分布式存储系统:HDFS和S3 |
1.6.2 Spark常用术语
术语 |
描述 |
Application |
Spark的应用程序,包含一个Driver program和若干Executor |
SparkContext |
Spark应用程序的入口,负责调度各个运算资源,协调各个Worker Node上的Executor |
Driver Program |
运行Application的main()函数并且创建SparkContext |
Executor |
是为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。 每个Application都会申请各自的Executor来处理任务 |
Cluster Manager |
在集群上获取资源的外部服务 (例如:Standalone、Mesos、Yarn) |
Worker Node |
集群中任何可以运行Application代码的节点,运行一个或多个Executor进程 |
Task |
运行在Executor上的工作单元 |
Job |
SparkContext提交的具体Action操作,常和Action对应 |
Stage |
每个Job会被拆分很多组task,每组任务被称为Stage,也称TaskSet |
RDD |
是Resilient distributed datasets的简称,中文为弹性分布式数据集;是Spark最核心的模块和类 |
DAGScheduler |
根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler |
TaskScheduler |
将Taskset提交给Worker node集群运行并返回结果 |
Transformations |
是Spark API的一种类型,Transformation返回值还是一个RDD, 所有的Transformation采用的都是懒策略,如果只是将Transformation提交是不会执行计算的 |
Action |
是Spark API的一种类型,Action返回值不是一个RDD,而是一个scala集合;计算只有在Action被提交的时候计算才被触发。 |
2、生态系统
2.1 Spark Core
前面介绍了Spark Core的基本情况,以下总结一下Spark内核架构:
l 提供了有向无环图(DAG)的分布式并行计算框架,并提供Cache机制来支持多次迭代计算或者数据共享,大大减少迭代计算之间读取数据局的开销,这对于需要进行多次迭代的数据挖掘和分析性能有很大提升
l 移动计算而非移动数据,RDD Partition可以就近读取分布式文件系统中的数据块到各个节点内存中进行计算
2.2 SparkStreaming
2.3 Spark SQL
l内嵌了Catalyst查询优化框架,在把SQL解析成逻辑执行计划之后,利用Catalyst包里的一些类和接口,执行了一些简单的执行计划优化,最后变成RDD的计算
l在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行Join操作。
为什么sparkSQL的性能会得到怎么大的提升呢?主要sparkSQL在下面几点做了优化:
1. 内存列存储(In-Memory Columnar Storage) sparkSQL的表数据在内存中存储不是采用原生态的JVM对象存储方式,而是采用内存列存储;
3. Scala代码优化 SparkSQL在使用Scala编写代码的时候,尽量避免低效的、容易GC的代码;尽管增加了编写代码的难度,但对于用户来说接口统一。
2.4 BlinkDB
l一个自适应优化框架,从原始数据随着时间的推移建立并维护一组多维样本;
l一个动态样本选择策略,选择一个适当大小的示例基于查询的准确性和(或)响应时间需求。
2.5 MLBase/MLlib
l ML Optimizer会选择它认为最适合的已经在内部实现好了的机器学习算法和相关参数,来处理用户输入的数据,并返回模型或别的帮助分析的结果;
l MLI 是一个进行特征抽取和高级ML编程抽象的算法实现的API或平台;
总的来说,MLBase的核心是他的优化器,把声明式的Task转化成复杂的学习计划,产出最优的模型和计算结果。与其他机器学习Weka和Mahout不同的是:
l MLBase是自动化的,Weka和Mahout都需要使用者具备机器学习技能,来选择自己想要的算法和参数来做处理;
2.6 GraphX
2.7 SparkR
SparkR是AMPLab发布的一个R开发包,使得R摆脱单机运行的命运,可以作为Spark的job运行在集群上,极大得扩展了R的数据处理能力。
l 提供了Spark中弹性分布式数据集(RDD)的API,用户可以在集群上通过R shell交互性的运行Spark job。
l 支持序化闭包功能,可以将用户定义函数中所引用到的变量自动序化发送到集群中其他的机器上。
l SparkR还可以很容易地调用R开发包,只需要在集群上执行操作前用includePackage读取R开发包就可以了,当然集群上要安装R开发包。
转载于:https://www.cnblogs.com/andy6/p/7652417.html
Spark之 spark简介、生态圈详解相关推荐
- Spark SQL原理及常用方法详解(二)
Spark SQL 一.Spark SQL基础知识 1.Spark SQL简介 (1)简单介绍 (2)Datasets & DataFrames (3)Spark SQL架构 (4)Spark ...
- spark on yarn 内存分配详解
spark on yarn 内存分配详解
- Spark: sortBy和sortByKey函数详解
在很多应用场景都需要对结果数据进行排序,Spark中有时也不例外.在Spark中存在两种对RDD进行排序的函数,分别是 sortBy和sortByKey函数.sortBy是对标准的RDD进行排序,它是 ...
- DeepLearning tutorial(1)Softmax回归原理简介+代码详解
FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...
- DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...
- DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解
FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...
- Spark 2.0的SparkSession详解
翻译自:How to use SparkSession in Apache Spark 2.0 转载自: - SparkSession简单介绍 (是否为原创初始翻译不详) - Spark 2.0系列之 ...
- Spark性能相关参数配置详解
随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化. 由于篇 ...
- Spark 性能相关参数配置详解-任务调度篇
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 随着Spark的逐渐成熟完善, ...
最新文章
- JQuery EasyUi之界面设计——前言与界面效果(一)
- 【Animations】使用缩放动画放大视图(7)
- python类的继承--------类的基础(四)
- 核试验计算机模拟,随着信息技术的发展,包括核试验在内的许多科学研究都可以用计算机模拟...
- C语言经典例67-数组最大值与最小值与数组元素交换
- wxWidgets:wxActivateEvent类用法
- opencv特征提取1-Harris角点检测
- ScaleForm十六戒言
- pytorch实战案例-手写数字分类-全链接模型——深度AI科普团队
- 開博客了, 因為搞Delphi 開發的關於Delphi學習
- MFC中App、Doc、MainFrame、View各指针的互相获取
- mysql binlog rotate_mysql binlog日志存储格式
- 1. jQuery 简介
- ISO 19011 《管理体系审核指南》
- 如何在Windows Server 2003下安装NetBEUI
- css相对单位和绝对单位
- 关于商业智能BI,你需要知道的相关知识都在这里了
- 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
- opengl随机地形生成
- 现代 React Web 开发实战——kanban实现卡片拖拽
热门文章
- js中计算中文长度方法
- 反射效果,自己公司内部编码,在text上输入内容后,通过输入内容查询数据库,弹出下拉框
- qt5中字符串转字符串数组_Qt中的对象类型转换(Qstring 转换char*有三种方法)
- 开发转测试好转吗_月薪15K+的高级测试开发工程师基础面试题,你要来试试吗?...
- php mysql xa_分布式事务之——MySQL对XA事务的支持
- springboot整合Druid使用
- 关于举办第十七届全国大学生智能汽车竞赛的通知-加盖公章
- 测试一些利用PYTHON完成中英文翻译的效果
- 智能车竞赛B车模车轮毂断裂原因所在
- 第十六届智能车竞赛 | 单车拉力组浅析