spark:
什么是spark
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。
spark的特点
快速
一般情况下,对于迭代次数较多的应用程序,Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100多倍,在磁盘上的运行速度是Hadoop MapReduce运行速度的10多倍。
易用
Spark 支持使用 Scala、Pylhon、Java、R等语言快速编写应用。此外,Spark 提供超过
80个高阶算子,使得编写并行应用程序变得容易。并且 Spark 提供 Scala、Python 和R等语言的交互模式界面,使得 Spark 编程的学习更加简便。
通用
Spark 可以与SQL 语句、实时计算及其他复杂的分析计算进行良好的结合。Spark 框架包含多个紧密集成的组件,包括 Spark SQL(即席查询)、Spark Streaming(实时流处理)、Spark MLlib(机器学习库)、Spark GraphX(图计算),如图所示,并且 Spark 支持在一个应用中同时使用这些组件。相较于 Hadoop 的 MapReduce 框架,Spark无论在性能还是在方案统一性等方面,都有着极大的优势。Spark 全栈统一的解决方案非常具有吸引力,可极大地减少平台部署、开发和维护的人力和物力成本。
随处运行
用户可以使用Spark 的独立集群模式运行 Spark,也可以在亚马逊弹性计算云(Amazon
Elastic Compute Cloud, Amazon EC2), Hadoop YARN 资源管理器或Apache Mesos 上运行Spark。Spark 作为一个分布式计算框架,本身并没有存储功能,但是 Spark 可以从 HDFS、Cassandra、HBase、Hive、Alluxio(Tachyon)等数据源中读取数据。
代码简洁
Spark 支持使用Scala、Python 等语言编写代码。Scala 和 Python 的代码相对 Java 的代码而言比较简洁,因此,在 Spark 中一般都使用Scala 或 Python 编写应用程序,这也比在MapReduce 中编写应用程序简单方便。例如,MapReduce 实现单词计数可能需要60多行代码,而Spark 使用Scala 语言实现只需要一行。
spark的生态圈
现在 Apache Spark 已经形成一个丰富的生态圈,包括官方和第三方开发的组件或工具。
Spark 生态圈也称 伯克利效据分析栈(Beikerley Data Analytics Stack, BDAS),由AMPLab打造,是致力于在算法(Algorithm)、机器(Machine)、人(People) 之间通过大规模集成展现大数据应用的平台。大家要注意,开源软件的使用要遵循对应的授权协议,Spark生态圈的大部分软件都是开源软件,但具体使用尤其是商业用途要参考其授权协议。
Spark 生态圈如图所示,以 Spark Core 为核心,可以从 HDFS、Amazon S3 和 HBase等数据源中读取数据,并支持不同的程序运行模式,能够以Mesos、YARN、EC2、本地运行模式或独立运行模式(独立运行模式即以 Spank 自带的 Standalone作为资源管理器)调度作业完成 Spark 应用程序的计算。Spark 应用程序计算的整个过程可以调用不同的组件,如 Spark Streaming 的实时流处理应用、SparkSQL的即席查询、BlinkDB 的权衡查询、MLlib/MLBase 的机器学习、GraphX的图处理和SparkR的数学计算等。
Spark生态圈中重要组件的简要介绍如下
Spark Core:Spark的核心,提供底层框架及核心支持。
BlinkDB:一个用于在海量数据上进行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。
Spark SQL:可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括Hive、HDFS、关系数据库(如MySQL)等。
Spark Streaming:可以进行实时数据流式计算。
MLBase:是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。MLBase由4部分组成:MLlib、MLI、ML Optimizer和MLRuntime。
Spark GraphX:图计算的应用在很多情况下处理的数据量都是很庞大的。如果用户需要自行编写相关的图计算算法,并且在集群中应用,难度是非常大的。而使用GraphX即可解决这个问题,因为它内置了许多与图相关的算法,如在移动社交关系分析中可使用图计算相关算法进行处理和分析。
SparkR:是AMPLab发布的一个R语言开发包,使得R语言编写的程序不只可以在单机运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力。
Scala:
什么是Scala
Scala是Scalable Language的缩写,是一种多范式的编程语言,由洛桑联邦理工学院的马丁·奥德斯在2001年基于Funnel的工作开始设计,设计初衷是想集成面向对象编程和函数式编程的各种特性。 Scala 是一种纯粹的面向对象的语言,每个值都是对象。Scala也是一种函数式语言,因此函数可以当成值使用。 由于Scala整合了面向对象编程和函数式编程的特性,因此Scala相对Java、C#、C++等其他语言更加简洁。
Scala源代码会被编译成Java字节码,因此Scala可以运行于Java虚拟机(Java Virtual Machine,JVM)之上,并可以调用现有的Java类库。
Scala的特性
面向对象
Scala 是一种纯粹的面向对象语言。一个对象的类型和行为是由类和特征描述的。类通过子类化和灵活的混合类进行扩展,成为多重继承的可靠解决方案。
函数式编程
Scala 提供了轻量级语法来定义匿名函数,支持高阶函数,允许函数嵌套,并支持函数柯里化。Scala 的样例类与模式匹配支持函数式编程语言中的代数类型。Scala 的单例对象提供了方便的方法来组合不属于类的函数。用户还可以使用Scala的模式匹配,编写类似正则表达式的代码处理可扩展标记语言(Extensible Markup Language, XML)格式的数据。
静态类型
Scala 配备了表现型的系统,以静态的方式进行抽象,以安全和连贯的方式进行使用。系统支持将通用类、内部类、抽象类和复合类作为对象成员,也支持隐式参数、转换和多态方法等,这为抽象编程的安全重用和软件类型的安全扩展提供了强大的支持。
可扩展
在实践中,专用领域的应用程序开发往往需要特定的语言扩展。Scala 提供了许多独料的语言机制,可以以库的形式无缝添加新的语言结构。
版权归原作者 啊啊啊脑子要没了 所有, 如有侵权,请联系我们删除。