Spark介绍

Spark

Spark 是什么?

Apache Spark?是用于大规模数据处理的快速和通用引擎.

速度:在内存中,运行程序比Hadoop MapReduce快100倍,在磁盘上则要快10倍.

Apache Spark具有支持非循环数据流和内存计算的高级DAG执行引擎.

易用:可以使用Java,Scala,Python,R快速编写程序.

Spark提供80+高级操作方法,可以轻松构建并行应用程序.

Spark提供了一堆库,包括SQL和DataFrame,MLlib,GraphX和Spark Streaming。您可以在相同的应用程序中无缝地组合这些库. Spark在Hadoop,Mesos,独立或云端运行。它可以访问各种数据源,包括HDFS,Cassandra,HBase和S3

一,RDD 弹性分布式数据集

定义, TA 容错的,并行的数据结构,存储到磁盘和内存,控制数据分区。本质上是一个只读的分区记录集合,RDD包含多个分区,每个分区是一个dataset片段.

依赖, RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,窄依赖;若多个Child RDD分区都可以依赖,宽依赖.

首先,窄依赖被划分到同一个stage,支持在同一个cluster node上以管道形式执行多条命令,eg,先map,紧接着filter.相反,宽依赖由于依赖的上游节点不止一个,往往跨界点传输数据.

其次从容灾角度讲,窄依赖的只需要执行父RDD的丢失分区的计算即可恢复.而宽依赖需要考虑恢复所有父RDD的丢失分区.

è¿éåå¾çæè¿° 本质, RDD是Spark中的抽象数据结构类型,从编程的角度来看,RDD可以简单看成是一个数组。和普通数组的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理。因此,Spark应用程序所做的无非是把需要处理的数据转换为RDD,然后对RDD进行一系列的变换和操作从而得到结果。本质是一个抽象类,如下:

abstract class RDD[T: ClassTag](@transient private var _sc: SparkContext,@transient private var deps: Seq[Dependency[_]]) extends Serializable with Logging {}
typefunctionuse
transformationmap()函数应用于RDD每一个元素,返回值是新的RDD
transformationflatMap()函数应用于RDD每一个元素,将元素数据进行拆分变成迭代器返回值是新的RDD
transformationfilter()过滤,返回值是新的RDD
transformationdistinct()去重,返回值是新的RDD
transformationunion()并集,返回值是新的RDD
transformationintersection()交集,返回值是新的RDD
transformationsubtract()原RDD里和参数RDD里相同的元素去掉
transformationcartesian()函数应用于RDD每一个元素,返回值是新的RDD
typefunctionuse
actioncollect()返回RDD所有元素
actioncount()RDD里元素个数
actioncountByValue()各元素在RDD中出现次数
actionreduce()并行整合所有RDD数据,例如求和操作
actionfold(0)(func)和reduce功能一样,不过fold带有初始值
actionaggregate(0)(seqOp,combop)和reduce功能一样,但是返回的RDD数据类型和原RDD不一样
actionforeach(func)对RDD每个元素都是使用特定函数

DAG 有向无环图

è¿éåå¾çæè¿°

容错处理

传统关系型数据库:采用日志记录容灾,数据恢复都依赖于重新执行日志中的SQL;

Hadoop:通过把数据备份到其他机器来容灾;

RDD:本身是一个不可变的数据集,当某个worker节点上的任务失败时,可以利用DAG重新调度计算这个失败的任务,由于不用复制数据,从而大大降低了网络通信.在流式计算场景中,Spark需要记录日志和检查点,以便利用checkpoint和日志对数据进行恢复;

二,Discretized Streams (DStreams)

DStream是一系列连续的RDD,是Spark Streaming提供的基本抽象如下图所示: 

这里写图片描述

对DStream应用的任何操作都将转换为底层RDD上的操作

这里写图片描述

三,Initializing StreamingContext

要初始化Spark Streaming程序,必须创建一个StreamingContext对象,它是所有Spark Streaming功能的主要入口.

SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);
JavaStreamingContext ssc = new JavaStreamingContext(conf, new Duration(1000));

 

四,Input DStreams and Receivers

Spark Streaming提供两类内置流式传输源:

基本数据源:StreamingContext API中直接提供的源.比如:文件系统和套接字连接.(file 和 socket) 高级源:Kafka,Flume,Kinesis等资源可以通过额外的实用类来获得.

Spark Streaming 提供两种接收器:

可靠的接收器 - 当数据已被接收并且通过复制存储在Spark中时,可靠的接收器正确地向可靠的源发送确认。 不可靠的接收器 - 不可靠的接收器不向源发送确认。这可以用于不支持确认的源,或者甚至当不需要或需要进入确认的复杂性时,用于可靠的源。

五,Transformations on DStreams

TransformationMeaning
map(func)通过func传递源DStream的每个元素,返回新的DStream
flatMap(func)与map类似,但每个输入项可以映射到0个或更多的输出项
filter(func)过滤
repartition(numPartitions)通过修改分区来更改DStream中的并发数
union(otherStream)求两个DStream的并集
count()计算源DStream的每个RDD中的元素数量,返回RDD的新DStream
reduce(func)使用函数func聚合源DStream的每个RDD中的元素来返回单个元素RDD的新DStream
countByValue()根据value计算key.
reduceByKey(func, [numTasks])根据Key进行特定的计算
join(otherStream, [numTasks])当(K,V)和(K,W)对的两个DStream被调用时,返回一个新的(K,(V,W))对的DStream与每个键的所有元素对
transform(func)通过对源DStream的每个RDD应用RDD到RDD函数来返回新的DStream。这可以用于对DStream进行任意RDD操作
updateStateByKey(func)返回一个新的“状态”DStream,其中每个key的状态通过在key的先前状态应用给定的功能和key的新值来更新。这可以用于维护每个key的任意状态数据

六,Output Operations on DStreams

Output OperationMeaning
print()打印10个元素,用于调试
saveAsTextFiles(prefix, [suffix])将此DStream的内容另存为文本文件。每个批处理间隔的文件名是根据前缀和后缀“prefix-TIME_IN_MS [.suffix]”生成的
saveAsObjectFiles(prefix, [suffix])将此DStream的内容保存为序列化Java对象的SequenceFiles。每个批处理间隔的文件名是根据前缀和后缀“prefix-TIME_IN_MS [.suffix]”生成的。
saveAsHadoopFiles(prefix, [suffix])将此DStream的内容另存为Hadoop文件。每个批处理间隔的文件名是根据前缀和后缀“prefix-TIME_IN_MS [.suffix]”生成的。
foreachRDD(func)对从流中生成的每个RDD应用函数func的最通用的输出运算符。此功能应将每个RDD中的数据推送到外部系统,例如将RDD保存到文件,或将其通过网络写入数据库

转载:https://www.2cto.com/net/201711/695363.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis之使用resultMap实现高级映射

MyBatis之使用resultMap实现高级映射 2017/09/30对于数据库中对表的增删改查操作,我们知道增删改都涉及的是单表,而只有查询操作既可以设计到单表操作又可以涉及到多表操作,所以对于输入映射parameterType而言是没有所谓的高级映射的&#xf…

MyBatis之查询缓存

MyBatis之查询缓存 2017/09/30正如大多数持久层框架一样,MyBatis同样也提供了对查询数据的缓存支持。今后我们要学习的SpringMVC框架属于系统控制层,它也有它的缓存区域,对响应的jsp页面进行缓存;Spring属于系统业务层&#xff0c…

MyBatis3.x和Spring3.x的整合

MyBatis3.x和Spring3.x的整合 2017/10/021.mybatis和spring整合的思路 1.让spring管理SqlSessionFactory 2.让spring管理mapper对象和dao 使用spring和mybatis整合开发mapper代理及原始dao接口。 自动开启事务,自动管理sqlsession 3.让spring管理数据源(即数据库连接…

特征选择

特征选择是特征工程中的重要问题(另一个重要的问题是特征提取),坊间常说:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程尤其是特征选择在机器学习中占有相当重要的…

交叉验证

sklearn中的交叉验证(Cross-Validation) sklearn是利用python进行机器学习中一个非常全面和好用的第三方库,用过的都说好。今天主要记录一下sklearn中关于交叉验证的各种用法,主要是对sklearn官方文档 Cross-validation: evaluati…

机器学习名词解释

1. 损失函数 损失函数是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。…

【转载保存】推荐ApacheCN开源的一个机器学习路线图

转载:https://mp.weixin.qq.com/s/EMWFFPsaKaGc8FO1g-htzg 推荐ApacheCN开源的一个机器学习路线图 原创: 机器学习初学者 机器学习初学者 今天 推荐一个ApacheCN开源的一个机器学习路线图: https://github.com/apachecn/AiLearning 注意…

CNN(Convolutional Neural Network) 的基础

卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受到生物思考方式启发的ML…

语音识别学习日志 2019-7-14 语音识别基础知识准备2 {EM算法与混合高斯模型(Gaussian mixture model, GMM)}

https://blog.csdn.net/lin_limin/article/details/81048411会对GMM和EM做详细介绍 本文参考: http://www.ituring.com.cn/article/497545(GMM模型) https://blog.csdn.net/xmu_jupiter/article/details/50889023(GMM模型) http://www.cnblogs.com/wjy-lulu/p/7…

【爬虫】爬取带有cookie才能获取网页内容的新闻网站

工作任务: 今天老大让我跑取一个新闻网站:https://www.yidaiyilu.gov.cn/ 采坑记录: https协议,如果利用http协议去请求会报出如下信息: 错误:SSLHandshake错误就知道了,客户端与服务端进行连…

语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}

Kmean算法 聚类算法 对于"监督学习"(supervised learning),其训练样本是带有标记信息的,并且监督学习的目的是:对带有标记的数据集进行模型学习,从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learni…

语音识别学习日志 2019-7-15 语音识别基础知识准备4 {Baun-Welch算法}

HMM 前向算法(Forward Algorithm)详细解释参考: http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3…

【转载保存】B+树索引原理以及应用案例

地址:https://www.jianshu.com/p/486a514b0ded 利用c/c实现基于b树小型关系型数据库:https://github.com/enpeizhao/duck_db 利用java实现的基于b树的数据库案例:https://github.com/liumengjun/BPlusTreeIndex 1.什么是索引? …

语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}

决策树算法(ID3、 C4.5、 CART) 决策树的定义 决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处,熵值为0。其具有可读性、分类速度快的优点,是一种有监督学习。 决策树呈…

语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}

HMM 维特比算法(Viterbi Algorithm)详细解释参考:http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-3 …

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…

【转载保存】修改IK分词器源码实现动态加载词典

链接:http://www.gongstring.com/portal/article/index/id/59.html 当前IKAnalyzer从发布最后一个版本后就一直没有再更新,使用过程中,经常遇到需要扩展词库以及动态更新字典表的问题,此处给出一种解决办法(注意&…

【转载保存】索引文件锁LockFactory

索引文件锁LockFactory LockFactory在Lucene中用来对索引文件所在的目录进行加锁,使得同一时间总是只有一个IndexWriter对象可以更改索引文件,即保证单进程内(single in-process)多个不同IndexWriter对象互斥更改(多线程持有相同引用的IndexW…

IndexOptions类说明

IndexOptions是在lucene-core-x.jar包下面,其作用是在新建索引时候选择索引属性。 IndexOptions是一个枚举类: 枚举变量说明: NONE不被索引DOCS_AND_FREQS文档和词频建立索引DOCS_AND_FREQS仅对文档和词频建立索引DOCS_AND_FREQS_AND_POSIT…

【转载保存】lucene正则查询使用注意

今天要分享的是关于lucene中另外一种丰富的查询方式----正则查询,lucene内置了许多的查询API,以及更强大的自定义查询方式的QueryParse,大部分情况下我们使用内置的查询API,基本上就可以满足我们的需求了,但是如果你想…