《Spark与Hadoop大数据分析》一一

简介:

本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第2章,第2.2节,作者:文卡特·安卡姆(Venkat Ankam) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 Apache Spark概述

Hadoop和MR已有10年历史,已经被证明是高性能处理海量数据的最佳解决方案。然而,MR在迭代计算中性能不足,在这种情况下,多个MR作业之间的输出必须被写入 HDFS。在单个MR作业中,它的性能不足则是因为MR框架存在的一些缺点所致。
让我们来看看计算趋势的发展历史,以便了解计算的格局在过去20年中的变化。
这个趋势是当网络成本更低时(1990年代)对URI索引(Reference),当存储成本更低时(2000 年代)进行复制(Replicate),以及当内存成本更低时(2010 年代)进行再计算(Recompute),如图2-5 所示:
image

图2-5 计算的趋势
那么,在一段时间里有哪些东西真正改变了?
磁带已经消亡,磁盘已成为磁带,SSD 几乎成为磁盘。现在,当前的趋势是把数据缓存在内存中。
让我们来了解一下,为什么基于内存的计算很重要,以及它如何能产生显著的性能优势。
图2-6显示了从各种介质到CPU的数据传输速率。磁盘到CPU的传输速率为100 MB/s,SSD到CPU为600 MB/s,通过网络到CPU为1 MB到1 GB/s。然而,RAM到CPU的传输速度惊人地快,达到了10 GB/s。所以,理想的思路是把所有或部分数据缓存到内存里,以便实现更高的性能:
2.2.1 Spark 的发展历史
Spark 始于 2009 年,起初是作为加州大学伯克利分校 RAD 实验室的一个研究项目,该实验室就是 AMPLab 的前身。该实验室的研究人员以前一直在使用 Hadoop MapReduce,并观察到 MR 对于迭代和交互式计算工作是低效率的。因此,从一开始,Spark 被设计为快速进行交互式查询和迭代的算法,采用了支持内存存储和高效故障恢复等一些思路。
image

图2-6 为什么采用基于内存的计算
在2011年,AMPLab开始在Spark上开发更高级的组件,如Shark和Spark Streaming。这些组件有时被称为Berkeley数据分析框架(Berkeley Data Analytics Stack,BDAS)。
Spark于2010年3月首次开源,并于2013年6月被转移到Apache软件基金会。
到2014年2月,它成为了Apache软件基金会的一个顶级项目。Spark已经成为大数据领域最大的开源社区之一。现在,有超过50个组织里的超过250位贡献者正在为Spark开发做出贡献。它的用户群增长迅猛,包括了从小型公司到财富500强公司。图2-7显示了 Apache Spark的发展历史:
image

图2-7 Apache Spark 的发展历史
2.2.2 Apache Spark 是什么
让我们来了解一下Apache Spark 是什么,以及是什么使之成为大数据分析的利器:
Apache Spark 是一个快速的企业级大规模数据处理引擎,它可以与Apache Hadoop 进行互操作。
它是用 Scala 编写的。Scala 是一种兼顾了面向对象和函数式的编程语言,它在 JVM 中运行。
Spark 让应用程序在处理过程中能够可靠地在内存中分发数据。这是 Spark 性能的关键,因为它让应用程序能够避免低效率的磁盘访问,并以内存速度进行计算。
通过让每次迭代都通过内存访问数据,它能够适用于迭代算法。
相比 MR ,Spark 程序在内存存储模式下执行的速度快 100 倍,在磁盘存储模式下的速度快 10 倍(来源 http://spark.apache.org/ )。
通过 Scala、Python 和 R 的交互式 shell,它为 Java、Scala、Python 和 R 语言提供了本地支持。开发它的应用程序是比较容易的,并且需要的代码量通常可以减少 2 到 10 倍。
Spark 提供了一系列的库,包括用于交互式分析的 Spark SQL 和 DataFrame、用于机器学习的 MLlib、用于图形处理的 GraphX 和用于实时分析的 Spark Streaming。你可以在同一个应用程序中无缝地组合这些功能。
Spark 可以运行在 Hadoop、Mesos、 Standalone 集群管理器,内部硬件系统或云计算平台上。
2.2.3 Apache Spark 不是什么
Hadoop 提供了用于存储的 HDFS 和用于计算的 MR。但是,Spark 不提供任何特定的存储介质。Spark 主要是一个计算引擎,但你可以把数据存储在内存里或 Tachyon 上进行处理。
Spark 具有从存储在 HDFS 或 Hadoop API 支持的其他存储系统(包括你的本地文件系统、Amazon S3、Cassandra、Hive、HBase、Elasticsearch 等)中的任何文件创建分布式数据集的能力。
重要的是要注意 Spark 不是 Hadoop,也不需要 Hadoop 来运行它。它只是为那些实现了 Hadoop API 的存储系统提供支持而已。Spark 支持文本文件、序列文件、Avro、Parquet 和其他任何 Hadoop 输入格式。
Spark是否会替代Hadoop?
Spark旨在与Hadoop互操作。它不是Hadoop的替代品,但它替代了Hadoop 上的MR框架。把MR作为引擎的所有Hadoop处理框架(Sqoop、Hive、Pig、Mahout、Cascading和Crunch),现在都把Spark作为附加的处理引擎。
2.2.4 MapReduce 的问题
在性能和把业务问题转换为 MR 问题方面,MR 开发人员都面临着一些挑战。让我们来了解这些与 MR 相关的问题。以及如何在 Apache Spark 中解决这些问题:
MR为每个映射器和化简器创建单独的 JVM。启动 JVM 需要相当长的时间。
MR 代码需要大量的样板代码。程序员需要从映射(map)和化简(reduce)的角度来考虑并设计每个业务问题,这使得它成为一种非常难以开发的程序。光靠一个 MR 作业很少能进行完整的计算。你需要多个 MR 作业来完成整个任务,并且需要在所有层次都设计并跟踪优化情况。Hive 和 Pig 解决了这个问题。但是,它们不一定适合所有的用例。
MR 作业会在每个作业之间将数据写入磁盘,因此不适合迭代处理。
更高级别的抽象(如 Cascading 和 Scalding)能为 MR 作业提供更好的编程手段。但是,这样并不会产生任何额外的性能优势。
MR 也没有提供理想的 API。
MR速度缓慢是因为 MR 作业中的每个作业都把数据存储在磁盘上。对同一数据集的多个查询会分别读取数据,产生大量的磁盘读写,如图2-8 所示:
image

图2-8 MapReduce对比Apache Spark
Spark 将 MR 的概念提升到更高水平,将中间数据存储在内存中,并根据需要多次重复使用。这样就在内存速度下提供了高性能,如图2-8 所示。
如果我只有一个MR作业,它的表现会与Spark一样吗?
不,由于在内存中计算和混排(shuffle)的改进,Spark作业的性能是优于MR作业的。即使禁用内存缓存,Spark的性能也优于MR。它新的混排实现方法(基于排序的混排而不是基于散列的混排)、新的网络模块(基于 netty 而不是使用block manager发送混排数据)和新的外部混排服务,让Spark能执行最快的PB级排序(在190个节点上,用46 TB RAM)和TB级排序。Spark使用206个EC2 i2.8xlarge机器在23分钟内排序了100 TB的数据。以前的世界纪录是72分钟,由一个2100节点的Hadoop MR集群完成。这意味着Spark使用少10倍的机器将相同数据排序的速度快了3倍。所有的排序都在磁盘(HDFS)上进行,没有使用 Spark的内存缓存(来源:https://databricks.com/blog/2014/10/10/spark-petabyte-sort.html)。
image

相关文章
|
7月前
|
机器学习/深度学习 分布式计算 算法
Spark快速大数据分析PDF下载读书分享推荐
《Spark快速大数据分析》适合初学者,聚焦Spark实用技巧,同时深入核心概念。作者团队来自Databricks,书中详述Spark 3.0新特性,结合机器学习展示大数据分析。Spark是大数据分析的首选工具,本书助你驾驭这一利器。[PDF下载链接][1]。 ![Spark Book Cover][2] [1]: https://zhangfeidezhu.com/?p=345 [2]: https://i-blog.csdnimg.cn/direct/6b851489ad1944548602766ea9d62136.png#pic_center
228 1
Spark快速大数据分析PDF下载读书分享推荐
|
4月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
241 6
|
4月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
111 2
|
3月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
185 2
|
3月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
179 1
|
6月前
|
分布式计算 Hadoop 大数据
Spark 与 Hadoop 的大数据之战:一场惊心动魄的技术较量,决定数据处理的霸权归属!
【8月更文挑战第7天】无论是 Spark 的高效内存计算,还是 Hadoop 的大规模数据存储和处理能力,它们都为大数据的发展做出了重要贡献。
109 2
|
7月前
|
分布式计算 Hadoop 大数据
Hadoop与Spark在大数据处理中的对比
【7月更文挑战第30天】Hadoop和Spark在大数据处理中各有优势,选择哪个框架取决于具体的应用场景和需求。Hadoop适合处理大规模数据的离线分析,而Spark则更适合需要快速响应和迭代计算的应用场景。在实际应用中,可以根据数据处理的需求、系统的可扩展性、成本效益等因素综合考虑,选择适合的框架进行大数据处理。
|
6月前
|
存储 分布式计算 资源调度
Hadoop生态系统概览:从HDFS到Spark
【8月更文第28天】Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。它由多个组件构成,旨在提供高可靠性、高可扩展性和成本效益的数据处理解决方案。本文将介绍Hadoop的核心组件,包括HDFS、MapReduce、YARN,并探讨它们如何与现代大数据处理工具如Spark集成。
450 0
|
6月前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
107 0
|
8月前
|
分布式计算 资源调度 Hadoop
Java大数据处理:Spark与Hadoop整合
Java大数据处理:Spark与Hadoop整合

相关实验场景

更多