首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >对比Hadoop和 Spark,看大数据框架进化之路

对比Hadoop和 Spark,看大数据框架进化之路

作者头像
用户7353950
发布2023-02-23 16:33:41
发布2023-02-23 16:33:41
1K0
举报
文章被收录于专栏:IT技术订阅IT技术订阅

说到大数据,就不得不说Hadoop和 Spark,Hadoop和 Spark作为大数据当前使用最广泛的两种框架,是如何发展的,今天我们就追根溯源,和大家一起了解一下Hadoop和 Spark的过去和未来;在Hadoop出现之前,人们采用的是典型的高性能 HPC workflow,它有专门负责计算的compute cluster,cluster memory很小,所以计算产生的任何数据会存储在storage中,最后在Tape里进行备份,这种workflow主要适用高速大规模复杂计算,像核物理模拟中会用到。

HPC workflow在实际应用中存在一些问题,这些问题促进了Hadoop的出现。

首先如果想对大量进行简单计算,比如对Search logs 进行“what are the popular keywords”计算,这时是否可以用HPC workflow?当然可以,但却并不适合,因为需要做的计算非常简单,并不需要在 high performance compute cluster中进行。

其次由于数据量大,HPC workflow是I/O bound,计算时间只有1个微秒,但剩下的100个微秒可能都需要等数据,这时候compute cluster就会非常空闲,因此HPC同样不不适用于 specific use。

另外HPC主要在政府部门、科研等领域使用,成本高昂,不适合广泛推广。

如果不能把数据移到计算的地方,那为什么不转换思维,把计算移到数据里呢?

所以Google在2003至2006年发表了著名的三大论文——GFS、BigTable、MapReduce,解决怎么样让framework 挪到有数据的地方去做,解决了数据怎么存储,计算及访问的问题。

在Google 发出三大论文后,Yahoo用相同的框架开发出JAVA语言的project,这就是Hadoop。Hadoop Ecosystem在十年多时间发展的如火如荼,其核心就是HDFS,Mapreduce和Hbase。

HDFS很好地实现了数据存储的以下特性要求:

Cheap;

High availability;

High throughput;

High scalability;

Failure detection and recovery。

大家从图中可以看到HDFS数据读取和写入的过程,这个Architecture非常稳定,当数据量越来越大时Namenode从一个发展为多个,使内存增大,产生了Namenode Federation。

大数据存储已经实现,那如何进行计算呢?

如果有1PB size log,当需要计数时, 一个machine肯定无法计算海量数据,这时候可能需要写Multi-threads code,但也会存在进程坏了,性能不稳定等问题,如果Data Scientist还要写multi-threats程序是非常浪费时间的,这时候Mapreduce 就应运而生,目的是让framework代替人来处理复杂问题,使人集中精力到重要的数据分析过程中,只需要通过code Map和Reduce就可以实现数据运算。

让我们来思考下:在一次Mapreduce中至少需写硬盘几次?

至少3次!

开始从HDFS中读取数据,在Mapreduce中计算,再写回HDFS作为 Intermediate data,继续把数据读出来做reduce,最后再写回HDFS,很多时候做meachine learning需要不断迭代,一次程序无法算出最终结果,需要不断循环。

循环过程一直往硬盘里写,效率非常低,如果把中间数据写入内存,可以极大提高性能,于是Spark出现了。

当把数据从HDFS中读出来到内存中,通过spark分析,Intermediate data再存到内存,继续用spark进行分析,不断进行循环,这样Spark会很大地提高计算速度。

Spark在2009年由AMPLab开发,吸取了很多Hadoop发展的经验教训,比如Hadoop对其他语言支持不够,Spark提供了Java,Scala,Python,R这些广泛受到Data Scientist欢迎的语言。

那Spark与Hadoop的区别有什么?

Spark比Hadoop使用更简单;

Spark对数据科学家更友好(Interactive shell);

Spark有更多的API/language支持(Java, python, scala)。

Spark的中间数据放到内存中,对于迭代运算效率更高。

Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。

Spark比Hadoop更通用

Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count, collect, reduce, lookup, save等多种actions操作。

这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。用户可以命名,物化,控制中间结果的存储、分区等。可以说编程模型比Hadoop更灵活。

不过由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。

容错性

在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用哪种方式来实现容错。

可用性

Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性。

Spark与Hadoop的结合

Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。

Spark的适用场景

Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小(大数据库架构中这是是否考虑使用Spark的重要因素)

由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。

总的来说Spark的适用面比较广泛且比较通用。

运行模式

本地模式

Standalone模式

Mesoes模式

yarn模式

Spark生态系统

Shark ( Hive on Spark): Shark基本上就是在Spark的框架基础上提供和Hive一样的H iveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和 Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapReduce。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。

Spark streaming: 构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片断(几秒),以类似batch批量处理的方式来处理这小部分数据。

Hadoop框架的主要模块包括如下:

  • Hadoop Common
  • Hadoop分布式文件系统(HDFS)
  • Hadoop YARN
  • Hadoop MapReduce

虽然上述四个模块构成了Hadoop的核心,不过还有其他几个模块。这些模块包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它们进一步增强和扩展了Hadoop的功能。

Spark确实速度很快(最多比Hadoop MapReduce快100倍)。Spark还可以执行批量处理,然而它真正擅长的是处理流工作负载、交互式查询和机器学习。

相比MapReduce基于磁盘的批量处理引擎,Spark赖以成名之处是其数据实时处理功能。Spark与Hadoop及其模块兼容。实际上,在Hadoop的项目页面上,Spark就被列为是一个模块。

Spark有自己的页面,因为虽然它可以通过YARN(另一种资源协调者)在Hadoop集群中运行,但是它也有一种独立模式。它可以作为 Hadoop模块来运行,也可以作为独立解决方案来运行。

MapReduce和Spark的主要区别在于,MapReduce使用持久存储,而Spark使用弹性分布式数据集(RDDS)。

性能

Spark之所以如此快速,原因在于它在内存中处理一切数据。没错,它还可以使用磁盘来处理未全部装入到内存中的数据。

Spark的内存处理为来自多个来源的数据提供了近乎实时分析的功能:营销活动、机器学习、物联网传感器、日志监控、安全分析和社交媒体网站。另 外,MapReduce使用批量处理,其实从来就不是为惊人的速度设计的。它的初衷是不断收集来自网站的信息,不需要这些数据具有实时性或近乎实时性。

易用性

支持Scala(原生语言)、Java、Python和Spark SQL。Spark SQL非常类似于SQL 92,所以几乎不需要经历一番学习,马上可以上手。

Spark还有一种交互模式,那样开发人员和用户都可以获得查询和其他操作的即时反馈。MapReduce没有交互模式,不过有了Hive和Pig等附加模块,采用者使用MapReduce来得容易一点。

成本

“Spark已证明在数据多达PB的情况下也轻松自如。它被用于在数量只有十分之一的机器上,对100TB数据进行排序的速度比Hadoop MapReduce快3倍。”这一成绩让Spark成为2014年Daytona GraySort基准。

兼容性

MapReduce和Spark相互兼容;MapReduce通过JDBC和ODC兼容诸多数据源、文件格式和商业智能工具,Spark具有与MapReduce同样的兼容性。

数据处理

MapReduce是一种批量处理引擎。MapReduce以顺序步骤来操作,先从集群读取数据,然后对数据执行操作,将结果写回到集群,从集群读 取更新后的数据,执行下一个数据操作,将那些结果写回到结果,依次类推。Spark执行类似的操作,不过是在内存中一步执行。它从集群读取数据后,对数据 执行操作,然后写回到集群。

Spark还包括自己的图形计算库GraphX。GraphX让用户可以查看与图形和集合同样的数据。用户还可以使用弹性分布式数据集(RDD),改变和联合图形,容错部分作了讨论。

容错

至于容错,MapReduce和Spark从两个不同的方向来解决问题。MapReduce使用TaskTracker节点,它为 JobTracker节点提供了心跳(heartbeat)。如果没有心跳,那么JobTracker节点重新调度所有将执行的操作和正在进行的操作,交 给另一个TaskTracker节点。这种方法在提供容错性方面很有效,可是会大大延长某些操作(即便只有一个故障)的完成时间。

Spark使用弹性分布式数据集(RDD),它们是容错集合,里面的数据元素可执行并行操作。RDD可以引用外部存储系统中的数据集,比如共享式文件系统、HDFS、HBase,或者提供Hadoop InputFormat的任何数据源。Spark可以用Hadoop支持的任何存储源创建RDD,包括本地文件系统,或前面所列的其中一种文件系统。

RDD拥有五个主要属性:

  • 分区列表
  • 计算每个分片的函数
  • 依赖其他RDD的项目列表
  • 面向键值RDD的分区程序(比如说RDD是散列分区),这是可选属性
  • 计算每个分片的首选位置的列表(比如HDFS文件的数据块位置),这是可选属性

RDD可能具有持久性,以便将数据集缓存在内存中。这样一来,以后的操作大大加快,最多达10倍。Spark的缓存具有容错性,原因在于如果RDD的任何分区丢失,就会使用原始转换,自动重新计算。

可扩展性

按照定义,MapReduce和Spark都可以使用HDFS来扩展。那么,Hadoop集群能变得多大呢?

据称雅虎有一套42000个节点组成的Hadoop集群,可以说扩展无极限。最大的已知Spark集群是8000个节点,不过随着大数据增多,预计集群规模也会随之变大,以便继续满足吞吐量方面的预期。

安全

Hadoop支持Kerberos身份验证,这管理起来有麻烦。然而,第三方厂商让企业组织能够充分利用活动目录Kerberos和LDAP用于身份验证。同样那些第三方厂商还为传输中数据和静态数据提供数据加密。

Hadoop分布式文件系统支持访问控制列表(ACL)和传统的文件权限模式。Hadoop为任务提交中的用户控制提供了服务级授权(Service Level Authorization),这确保客户拥有正确的权限。

Spark的安全性弱一点,目前只支持通过共享密钥(密码验证)的身份验证。Spark在安全方面带来的好处是,如果你在HDFS上运行Spark,它可以使用HDFS ACL和文件级权限。此外,Spark可以在YARN上运行,因而能够使用Kerberos身份验证。

总结

Spark与MapReduce是一种相互共生的关系。Hadoop提供了Spark所没有的功能特性,比如分布式文件系统,而Spark 为需要它的那些数据集提供了实时内存处理。完美的大数据场景正是设计人员当初预想的那样:让Hadoop和Spark在同一个团队里面协同运行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 性能
  • 易用性
  • 成本
  • 兼容性
  • 容错
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档