Spark简述

Spark

Apache Spark 是一个开源框架,专为大规模数据处理而设计的快速通用的计算引擎。Spark 源自加州大学伯克利分校的 AMPLab,现在已被捐献给了 Apache 软件基金会。Spark 继承了 MapReduce 的线性扩展性和容错性,同时对它做了一些重量级扩展。Spark 摒弃了 MapReduce 先 Map 再 Reduce 这样的执行方式,Spark 引擎可以执行更通用的有向无环图(DAG)算子。在 MapReduce 中需要将中间结果写入分布式文 件系统时,Spark 能将中间结果直接传到流水作业线的下一步。Spark 扩展了内存计算能力,它的弹性分布式数据集(RDD)抽象使流水处理线上的任何点物化在跨越集群节点的内存中。这样后续步骤如果需要相同数据集时就不必重新计算或从磁盘加载。这个特性使 Spark 可以用于涉及大量迭代的算法场景中。

       

Spark特点

快速高效

与 Hadoop 的 MapReduce 相比,Spark 基于内存的运算要快 100 倍以上,基于硬盘的运算也要快 10 倍以上。Hadoop MapReduce 的 Job 将中间输出和结果存储在 HDFS 中,读写 HDFS 造成磁盘 IO 成为瓶颈。而 Spark 允许将中间输出和结果存储在内存中,节省了大量的磁盘 IO。Spark 实现了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流。

                                                          

图1 基于内存 Spark 与 MapReduce 执行逻辑回归的性能对比

                       

图2 基于磁盘 Spark 与 MapReduce 对 100T 数据排序的性能对比

简洁易用

Spark 支持Java、Python 和 Scala 的 API,还支持超过 80 种高级算法,使用户可以快速构建不同的应用。而且 Spark 支持交互式的 Python 和 Scala 的 shell,可以非常方便地在这些 shell 中使用 Spark 集群来验证解决问题的方法。

​        在使用 MapReduce 开发应用程序时,通常用户关注的重点与难点是如何将一个需求 Job(作业)拆分成Map 和 Reduce。与之相对比,Spark 提供了 80 多个针对数据处理的基本操作,如 map、flatMap、reduceByKey、filter、cache、collect、textFile 等,这使得用户基于 Spark 进行应用程序开发非常简洁高效。以分词统计为例,虽然 MapReduce 固定的编程模式极大地简化了并行程序开发,但是代码至少几十行;而 Spark 其核心代码最短仅需一行,极大地提高了应用程序开发效率。

//示例1 基于Spark的WordCount程序核心代码
sc.textFile("hdfs://master:8020/user/dong/Spark/wc.input").flatMap(_.split("")).map((_,1)).reduceByKey(_ + _).collect

全栈通用

Spark 提供了统一的解决方案。Spark 可以用于批处理(Spark Core)、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark 统一的解决方案非常具有吸引力,统一平台处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

                              

Spark Core:Spark 的核心功能实现,包括 SparkContext 的初始化(DriverApplication 通过 SparkContext 提交)、部署模式、存储体系、任务提交与执行、计 算引擎等。

Spark SQL:Spark SQL 是 Spark 来操作结构化数据的程序包,可以让我们 使用 SQL 语句的方式来查询数据,Spark 支持多种数据源,包含 Hive 表,parquet 以及 JSON 等内容。

Spark Streaming:与 MapReduce 只能处理离线数据相比,Spark 还支持实时的流计算。Spark 提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。

Spark MLlib:提供机器学习相关的统计、分类、回归等领域的多种算法实 现。MLlib 不仅提供了模型评估、数据导入等额外的功能,还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化基础算法。其一致的 API 接口大大降低了用户的学习成本。

GraphX:GraphX 是 Spark 面向图计算提供的框架与算法库。GraphX 中提出了弹性分布式属性图的概念,并在此基础上实现了图视图与表视图的有机结合与统一。同时针对图数据处理提供了丰富的操作提供图计算处理能力,支持分布式, Pregel 提供的 API 可以 解决图计算中的常见问题。

兼容性多

Spark可以非常方便地与其他的开源产品进行融合。比如,Spark 可以使用 Hadoop 的 YARN 和 Apache Mesos 作为它的资源管理和调度器,并且可以处理所有 Hadoop 支持的数据,包括 HDFS、HBase 和 Cassandra 等。这对于已经部署 Hadoop 集群的用户特别重要,因为不需要做任何数据迁移就可以使用 Spark 的强大处理能力。Spark 也可以不依赖于第三方的资源管理和调度器,它实现了 Standalone 作为其内置的资源管理和调度框架,这样进一步降低了 Spark 的使用门槛,使得所有人都可以非常容易地部署和使用 Spark。此外,Spark 还提供了在 EC2 上部署 Standalone 的 Spark 集群的工具。

                                           

Spark优势

执行方式

                                            

图1 MapReduce 执行方式

                                

图2 Spark 执行方式

  1. MapReduce 执行过程中,Task(如:MapTask)进程跑完之后就会释放资源,所以资源占用率会越来越少。Spark 在运行过程中,资源一直会被占用,等整个任务跑完之后才会将释放资源(MapTask线程

  2. MapReduce 中执行 Job,Job 里面包含一个或者多个的 Task,Task 分为 MapTask 和ReduceTask ;Spark 的结构是 Application 中包涵多个 Job(并行或者串行),Job 下有多个 Stage(Stage划分),Stage 下有众多 Task,多个 Task 组成 Task Set。

  3. MapReduce 的在运行中数据主要依靠磁盘,MapReduce 对数据进行 Map 操作后的结果要写入磁盘中,而且 Reduce 操作也是在磁盘中读取数据(还需要考虑跨节点传输数据,主要消耗 I/O )。Spark 的运行数据会 Cache 到内存中,读写速度更快,还可以通过 persist 优化(数据到内存和磁盘等五种方式)

  4. MapReduce 的逻辑更加复杂,需要考虑执行逻辑、资源分配、代码逻辑等,Spark 只需要考虑代码逻辑,大部分工作由Spark自行完成,Execute Core、Execute Memory 等都可以做优化。

运行模式

在单机使用时,Spark 可以采用最基本的 local 模式。

Spark Standalone 模式:该模式是不借助于第三方资源管理框架的完全分布式模式。Spark 使用自己的 Master 进程对应用程序运行过程中所需的资源进行调度和管理。对于中小规模的 Spark 集群首选 Standalone 模式。目前 Spark 在 Standalone 模式下是没有任何单点故障问题的,这是借助 Zookeeper 实现的,思想类似于 Hbase Master 单点故障解决方案。

Spark on Yarn 模式:Spark 作为一个提交程序的客户端将 Spark 任务提交到 Yarn 上,然后通过 Yarn 来调度和管理 Spark 任务执行过程中所需的资源。在搭建此模式的 Spark 集群过程中,需要先搭建 Yarn 集群,然后将 Spark 作为 Hadoop 中的一个组件纳入到 Yarn 的调度管理下,这样将更有利于系统资源的共享。Spark on Yarn 支持两种模式:Yarn Cluster 与 Yarn Client 模式。区别:本质是 AM 进程的区别,Cluster 模式下,Driver 运行在 AM 中,负责向 Yarn 申请资源 ,并监督作业运行状况,当用户提交完作用后,就关掉 Client,作业会继续在 Yarn 上运行。然而Cluster 模式不适合交互类型的作业。而 Client 模式,AM 仅向 Yarn 请求 Executor,Client 会和请求的 Container 通信来调度任务,即 Client 不能离开。Yarn Cluster:适用于生产环境;Yarn Client:适用于交互、调试,希望立即看到 app 的输出。

Spark on Mesoes 模式:Spark 和资源管理框架 Mesos 相结合的运行模式。Apache Mesos 与 Yarn 类似,能够将CPU、内存、存储等资源从计算机的物理硬件中抽象地隔离出来,搭建了一个高容错、弹性配置的分布式系统。 Mesos 同样也采用 Master/Slave 架构,并支持粗粒度模式和细粒度模式两种调度模式。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值