一 Spark是什么
Apache Spark 是一个快速的,多用途的集群计算系统,,相对于 Hadoop MapReduce 将中间结果保存在磁盘中, Spark 使用了内存保存中间结果,能在数据尚未写入硬盘时在内存中进行运算
Spark 只是一个计算框架, 不像 Hadoop 一样包含了分布式文件系统和完备的调度系统, 如果要使用 Spark,需要搭载其它的文件系统和更成熟的调度系统
二 Spark的特点
1 速度快
Spark 的在内存时的运行速度是 Hadoop MapReduce 的100倍
基于硬盘的运算速度大概是 Hadoop MapReduce 的10倍
Spark 实现了一种叫做 RDDs 的 DAG 执行引擎, 其数据缓存在内存中可以进行迭代处理
2 易用
Spark 支持 Java, Scala, Python, R, SQL 等多种语言的API
Spark 支持超过80个高级运算符使得用户非常轻易的构建并行计算程序
Spark 可以使用基于 Scala, Python, R, SQL的 Shell 交互式查询
3 通用
Spark 提供一个完整的技术栈 包括 SQL执行 Dataset命令式API ,机器学习库MLlib,图计算框架GraphX,流计算SparkStreaming
用户可以在同一个应用中同时使用这些工具,这一点是划时代的
4 兼容
Spark 可以运行在 Hadoop Yarn,Apache Mesos, Kubernets, Spark Standalone等集群中
Spark 可以访问 HBase,HDFS,Hive,Cassandra 在内的多种数据库
三 Spark组件
Spark 最核心的功能是 RDDs, RDDs 存在于 spark-core 这个包内, 这个包也是 Spark 最核心的包 同时 Spark 在 spark-core 的上层提供了很多工具,以便于适应不用类型的计算
1 Spark-Core 和 弹性分布式数据集(RDDs)
Spark-Core 是整个 Spark 的基础,提供了分布式任务调度和基本的 I/O 功能
Spark 的基础的程序抽象是弹性分布式数据集(RDDs),是一个可以并行操作,有容错的数据集合
RDDs 可以通过引用外部存储系统的数据集创建(如HDFS,HBase) 或者通过现有的 RDDs 转换得到
RDDs 抽象提供了 Java,Scala, Python 等语言的API
RDDs 简化了编程复杂性,操作 RDDs 类似通过 Scala 或者 Java8 的 Streaming 操作本地数据集合
2 Spark SQL
Spark SQL 在 spark-core 基础之上带出了一个名为 DataSet 和 DataFrame 的数据抽象化的概念
Spark SQL 提供了在 Dataset 和 DataFrame 之上执行 SQL 的能力
Spark SQL 提供了 DSL,可以通过 Scala, Java, Python 等语言操作 DataSet 和 DataFrame
它还支持使用 JDBC/ODBC 服务器操作 SQL 语言
3 Spark Streaming
Spark Streaming 充分利用 spark-core 的快速调度能力来运行流分析
它截取小批量的数据并可以对之运行 RDD Transformation
它提供了在同一个程序中同时使用流分析和批量分析的能力
4 MLlib
MLlib 是 Spark 上分布式机器学习的框架 Spark分布式内存的架构 比 Hadoop 磁盘式 的 Apache Mahout 快上 10 倍,扩展性也非常优良
MLlib 可以使用许多常见的机器学习和统计算法,简化大规模机器学习
汇总统计,相关性, 分层抽样,,假设检定,随即数据生成
支持向量机,回归, 线性回归,,逻辑回归,决策树,朴素贝叶斯
协同过滤,ALS
K-means
SVD奇异值分解,PCA主成分分析
TF-IDF, Word2Vec,StandardScaler
SGD随机梯度下降,L-BFGS
5 GraphX
GraphX 是分布式图计算框架,提供了一组可以表达图计算的 API,GraphX 还对这种抽象化提供了优化运行
四 Spark与Hadoop异同
类型上
Hadoop 基础平台, 包含计算, 存储, 调度
Spark 分布式计算工具
场景
Hadoop 大规模数据集上的批处理
Spark 迭代计算,交互式计算,流计算
延迟
Hadoop 大
Spark 小
易用性
Hadoop API 较为底层,算法适应性差
Spark API 较为顶层,方便使用
价格
Hadoop 对机器要求低, 便宜
Spark 对内存有要求,相对较贵
以上 感谢!