Spark的基本概念是什么


今天就跟大家聊聊有关Spark的基本概念是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。目前已经形成一个高速发展应用广泛
的生态系统。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。
Spark的适用场景
目前大数据处理场景有以下几个类型:
复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;
基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间
基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间Spark成功案例
目前大数据互联网公司主要应用在金融、广告、报表、推荐系统等业务上。在广告业务方面需要大数据做应用分析、效果分析、定向优化等,在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击分析等。这些应用场景的普遍特点是计算量大、效率要求高。 腾讯 / 小米 / 淘宝 / 优酷土豆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),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。
函数式编程强调没有”副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。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中以算子的形式定义。 算子是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)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函数是一个原理,不同的是不使用相对比例采样,而是按设定的采样个数进行采样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值联结。1)foreach:循环遍历每一个元素。2)saveAsTextFile:将最终的结果数据以文本格式保存到指定的HDFS目录中3)saveAsObjectFile:将最终的结果数据以二进制文件格式保存到指定的HDFS目录中4)collect:收集元素5)collectAsMap: 收集key/value型的RDD中的元素6)reduceByKeyLocally:实现的是先reduce再collectAsMap的功能,先对RDD的整体进行reduce操作,然后再收集所有结果返回为一个HashMap7)lookup:查找元素,对(Key,Value)型的RDD操作,搜索指定Key对应的元素8)count:计算元素个数9)top:top(n)寻找值最大的前n个元素10)reduce:通过函数func先聚集各分区的数据集,再聚集分区之间的数据,func接收两个参数,返回一个新值,新值再做为参数继续传递给函数func,直到最后一个元素11)fold:合并12)aggregateByKey:采用归并的方式进行数据聚合操作,这种聚集是并行化的,通过key进行聚合。看完上述内容,你们对Spark的基本概念是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: 怎么解决zsh使用scp命令时*通配符出现no matches的错误

这篇文章主要讲解了“怎么解决zsh使用scp命令时*通配符出现no matches的错误”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决zsh使用scp命令时*通配符出现no matches的错误”吧!M…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/12 17:19
下一篇 08/12 17:19

相关推荐