Spark 快速教程及在线体验

本篇文档搭配了
Spark在线环境,可以直接在线体验。Apache Spark是为大规模数据处理而设计的快速通用的运算框架,最初由AMPLab所开发,使用了内存运算技术。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark能在数据尚未写入硬盘时即在存储器内分析运算。Spark在存储器内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍。

在线练习地址:Spark在线实验室

1. Spark 是什么

Apache Spark 是个通用的集群计算框架,通过将大量数据集计算任务分配到多台计算机上,提供高效内存计算。Spark 正如其名,最大的特点就是快(Lightning-fast),可比 Hadoop MapReduce 的处理速度快 100 倍。如果你熟悉 Hadoop,那么你知道分布式计算框架要解决两个问题:如何分发数据和如何分发计算。Hadoop 使用 HDFS 来解决分布式数据问题,MapReduce 计算范式提供有效的分布式计算。类似的,Spark 拥有多种语言的函数式编程 API,提供了除 map 和 reduce 之外更多的运算符,这些操作是通过一个称作弹性分布式数据集(resilient distributed datasets, RDDs)的分布式数据框架进行的。

2. Spark 核心组件

Spark 库本身包含很多应用元素,这些元素可以用到大部分大数据应用中,其中包括对大数据进行类似 SQL 查询的支持,机器学习和图算法,对实时流数据的支持。具体核心组件如下:

Spark Core:包含 Spark 的基本功能;尤其是定义 RDD 的 API、操作以及这两者上的动作。其他 Spark 的库都是构建在 RDD 和 Spark Core 之上的。

Spark SQL:提供通过 Apache Hive 的 SQL 变体 Hive 查询语言(HiveQL)与 Spark 进行交互的 API。每个数据库表被当做一个 RDD,Spark SQL 查询被转换为 Spark 操作。对熟悉 Hive 和 HiveQL 的人,Spar k可以拿来就用。

Spark Streaming:允许对实时数据流进行处理和控制。很多实时数据库(如Apache Store)可以处理实时数据。Spark Streaming 允许程序能够像普通 RDD 一样处理实时数据。

MLlib:一个常用机器学习算法库,算法被实现为对 RDD 的 Spark 操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。之前可选的大数据机器学习库 Mahout,将会转到 Spark,并在未来实现。

GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX 扩展了 RDD API,包含控制图、创建子图、访问路径上所有顶点的操作。

由于这些组件满足了很多大数据需求,也满足了很多数据科学任务的算法和计算上的需要,Spark 快速流行起来。不仅如此,Spark 也提供了使用 Scala、Java 和Python 编写的 API;满足了不同团体的需求,允许更多数据科学家简便地采用 Spark 作为他们的大数据解决方案。

3. Spark 体系架构

Spark体系架构包括如下三个主要组件:

  • 数据存储
  • API
  • 管理框架

数据存储:Spark 用 HDFS 文件系统存储数据。它可用于存储任何兼容于 Hadoop 的数据源,包括HDFS,Hbase,Cassandra等。

API:利用 API,应用开发者可以用标准的 API 接口创建基于 Spark 的应用。Spark 提供 Scala,Java 和 Python 三种程序设计语言的 API。

下面是三种语言 Spark API 的网站链接。

Spark基本概念:

  • Application: 用户自己写的 Spark 应用程序,批处理作业的集合。Application 的 main 方法为应用程序的入口,用户通过 Spark 的 API,定义了 RDD 和对 RDD 的操作。
  • SparkContext: Spark 最重要的 API,用户逻辑与 Spark 集群主要的交互接口,它会和 Cluster Master 交互,包括向它申请计算资源等。
  • Driver 和 Executor:Spark 在执行每个 Application 的过程中会启动 Driver 和 Executor 两种 JVM 进程。Driver 进程为主控进程,负责执行用户 Application 中的 main 方法,提交 Job,并将 Job 转化为 Task,在各个 Executor 进程间协调 Task 的调度。运行在Worker上 的 Executor 进程负责执行 Task,并将结果返回给 Driver,同时为需要缓存的 RDD 提供存储功能。

资源管理:

一组计算机的集合,每个计算机节点作为独立的计算资源,又可以虚拟出多个具备计算能力的虚拟机,这些虚拟机是集群中的计算单元。Spark 的核心模块专注于调度和管理虚拟机之上分布式计算任务的执行,集群中的计算资源则交给 Cluster Manager 这个角色来管理,Cluster Manager 可以为自带的Standalone、或第三方的 Yarn和 Mesos。

Cluster Manager 一般采用 Master-Slave 结构。以 Yarn 为例,部署 ResourceManager 服务的节点为 Master,负责集群中所有计算资源的统一管理和分配;部署 NodeManager 服务的节点为Slave,负责在当前节点创建一个或多个具备独立计算能力的 JVM 实例,在 Spark 中,这些节点也叫做 Worker。

另外还有一个 Client 节点的概念,是指用户提交Spark Application 时所在的节点。

弹性分布式数据集(RDD):

弹性分布式数据集(RDD)是 Spark 框架中的核心概念。可以将 RDD 视作数据库中的一张表。其中可以保存任何类型的数据。Spark 将数据存储在不同分区上的 RDD 之中。

RDD 可以帮助重新安排计算并优化数据处理过程。

此外,它还具有容错性,因为RDD知道如何重新创建和重新计算数据集。

RDD 是不可变的。你可以用变换(Transformation)修改 RDD,但是这个变换所返回的是一个全新的RDD,而原有的 RDD 仍然保持不变。

RDD 支持两种类型的操作:

  • 变换(Transformation)变换的返回值是一个新的 RDD 集合,而不是单个值。调用一个变换方法,不会有任何求值计算,它只获取一个 RDD 作为参数,然后返回一个新的 RDD。 变换函数包括:map,filter,flatMap,groupByKey,reduceByKey,aggregateByKey,pipe和coalesce。
  • 行动(Action)行动操作计算并返回一个新的值。当在一个 RDD 对象上调用行动函数时,会在这一时刻计算全部的数据处理查询并返回结果值。 行动操作包括:reduce,collect,count,first,take,countByKey 以及 foreach。

了解完spark的基本概念后,可以到Spark在线实验室练习spark的安装部署,里面有完整教程。

Spark从入门到进阶的系统课程:Spark 大数据动手实验

更多spark实验项目:Spark_精选项目课程

在线体验其他开源软件:实验楼软件库

如果你对任何开源软件感兴趣,欢迎在下面留言,也欢迎提交你熟悉的开源软件。提交方法:软件库使用方法

    原文作者:实验楼在线教育
    原文地址: https://zhuanlan.zhihu.com/p/28450736
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞