大数据(Spark-基本概念)

Spark简介

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。目前已经造成一个高速发展应用普遍
的生态系统。html

Apache Spark特性:
1,快速
        大多数操做均在内存中迭代,只有少部分函数须要落地到磁盘。
2,易用性
        支持scala、Java、Python、R等语言;提供超过80个算子,API使用及其方便。
3,通用性
        Spark提供了针对数据处理的一站式解决方案,计算时用Spark Core算子(替代Hadoop Map/Reduce)
        ,批处理时用Spark SQL(替代HiveSQL),实时计算用Spark Streaming(替代Stom),机器学习用
        Spark MLlib(替代Mahout);另外,经过Spark GraphX进行图计算。
4,跨平台
        Spark可使用Local模式,Standalone模式,Cluster模式运行。
        Local模式:在本地运行调试,支持断点,能够指定并行线程数。
        Standalone模式:Spark管理资源,有Master和Worker,至关于ResourceManager和NodeManager。
        Cluster模式:分布式模式,用于生产环境。资源管理器使用Yarn或者Mesos。
 express

Spark的适用场景
目前大数据处理场景有如下几个类型:
复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,一般的时间多是在数十分钟到数小时;
基于历史数据的交互式查询(Interactive Query),一般的时间在数十秒到数十分钟之间
基于实时数据流的数据处理(Streaming Data Processing),一般在数百毫秒到数秒之间编程

Spark成功案例 
目前大数据在互联网公司主要应用在金融、广告、报表、推荐系统等业务上。在广告业务方面须要大数据作应用分析、效果分析、定向优化等,在推荐系统方面则须要大数据优化相关排名、个性化推荐以及热点点击分析等。这些应用场景的广泛特色是计算量大、效率要求高。 腾讯 / 小米 / 淘宝 / 优酷土豆数组

 

Hadoop Map/Reduce与Spark

 

Spark的发展历史

Spark的版本发展

 

Scala与函数式编程

Scala介绍
        Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各类特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。安全

特性
1,面向对象
        Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特质(trait)描述。
2,函数式编程
        Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,容许嵌套多层函 数,并支持柯里化。Scala的case class及其内置的模式匹配至关于函数式编程语言中经常使用的代数类型。
3,静态类型
        Scala具有类型系统,经过编译时检查,保证代码的安全性和一致性。
4,并发性
       Scala使用Actor做为其并发模型,Actor是相似线程的实体,经过邮箱发收消息。Actor能够复用线程,所以能够在程序中可使用数百万个Actor,而线程只能建立数千个。在2.10以后的版本中,使用Akka做为其默认Actor实现。闭包

函数式编程
        函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),并且λ演算的函数能够接受函数看成输入(参数)和输出(返回值)。
特性
1,函数是第一等公民
        函数编程支持函数做为第一类对象,有时称为闭包或者仿函数(functor)对象。
2,惰性计算
        在惰性计算中,表达式不是在绑定到变量时当即计算,而是在求值程序须要产生表达式的值时进行计算。延迟的计算使您能够编写可能潜在地生成无穷输出的函数。
3,支用表达式不用语句
       "表达式"(expression)是一个单纯的运算过程,老是有返回值;"语句"(statement)是执行某种操做,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,并且都有返回值。
sc.thriftParquetFile(fileStr, classOf[SomeClass], force = true).filter(infor => infor.classId == CLASSID_REPAY).persist(StorageLevel.DISK_ONLY)
4,没有"反作用"
       所谓"反作用"(side effect),指的是函数内部与外部互动(最典型的状况,就是修改全局变量的值),产生运算之外的其余结果。
函数式编程强调没有"反作用",意味着函数要保持独立,全部功能就是返回一个新的值,没有其余行为,尤为是不得修改外部变量的值。并发

Spark RDD特性

RDD(Resilient Distributed Datasets),弹性分布式数据集,它是对分布式数据集的一种内存抽象,经过受限的共享内存方式来提供容错性,同时这种内存模型使得计算比传统的数据流模型要高效。RDD具备5个重要的特性,以下图所示:机器学习

1.一组分区,数据集的基本组成单位。
2.计算每个数据分区的函数。
3.对parent RDD的依赖,这个依赖描述了RDD之间的lineage(血统)。
4.可选,对于键值对RDD,有一个Partitioner(一般是HashPartitioner,RangePartitioner)。
5.可选,一组Preferred location信息(例如,HDFS文件的Block所在location信息)。编程语言

 

Spark算子

Spark对数据的处理过程包括输入、运行转换、输出等过程,而这些过程在Spark中以算子的形式定义。 算子是RDD中定义的函数,能够对RDD中的数据进行转换和操做。分布式

从大方向来讲,Spark算子大体能够分为如下两类:
1)Transformation 变换/转换算子:这种变换并不触发提交做业,完成做业中间过程处理。
         Transformation 操做是延迟计算的,也就是说从一个RDD 转换生成另外一个 RDD 的转换操做不是立刻执行,
须要等到有 Action 操做的时候才会真正触发运算。
        按照处理数据的结构类型,Transformation算子又能够分为如下两类:
    a)Value数据类型的Transformation算子,这种变换并不触发提交做业,针对处理的数据项是Value型数据
    b)Key-Value数据类型的Transformation算子,这种变换并不触发提交做业,针对处理的数据项是
          Key-Value型的数据对。

2)Action行动算子:这类算子会触发SparkContext提交Job做业。
        Action 算子会触发 Spark 提交做业(Job),并将数据输出 Spark系统。

1)Value型数据类型的Transformation算子
        A)输入分区与输出分区一对一型
	a) map算子
	b) flatMap算子
	c) mapPartitions算子
	d) glom算子
        B)输入分区与输出分区多对一型
	a) union算子
	b) cartesian算子
        C)输入分区与输出分区多对多型
	a) groupBy算子
        D)输出分区为输入分区子集型
 	a) filter算子
	b) distinct算子
	c) subtract算子
	d) sample算子
	e) takeSample算子
        E)Cache型
	a) cache算子
	d) persist算子

2)Key-Value型数据类型的Transformation算子
        A)输入分区与输出分区一对一型
	a) mapValues算子
        B)对单个RDD汇集
	a) combineByKey算子
	b) reduceByKey算子
	c) partitionBy算子
        C)对两个RDD汇集
	a) Cogroup算子
        D)链接
 	a) join算子
	b) leftOutJoin算子
	c) rightOutJoin算子

3)Action算子
        A)无输出
	a) foreach算子
        B)HDFS
	a) saveAsTextFile算子
	b) saveAsObjectFile算子
        C)集合和数据类型
	a) collect算子
	b) collectAsMap算子
	c) reduceByKeyLocally算子
	d) lookup算子
	e) count算子
	f) top算子
	g) reduce算子
	h) fold算子
	i) aggregate算子
	
4)数据加载的Transformation算子
        A)文件读取
	a) textFile算子
        B)内存生成
	a) makeRDD算子
	b) parallelize算子

Spark算子-Value型

1)map: 对RDD中的每一个元素都执行一个指定的函数类(映射)产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。固然map也能够把Key元素变成Key-Value对。

 

2)flatMap:将原来 RDD 中的每一个元素经过函数 f 转换为新的元素,并将生成的 RDD 的每一个集合中的元素合并为一个集合。

3) mapPartiions:map是对rdd中的每个元素进行操做,而mapPartitions (foreachPartition)则是对rdd中的每一个分区的迭代器进行操做mapPartitions效率比map高的多。mapPartitions函数获取到每一个分区的迭代器,在函数中经过这个分区总体的迭代器对整个分区的元素进行操 做。

4) glom:将分区元素转换成数组。

5) union:相同数据类型RDD进行合并,并不去重。

6)cartesian:对RDD内的全部元素进行笛卡尔积操做

7) groupBy:将元素经过函数生成相应的 Key,数据就转化为 Key-Value 格式,以后将 Key 相同的元素分为一组。

8)filter:对RDD元素进行过滤操做

9)distinct:对RDD中的元素去重操做

10)subtract:RDD间进行减操做,去除相同数据元素(去掉含有重复的项)

11)sample:对RDD元素进行采样操做,获取全部元素的子集(按照比例随机抽样)

12)takesample:上面的sample函数是一个原理,不一样的是不使用相对比例采样,而是按设定的采样个数进行采样

Spark算子-Key-Value型

1)mapValues:(对Value值进行变换)原RDD中的Key保持不变,与新的Value一块儿组成新的RDD中的元素。所以,该函数只适用于元素为KV对的RDD。即针对(Key, Value)型数据中的 Value 进行 Map 操做,而不对 Key 进行处理。

2)combineByKey:(按key聚合)至关于将元素为 (Int, Int) 的 RDD转变为了 (Int,Seq[Int]) 类型元素的 RDD。

3)reduceByKey:reduceByKey 是比 combineByKey 更简单的一种状况,只是两个值合并成一个值,即相同的key合并value。

4)partitionBy:按key值对RDD进行从新分区操做。

5)cogroup:按key值汇集操做。

6)join:按key值联结。

Spark算子-Action算子

1)foreach:循环遍历每个元素。

2)saveAsTextFile:将最终的结果数据以文本格式保存到指定的HDFS目录中

3)saveAsObjectFile:将最终的结果数据以二进制文件格式保存到指定的HDFS目录中

4)collect:收集元素

5)collectAsMap: 收集key/value型的RDD中的元素

6)reduceByKeyLocally:实现的是先reduce再collectAsMap的功能,先对RDD的总体进行reduce操做,而后再收集全部结果返回为一个HashMap

7)lookup:查找元素,对(Key,Value)型的RDD操做,搜索指定Key对应的元素

8)count:计算元素个数

9)top:top(n)寻找值最大的前n个元素

10)reduce:经过函数func先汇集各分区的数据集,再汇集分区之间的数据,func接收两个参数,返回一个新值,新值再作为参数继续传递给函数func,直到最后一个元素

11)fold:合并

12)aggregateByKey:采用归并的方式进行数据聚合操做,这种汇集是并行化的,经过key进行聚合。

推荐的书籍

 

Spark基础概念预习资料

Spark 核心概念RDD:DD:http://sharkdtu.com/posts/spark-rdd.html Spark RDD详解:详解:https://blog.csdn.net/wangxiaotongfan/article/details/51395769  Scala教程:教程:http://www.runoob.com/scala/scala-tutorial.html

相关文章
相关标签/搜索