什么是Spark
什么是Spark
Apache Spark是一个开源集群运算框架, 相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。Spark在存储器内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。Spark允许用户将数据加载至集群存储器,并多次对其进行查询,非常适合用于机器学习算法。
为什么需要Spark
在Spark 之前,我们已经有了Hadoop,Hadoop 作为大数据时代企业首选技术,方兴未艾,我们为什么还需要Spark 呢?
Hadoop 对某些工作并不是最优的选择:
中间输出到磁盘,会产生较高的延迟。
缺少对迭代运算的支持。
Spark项目构成要素
Spark核心和弹性分布式数据集(RDDs)
Spark核心是整个项目的基础,提供了分布式任务调度,调度和基本的I/O功能。而其基础的程序抽象则称为弹性分布式数据集(RDDs),是一个可以并型操作、有容错机制的数据集合。 RDDs可以通过引用外部存储系统的数据集创建(例如:共享文件系统、HDFS、HBase或其他 Hadoop 数据格式的数据源)。或者是通过在现有RDDs的转换而创建(比如:map、filter、reduce、join等等)。
RDD抽象化是经由一个以Scala, Java, Python的语言集成API所呈现,简化了编程复杂性,应用程序操纵RDDs的方法类似于操纵本地端的数据集合。
Spark SQL
Spark SQL在Spark核心上带出一种名为SchemaRDD的数据抽象化概念,提供结构化和半结构化数据相关的支持。Spark SQL提供了领域特定语言,可使用Scala、Java或Python来操纵SchemaRDDs。它还支持使用使用命令行界面和ODBC/JDBC服务器操作SQL语言。在Spark 1.3版本,SchemaRDD被重命名为DataFrame。
MLlib
MLlib是Spark上分布式机器学习框架。Spark分布式存储器式的架构比Hadoop磁盘式的Apache Mahout快上10倍,扩充性甚至比Vowpal Wabbit要好。 MLlib可使用许多常见的机器学习和统计算法,简化大规模机器学习时间,其中包括:
汇总统计、相关性、分层抽样、假设检定、随机数据生成
分类与回归:支持向量机、回归、线性回归、决策树、朴素贝叶斯
协同过滤:ALS
分群:k-平均算法
维度缩减:奇异值分解(SVD),主成分分析(PCA)
特征提取和转换:TF-IDF、Word2Vec、StandardScaler
最优化:随机梯度下降法(SGD)、L-BFGS
Spark是MapReduce的替代方案,而且兼容HDFS、Hive等分布式存储层,可融入Hadoop的生态系统,以弥补缺失MapReduce的不足
Spark相比Hadoop MapReduce的优势如下:
- 中间结果输出
基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而
这些串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。
Spark将执行模型抽象为通用的有向无环图执行计划(DAG),这可以将多Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS中。类似的引擎包括Dr yad、Tez。 - 数据格式和内存布局
Spark抽象出分布式内存存储结构弹性分布式数据集RDD,进行数据的存储。RDD能支持粗粒度写操作,但对于读取操作,RDD可以精确到每条记录,这使得RDD可以用来作为分布式索引
Spark的特性是能够控制数据在不同节点上的分区,用户可以自定义分区策略,如Hash分区等.Shark和Spark SQL在Spark的基础上实现了列存储和列存储压缩 - 执行策略
Spark任务在shuffle中不是所有情景都需要排序,所以支持基于Hash的分布式聚合,调度中采用更为通用的任务执行计划图(DAG),每一轮次的输出结果在内存缓存 - 任务调度的开销
传统的MapReduce系统,是为了运行长达数小时的批量作业而设计的,在某些极端的情况下,提交一个任务的延迟非常高
Spark采用了事件驱动的类库AKKA来启动任务,通过线程池复用线程来避免进程或线程启动和切换开销
Spark的"HelloWorld"
Spark 提出了一种分布式的数据抽象,称为 RDDs(resilient distributed datasets,弹性分布式数据集)
,是一个可并行处理且支持容错的数据集,同时,也是一个受限的数据集,RDDs
是一个只读的、记录分区的数据集,仅支持transformation
和action
两种操作,这些受限,使得RDDs
可以以较小的成本实现高容错性、可靠性。
RDDs有两种创建方式,一种是从外部数据源创建,另一种是从其它RDDs transform
而来。transformation
是对RDDs进行确定性的操作,输入是RDDs,输出RDDs。action 是向应用程序返回值或者将结果写到外部存储。
最后,transformation
具有 LAZY
的特点,当在RDDs上进行一次transformation
时,并不会立即执行,只会在进行action
时,前面的transformation
才会真正执行。这个特点,被 Spark 用来优化整个工作链路,可以有效减少网络沟通、传输时间(大数据处理过程中,网络传输可以说是最大的性能杀手),从而大幅提高运行速度。
举个例子,我们具有如下代码:
lines = spark.textFile("hdfs://...") // 第一行,读取外部数据源,生成一个RDDs;
errors = lines.filter(_.startsWith("ERROR")) // 第二行,在RDDs lines上做了一次transformation运算 filter,取出以”ERROR” 开头的所有行,得到一个新的RDDs errors;
errors.cache() // 第三行,缓存RDDs;
errors.count() // 第四行,在errors 上执行action,得到errors的行数。
整个过程中,只有在执行count()时,才会真正开始读取数据、过滤、缓存、计算行数。
上述整个过程,称为lineage,根据lineage,可以从具体的物理数据,计算出相应的结果。在Spark中,实现容错就是根据 lineage,当某个分区失败后,重新进行一次计算即可,而不是采用检查点、回滚等代价高昂的方式。同时,lineage 是Spark用来优化计算流程的依据。
可以参考此处
什么是Spark的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark RDD 核心总结
摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...
- spark处理大规模语料库统计词汇
最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- Spark踩坑记——初试
[TOC] Spark简介 整体认识 Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架.最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apach ...
- Spark读写Hbase的二种方式对比
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...
- (资源整理)带你入门Spark
一.Spark简介: 以下是百度百科对Spark的介绍: Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方 ...
- Spark的StandAlone模式原理和安装、Spark-on-YARN的理解
Spark是一个内存迭代式运算框架,通过RDD来描述数据从哪里来,数据用那个算子计算,计算完的数据保存到哪里,RDD之间的依赖关系.他只是一个运算框架,和storm一样只做运算,不做存储. Spark ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
随机推荐
- 霍金:AI或许能根除疾病和贫穷,但也可能摧毁人类 | GMIC 2017
在我的一生中,我见证了社会深刻的变化.其中最深刻的,同时也是对人类影响与日俱增的变化,是人工智能的崛起.简单来说,我认为强大的人工智能的崛起,要么是人类历史上最好的事,要么是最糟的.我不得不说,是好是 ...
- iOS-WebView(WKWebView)进度条
一直以来,就有想通过技术博客来记录总结下自己工作中碰到的问题的想法,这个想法拖了好久今天才开始着手写自己的第一篇技术博客,由于刚开始写,不免会出现不对的地方,希望各位看到的大牛多多指教.好了,不多说了 ...
- 常用模块 - shutil模块
一.简介 shutil – Utility functions for copying and archiving files and directory trees.(用于复制和存档文件和目录树的实 ...
- GoogleHacking相关技巧
转自https://www.cnblogs.com/anka9080/p/googlehack.html 0x 01 GoogleHack语法 Site 指定域名 Intext 正文中出现关键字的网页 ...
- multiprocessing中进程池,线程池的使用
multiprocessing 多进程基本使用 示例代码1 import time import random from multiprocessing import Process def run( ...
- 09JavaScript函数
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. 实例1: <!DOCTYPE html> <html> <head> <meta charset ...
- 原生JS实现移动端的轮播效果
首先 我们想实现的效果是在手指按下拖动的时候图片能够跟随移动(无动画效果)然后松开手指后判断图片移动的位置 和某一个值进行比较 在这里我们默认定为盒子的1/3宽度 当x轴的移动位置大于1/3的时候图片 ...
- FileBeats安装
FileBeats安装 FileBeats官方下载链接: https://www.elastic.co/downloads/beats/filebeat 也可以直接使用以下命令下载(文章下载目录一概为 ...
- QWT编译与配置-Windows/Linux环境
QWT编译与配置-Windows/Linux环境 QWT和FFTW两种开源组件是常用的工程软件支持组件,QWT可以提供丰富的绘图组件功能,FFTW是优秀数字波形分析软件.本文使用基于LGPL版权协议的 ...
- python三大器之while,if,for循环
一.for循环(遍历循环) 在Python你可能要经常遍历列表的所有元素,对每个元素执行相同的操作;对于包含数字的列表,可能要对每个元素进行相同的计算;在网站中,可能需要显示文章中的每个标题等等.某一 ...