1. Spark 简介
Spark是一个用来实现快速而通用的集群计算的平台。
Spark 不仅可以将任何Hadoop 分布式文件系统(HDFS)上的文件读取为分布式数据集,也可以支持其他支持Hadoop 接口的系统,比如本地文件、亚马逊S3、Cassandra、Hive、HBase 等。
1.1 Spark Core
Spark Core 实现了Spark 的基本功能:
1.任务调度
2.内存管理
3.错误恢复
4.与存储系统交互等模块
Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的API 定义。RDD 表示分布在多个计算节点上可以并行操作的元素集合,是Spark 主要的编程抽象。Spark Core 提供了创建和操作这些集合的多个API。
1.2 Spark SQL
Spark SQL 是Spark用来操作结构化数据的程序包。
- 通过Spark SQL,我们可以使用SQL或者Apache Hive 版本的SQL 方言(HQL)来查询数据。
2.Spark SQL 支持多种数据源,比如Hive 表、Parquet 以及JSON 等。
3.除了为Spark 提供了一个SQL 接口,Spark SQL 还支持开发者将SQL和传统的RDD 编程的数据操作方式相结合,不论是使用Python、Java 还是Scala,开发者都可以在单个的应用中同时使用SQL 和复杂的数据分析。
1.3 Spark Streaming
Spark Streaming 是Spark 提供的对实时数据进行流式计算的组件。
数据流:比如生产环境中的网页服务器日志,或是网络服务中用户提交的状态更新组成的消息队列,都是数据流。
Spark Streaming 提供了用来操作数据流的API,并且与Spark Core 中的RDD API 高度对应。这样一来,程序员编写应用时的学习门槛就得以降低,不论是操作内存或硬盘中的数据,还是操作实时数据流,程序员都更能应对自如。从底层设计来看,Spark Streaming 支持与Spark Core 同级别的容错性、吞吐量以及可伸缩性。
1.5 Spark MLlib
Spark 中还包含一个提供常见的机器学习(ML)功能的程序库,叫作MLlib。
MLlib 提供了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。MLlib 还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。
1.6 GraphX
GraphX 是用来操作图(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。
与Spark Streaming 和Spark SQL 类似,GraphX 也扩展了Spark 的RDD API,能用来创建一个顶点和边都包含任意属性的有向图。GraphX 还支持针对图的各种操作(比如进行图分割的subgraph 和操作所有顶点的mapVertices),以及一些常用图算法(比如PageRank和三角计数)。
1.7 集群管理器
就底层而言,Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark 支持在各种集群管理器(cluster manager)上运行,包括Hadoop YARN、Apache Mesos,以及Spark 自带的一个简易调度器,叫作独立调度器(Standalone)。
1.8 Spark Shell启动
如果你有一个Hadoop 集群, 并且Hadoop 版本支持YARN, 通过为Spark master 设定
yarn-client 参数值,就可以在集群上启动Spark 作业:
$ spark-shell --master yarn-client
$ spark-shell --master yarn --deploy-mode client
如果你是在自己的计算机上运行示例,可以通过设定local[N] 参数来启动本地Spark 集
群,其中N 代表运行的线程数,或者用* 表示使用机器上所有可用的核数。比如,要在一
个8 核的机器上用8 个线程启动一个本地集群,可以输入以下命令:
$ spark-shell --master local[*]