常见大数据处理框架比较研究

2020-07-22 09:55孙丽
电脑知识与技术 2020年12期

孙丽

摘要:本文主要对Hadoop、Spark两种大数据处理框架进行介绍,阐述各自的原理、生态组成及应用特点,并对两者进行了简单的比较。

关键词:Hadoop;Spark;大数据框架

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2020)12-0003-03

隨着互联网技术的迅猛发展,以及人们获取信息的方式和方法的改变,各行业应用系统的规模迅速扩大,所产生的数据呈井喷式增长,远远超出传统单台计算机的信息处理能力。因此若干大数据处理平台应运而生,如Hadoop、Spark、Flink、Storm、Samza等,各种平台都具有自己的特点与应用领域,现对其中最常见、应用最广泛的Hadoop及Spark进行介绍。

1Hadoop

1.1关于Hadoop

Hadoop是Apache下的一个开源的分布式计算平台。Hadoop作为一种底层细节透明的架构,其核心包括两部分:HDFS分布式文件系统(Hadoop Distributed File System)和MapReduce。HDFS实现分布式文件系统,提供了文件操作和数据存储;MapReduce实现了分布式计算和分布式任务处理,实现了任务的分发、执行、跟踪等工作。

1.2Hadoop原理与运行机制

Hadoop是典型的主从结构,包括Master和Slave,即其构成包括数据节点多个以及名字节点一个。主服务器(master)由名字节点构成,其主要作用是对HDFS(分布式文件系统)的name space进行管理,并执行client提出的文件访问命令;对系统数据进行存储是数据节点具有的功能。一定数量的TaskTracker和一个Job共同构成了MapReduce框架,主节点和数据节点分别为运行JobTracker和TaskTracker提供了相应的场所。各项任务和作用的调度工作均由主节点负责,将任务分派到从节点的同时,还会对其执行状况进行监督,如果任务在分配或监控上未获得成功,将自动重复上一步骤;对来自主节点的任务予以执行是从节点唯一的工作。在对Job进行提交时,Job等相关信息的接收工作由JobTracker负责,并向从节点分发相应的信息,此外,还会对其具体的执行状况实施监督管理。

在应用中,从基础层面为框架提供支持是Hadoop Common的主要作用,处理大数据的工作是由MapReduce组件和HDFS合作完成的。图1展示的内容就是运行过程中Hadoop所依据的机制,其对于相关部署环境等方面进行了详细展示。

1.3Hadoop生态

Hadoop生态圈主要包括HBase、Hive、Pig、Sqoop、Avro和ZooKeeper等。Hive是基于Hadoop的分布式数据仓库技术,用于查询和管理存储在分布式环境下的大数据集,适合处理相对静态的海量数据集,即在处理过程中数据不会发生快速变化且对处理结果的实时响应要求不高,其HQL语句结合了SQL技术和MapReduce分布式计算框架,降低了传统数据分析人员使用Hadoop进入大数据时代的障碍。HBase是运行于Hadoop之上的分布式海量数据库,用来存储分结构化和半结构化的松散数据,它起源于Google的BigTable,起初解决大规模网页搜索,现在应用于多种应用如地图、社交网站YouTube、博客网站等,是一种典型的NoSQL技术,能够实现海量数据的准实时查询。Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(如:MySQL,Oracle,Postgres等)中的数据导入到HDFS中,也可以将HDFS的数据导出到关系型数据库中。

2Spark

2.1关于Spark

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark应用程序在集群运行机制如图2所示,Spark应用程序作为独立的进程集合运行在集群上,由主程序中的SparkContext对这些进程进行协调。SparkContext可以连接多种类型的集群管理器,包括Mesos,YARN,Spark自己的Standalone,集群管理器可以在应用程序间分配计算资源。当SparkContext连接上集群管理器后,会在集群节点上申请创建executor, executor就是进行运算的执行以及存储应用数据的进程,之后SparkContext将用户的应用程序以JAR文件或者Python文件的形式发送给executor,最后SparkContext发送task到executor进行执行。

线程池是所有Spark应用程序均具备的,为执行多线程任务提供保障。采取此种方式的优点在于,可以有效隔离不同应用程序的调动,换而言之,drive的任务尤其自行调度,不同程序在执行任务时使用的JVM也不同。但此种方式也存在一定的弊端,即每个SparkContext所形成的数据不具备共享性。

2.2Spark的RDD

对于Spark的抽象性主要表现为两种形式:其一,通过RDD(即弹性分布式数据)来抽象表示数据,只有进行RDD转换后的数集,才可以通过Spark完成相应操作;其二,通过动作等算子抽象化RDD,所有位于集群节点的元素均被纳入RDD中。形成RDD具体方式是:通过Hadoop以及对此类文件予以支持的系统形成,此外,通过转换其他RDD也可以获得。

集群节点是RDD的具体分布位置,其构成元素均具有只读性,如果部分数据由于某节点的功能失效而遗失,在重新对数据进行构建时可以将lineage作为Spark的依据,对算子在RDD构建过程中所经历的转换过程进行记录是血统的工作原理,从而为遗失分区的恢复提供便利。在对算子进行转换时Spark会在内存中缓存相应的结果,新的RDD由此形成,随后便可以直接读取缓存在内存中的相关操作,在磁盘中缓存两个Job的步骤可以省略,使运行速度显著提升。通过抽象化处理数据集获得了RDD,基于此,在转换时仅能实现粗粒度。但在分析数据时,并行数据方式仍然可以被RDD很好适应,将相同操作执行在不同记录上是此类应用显著特征,具体包括机器学习等。

由于Spark框架对RDD的操作算子都是基于数据分区进行粗粒度的操作处理,每个转换算子操作过后都会产生一个新的RDD,因此RDD之间会形成一个前后依赖关系。

Narrow Dependencies和WideDependencies即窄依賴和宽依赖构成了Spark的依赖形式。使用某个父RDD的权限仅被赋予单独的子RDD时,被称之为窄依赖;反之,如果可以由多个子RDD同时使用,则被称之为宽依赖。由于依赖不具有多重性,因此,处理相应分区时,窄依赖的各个节点均可以进行多次,在对不同转换算子进行操作时,数据不需要同其他分区进行交换,进而对传输耗时有效降低,并对相关效率大幅度提升;由于依赖具有多重性,因此在处理下一步骤前,必须要完成全部节点的算子转换,此外,还要将数据传送到相应分区中,不但会占有大量节点,并且延迟了数据传输。窄依赖是RDD C,D,F间具有的关系,基于此,在优化其DAG的过程中,Spark会重新对pipeline进行组合,map等算子的操作区间仅位于SparkEx-ecutor上。宽依赖是RDD A,B,G所具有的关系,因此要执行join算子必须在位于Spark Executor分区中的groupBy算子全部执行完毕时才能够得到允许,此外,还需要通过网络对传输相关数据,导致执行时间延迟。

2.3Spark生态

SparkCore为整个生态的核心,其他组件有SparkStreaming、SparkSQL、MLlib、GraphX。SparkStreaming在生态中用于处理流式数据,同时又能和其他三大组件无缝集合;SparkSQL擅长处理结构化数据的Spark生态成员,是一个分布式SQL查询引擎,它提供了一个DataFrame的数据模型。对RDD等方面进行整体性处理是SparkSQL最具代表性的特征,如此,查询HQL或SQL的工作难度被大幅度降低,并且分析复杂数据的工作也可以同时完成。Spark平台提供的图计算和图挖掘接口是GraphX的基础,极大方便了大家对分布式图处理的需求。MLlib是机器学习的算法包,里面包含了一些常用的机器学习算法和处理工具,如分类、回归、聚类等。

3Hadoop、Spark比较

Hadoop较早成为大数据行业应用最广泛的应用框架,但近些年Spark大有超越Hadoop的趋势。主要原因在于相比于Hadoop,Spark最大的优势在于“快”。因为Spark的计算是基于内存的,而Hadoop的MapReduce计算模型涉及大量磁盘读写,10开销巨大,尤其是涉及迭代的情况,高延时的缺点更加突出,这就决定了Hadoop只能适合于对实时性要求不高的批处理应用场景。其次,Spark开发多使用Scala,代码量要比Hadoop简洁很多。最后,在机器学习和数据挖掘算法方面,Spark提供的MLlib使得国内外的研究重点纷纷转移至了Spark。但Spark也仅仅是在计算模型方面可以代替MapReduce,还不能使用Hadoop进行完全替代。

随着有关方面发展速度的不断提升,构成Hadoop与Speark的软件生态系统所涵盖的子项目数量均有所增加,同时还在不断被优化、拓展。两者各有优点,因此各个企业更多的是将两者结合起来统一部署,通过Yarn实现整体调度和管理,从而最大程度发挥各自的优势。

4展望

在最近几年的快速发展下,无论Hadoop还是Spark,均已经成为一个包含多个子项目的软件生态系统,并且还在不断被优化、拓展。两者各有优点,因此各个企业更多的是将两者结合起来统一部署,通过Yarn实现整体调度和管理,从而最大程度发挥各自的优势。