Hadoop与Spark是什么?

大数据本身是一个抽象的概念。从一般意义上讲,大数据是指无法在有限时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
C语言中文网
目前,业界对大数据还没有一个统一的定义,但是大家普遍认为,大数据具备 Volume、Velocity、Variety 和 Value 四个特征,简称“4V”,即数据体量巨大、数据速度快、数据类型繁多和数据价值密度低,
1)Volume:表示大数据的数据体量巨大。
2)Velocity:表示大数据的数据产生、处理和分析的速度在持续加快。
3)Variety:表示大数据的数据类型繁多。
4)Value:表示大数据的数据价值密度低。

Hadoop 系统简介

✔ Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella 在 2005 年合作开发。后来,Hadoop 被贡献给了 Apache 基金会,成为 Apache 基金会的开源项目。
✔ Hadoop 是一种分析和处理大数据的软件平台,是一个用 Java 语言实现的 Apache 的开源软件框架,在大量计算机组成的集群中实现了对海量数据的分布式计算。
✔ Hadoop 采用 MapReduce 分布式计算框架,根据 GFS 原理开发了 HDFS(分布式文件系统),并根据 BigTable 原理开发了 HBase 数据存储系统。
✔ Hadoop 和 Google 内部使用的分布式计算系统原理相同,其开源特性使其成为分布式计算系统的事实上的国际标准。
✔ Yahoo、Facebook、Amazon,以及国内的百度、阿里巴巴等众多互联网公司都以 Hadoop 为基础搭建了自己的分布式计算系统。
✔ Hadoop 是一个基础框架,允许用简单的编程模型在计算机集群上对大型数据集进行分布式处理。它的设计规模从单一服务器到数千台机器,每个服务器都能提供本地计算和存储功能,框架本身提供的是计算机集群高可用的服务,不依靠硬件来提供高可用性。

用户可以在不了解分布式底层细节的情况下,轻松地在 Hadoop 上开发和运行处理海量数据的应用程序。低成本、高可靠、高扩展、高有效、高容错等特性让 hadoop 成为最流行的大数据分析系统。

Hadoop 生态圈

✔ Hadoop 是一个由 Apache 基金会开发的大数据分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,轻松地在 Hadoop 上开发和运行处理大规模数据的分布式程序,充分利用集群的威力高速运算和存储。
✔ Hadoop 是一个数据管理系统,作为数据分析的核心,汇集了结构化和非结构化的数据,这些数据分布在传统的企业数据栈的每一层。
✔ Hadoop 也是一个大规模并行处理框架,拥有超级计算能力,定位于推动企业级应用的执行。
✔ Hadoop 又是一个幵源社区,主要为解决大数据的问题提供工具和软件。
虽然 Hadoop 提供了很多功能,但仍然应该把它归类为由多个组件组成的 Hadoop 生态圈,这些组件包括数据存储、数据集成、数擔处理和其他进行数据分析的专门工具。

图 1 展示了 Hadoop 的生态系统,主要由 HDFS、MapReduce, HBase, Zookeeper, Pig、 Hive 等核心组件构成,另外还包括 Sqoop、Flume 等框架,用来与其他企业系统融合。同时, Hadoop 生态系统也在不断增长,它新增了 Mdhout、Ambari 等内容,以提供更新功能。
在这里插入图片描述
Hadoop 生态圈包括以下主要组件。
1)HDFS
一个提供高可用的获取应用数据的分布式文件系统。
2)MapReduce
一个并行处理大数据集的编程模型。
3)HBase
一个可扩展的分布式数据库,支持大表的结构化数据存储。是一个建立在 HDFS 之上的,面向列的 NoSQL 数据库,用于快速读/写大量数据。
4)Hive
一个建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具;可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许不熟悉 MapReduce 的开发人员也能编写数据查询语句,然后这些语句被翻译为 Hadoop 上面的 MapReduce 任务。
5)Mahout
可扩展的机器学习和数据挖掘库。它提供的 MapReduce 包含很多实现方法,包括聚类算法、回归测试、统计建模。
6)Pig
一个支持并行计算的高级的数据流语言和执行框架。它是 MapReduce 编程的复杂性的抽象。Pig 平台包括运行环境和用于分析 Hadoop 数据集的脚本语言(PigLatin)。其编译器将 PigLatin 翻译成 MapReduce 程序序列。
7)Zookeeper
—个应用于分布式应用的高性能的协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括配置维护、域名服务、分布式同步、组服务等。
8)Amban
一个基于 Web 的工具,用来供应、管理和监测 Hadoop 集群,包括支持 HDFS、MapReduceAHive、HCatalog、HBase、ZooKeeperAOozie、Pig 和 Sqoop 。

Ambari 也提供了一个可视的仪表盘来查看集群的健康状态,并且能够使用户可视化地查看 MapReduce、Pig 和 Hive 应用来诊断其性能特征。

Hadoop 的生态圈还包括以下几个框架,用来与其他企业融合。
1)Sqoop
一个连接工具,用于在关系数据库、数据仓库和 Hadoop 之间转移数据。Sqoop 利用数据库技术描述架构,进行数据的导入/导出;利用 MapReduce 实现并行化运行和容错技术。
2)Flume
提供了分布式、可靠、高效的服务,用于收集、汇总大数据,并将单台计算机的大量数据转移到 HDFS。它基于一个简单而灵活的架构,并提供了数据流的流。它利用简单的可扩展的数据模型,将企业中多台计算机上的数据转移到 Hadoop。

Spark 是加州大学伯克利分校 AMP(Algorithms,Machines,People)实验室开发的通用内存并行计算框架。

Spark

Spark 在 2013 年 6 月进入 Apache 成为孵化项目,8 个月后成为 Apache 顶级项目。
Spark 以其先进的设计理念,迅速成为社区的热门项目,围绕着 Spark 推出了 SparkSQL、SparkStreaming、MLlib 和 GraphX 等组件,逐渐形成大数据处理一站式解决平台。

Spark 与 Hadoop

Hadoop 已经成了大数据技术的事实标准,Hadoop MapReduce 也非常适合于对大规模数据集合进行批处理操作,但是其本身还存在一些缺陷。特别是 MapReduce 存在的延迟过高,无法胜任实时、快速计算需求的问题,使得需要进行多路计算和迭代算法的用例的作业过程并非十分高效。

Hadoop MapRedcue 缺点

1)Hadoop MapRedue 的表达能力有限。
所有计算都需要转换成 Map 和 Reduce 两个操作,不能适用于所有场景,对于复杂的数据处理过程难以描述。
2)磁盘 I/O 开销大。
Hadoop MapReduce 要求每个步骤间的数据序列化到磁盘,所以 I/O 成本很高,导致交互分析和迭代算法开销很大,而几乎所有的最优化和机器学习都是迭代的。所以,Hadoop MapReduce 不适合于交互分析和机器学习。
3)计算延迟高。
如果想要完成比较复杂的工作,就必须将一系列的 MapReduce 作业串联起来然后顺序执行这些作业。每一个作业都是高时延的,而且只有在前一个作业完成之后下一个作业才能开始启动。因此,Hadoop MapReduce 不能胜任比较复杂的、多阶段的计算服务。

Spark 是借鉴了 Hadoop MapReduce 技术发展而来的,继承了其分布式并行计算的优点并改进了 MapReduce 明显的缺陷。

Spark优势

Spark 使用 Scala 语言进行实现,它是一种面向对象的函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集。它具有运行速度快、易用性好、通用性强和随处运行等特点,具体优势如下。

1)Spark 提供了内存计算,把中间结果放到内存中,带来了更高的迭代运算效率。通过支持有向无环图(DAG)的分布式并行计算的编程框架,Spark 减少了迭代过程中数据需要写入磁盘的需求,提高了处理效率。

2)Spark 为我们提供了一个全面、统一的框架,用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。
Spark 使用函数式编程范式扩展了 MapReduce 模型以支持更多计算类型,可以涵盖广泛的工作流,这些工作流之前被实现为 Hadoop 之上的特殊系统。
Spark 使用内存缓存来提升性能,因此进行交互式分析也足够快速,缓存同时提升了迭代算法的性能,这使得 Spark 非常适合数据理论任务,特别是机器学习。

3)Spark 比 Hadoop 更加通用。Hadoop 只提供了 Map 和 Reduce 两种处理操作,而 Spark 提供的数据集操作类型更加丰富,从而可以支持更多类型的应用。

Spark 的计算模式也属于 MapReduce 类型,但提供的操作不仅包括 Map 和 Reduce,还提供了包括 Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort、PartionBy 等多种转换操作,以及 Count、Collect、Reduce、Lookup、Save 等行为操作。

4)Spark 基于 DAG 的任务调度执行机制比 Hadoop MapReduce 的迭代执行机制更优越。
Spark 各个处理结点之间的通信模型不再像 Hadoop 一样只有 Shuffle 一种模式,程序开发者可以使用 DAG 开发复杂的多步数据管道,控制中间结果的存储、分区等。
Hadoop 与 Spark 执行流程对比
在这里插入图片描述
从中可以看出,Hadoop 不适合于做迭代计算,因为每次迭代都需要从磁盘中读入数据,向磁盘写中间结果,而且每个任务都需要从磁盘中读入数据,处理的结果也要写入磁盘,磁盘 I/O 开销很大。而 Spark 将数据载入内存后,后面的迭代都可以直接使用内存中的中间结果做计算,从而避免了从磁盘中频繁读取数据。

对于多维度随机查询也是一样。在对 HDFS 同一批数据做成百或上千维度查询时,Hadoop 每做一个独立的查询,都要从磁盘中读取这个数据,而 Spark 只需要从磁盘中读取一次后,就可以针对保留在内存中的中间结果进行反复查询。

Spark 在 2014 年打破了 Hadoop 保持的基准排序(SortBenchmark)记录,使用 206 个结点在 23 分钟的时间里完成了 100TB 数据的排序,而 Hadoop 则是使用了 2000 个结点在 72 分钟才完成相同数据的排序。也就是说,Spark 只使用了百分之十的计算资源,就获得了 Hadoop 3 倍的速度。

尽管与 Hadoop 相比,Spark 有较大优势,但是并不能够取代 Hadoop。

因为 Spark 是基于内存进行数据处理的,所以不适合于数据量特别大、对实时性要求不高的场合。另外,Hadoop 可以使用廉价的通用服务器来搭建集群,而 Spark 对硬件要求比较高,特别是对内存和 CPU 有更高的要求。

Spark 的适用场景

总而言之,大数据处理场景有以下几个类型。
1)复杂的批量处理
偏重点是处理海量数据的能力,对处理速度可忍受,通常的时间可能是在数十分钟到数小时。
2)基于历史数据的交互式查询
通常的时间在数十秒到数十分钟之间。
3)基于实时数据流的数据处理
通常在数百毫秒到数秒之间。

目前对以上三种场景需求都有比较成熟的处理框架。
✔ 用 Hadoop 的 MapReduce 技术来进行批量海量数据处理。
✔ 用 Impala 进行交互式查询。
✔ 用 Storm 分布式处理框架处理实时流式数据。
以上三者都是比较独立的,所以维护成本比较高,而 Spark 能够一站式满足以上需求。

通过以上分析,可以总结 Spark 的适应场景有以下几种。
1)Spark 是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大;数据量小但是计算密集度较大的场合,受益就相对较小。
2)Spark 适用于数据量不是特别大,但是要求实时统计分析的场景。
3)由于 RDD 的特性,Spark 不适用于那种异步细粒度更新状态的应用,例如,Web 服务的存储,或增量的 Web 爬虫和索引,也就是不适合增量修改的应用模型。
Keep moving toward your goals, and you’ll be better over time!

猜你喜欢

转载自blog.csdn.net/qq_50573146/article/details/125376620