MAPREDUCE服务 MRS-Spark基本原理:Spark简介

时间:2024-10-21 15:11:43

Spark简介

Spark是一个开源的,并行数据处理框架,能够帮助用户简单、快速的开发大数据应用,对数据进行离线处理、流式处理、交互式分析等。

Spark提供了一个快速的计算、写入及交互式查询的框架。相比于Hadoop,Spark拥有明显的性能优势。Spark使用in-memory的计算方式,通过这种方式来避免一个MapReduce工作流中的多个任务对同一个数据集进行计算时的IO瓶颈。Spark利用Scala语言实现,Scala能够使得处理分布式数据集时,能够像处理本地化数据一样。除了交互式的数据分析,Spark还能够支持交互式的数据挖掘,由于Spark是基于内存的计算,很方便处理迭代计算,而数据挖掘的问题通常都是对同一份数据进行迭代计算。除此之外,Spark能够运行于安装Hadoop 2.0 Yarn的集群。之所以Spark能够在保留MapReduce容错性,数据本地化,可扩展性等特性的同时,能够保证性能的高效,并且避免繁忙的磁盘IO,主要原因是因为Spark创建了一种叫做RDD(Resilient Distributed Dataset)的内存抽象结构。

原有的分布式内存抽象,例如key-value store以及数据库,支持对于可变状态的细粒度更新,这一点要求集群需要对数据或者日志的更新进行备份来保障容错性。这样就会给数据密集型的工作流带来大量的IO开销。而对于RDD来说,它只有一套受限制的接口,仅支持粗粒度的更新,例如map,join等等。通过这种方式,Spark只需要简单的记录建立数据的转换操作的日志,而不是完整的数据集,就能够提供容错性。这种数据的转换链记录就是数据集的溯源。由于并行程序,通常是对一个大数据集应用相同的计算过程,因此之前提到的粗粒度的更新限制并没有想象中的大。事实上,Spark论文中阐述了RDD完全可以作为多种不同计算框架,例如MapReduce,Pregel等的编程模型。并且,Spark同时提供了操作允许用户显式地将数据转换过程持久化到硬盘。对于数据本地化,是通过允许用户能够基于每条记录的键值,控制数据分区实现的。(采用这种方式的一个明显好处是,能够保证两份需要进行关联的数据将会被同样的方式进行哈希)。如果内存的使用超过了物理限制,Spark将会把这些比较大的分区写入到硬盘,由此来保证可扩展性。

Spark具有如下特点:

  • 快速:数据处理能力,比MapReduce快10-100倍。
  • 易用:可以通过Java,Scala,Python,简单快速的编写并行的应用处理大数据量,Spark提供了超过80种的操作符来帮助用户组件并行程序。
  • 普遍性:Spark提供了众多的工具,例如Spark SQLSpark Streaming。可以在一个应用中,方便的将这些工具进行组合。
  • 与Hadoop集成:Spark能够直接运行于Hadoop的集群,并且能够直接读取现存的Hadoop数据。

MRS 服务的Spark组件具有以下优势:

  • MRS服务的Spark Streaming组件支持数据实时处理能力而非定时触发。
  • MRS服务的Spark组件支持Structured Streaming,支持DataSet API来构建流式应用,提供了exactly-once的语义支持,流和流的join操作支持内连接和外连接。
  • MRS服务的Spark组件支持pandas_udf,可以利用pandas_udf替代pyspark中原来的udf对数据进行处理,可以减少60%-90%的处理时长(受具体操作影响)。
  • MRS服务的Spark组件支持Graph功能,支持图计算作业使用图进行建模。
  • MRS服务的SparkSQL兼容部分Hive语法(以Hive-Test-benchmark测试集上的64个SQL语句为准)和标准SQL语法(以tpc-ds测试集上的99个SQL语句为准)。

Spark的架构和详细原理介绍,请参见:https://archive.apache.org/dist/spark/docs/3.1.1/

support.huaweicloud.com/productdesc-mrs/mrs_08_000801.html