带你对比Hadoop MapReduce与Apache Spark

文章来源:加米谷大数据
Hadoop和Spark是大数据生态系统中流行的apache项目 。 ApacheSpark是对hadoop大数据生态系统的原始HadoopMapReduce组件的改进 。 ApacheSpark令人兴奋 , 因为它在内存数据集的交互式数据查询以及多遍迭代机器学习算法中提供了真正的优势 。 但是 , 关于Spark是否可以通过取代它并成为顶级大数据分析工具而对ApacheHadoop构成挑战 , 这引起了激烈的争论 。 详细说明的是关于SparkHadoop比较的详细讨论 , 可帮助用户理解为何spark比Hadoop更快 。
ApacheSpark与Hadoop大数据世界中有多种方法使ApacheHadoop成为迭代数据处理 , 交互式查询和即席查询的理想选择 。 每个Hadoop用户都知道HadoopMapReduce框架主要用于批处理这一事实 , 因此不适合将HadoopMapReduce用于机器学习过程 , 临时数据探索和其他类似过程 。
大多数大数据供应商都在努力寻找可解决此难题的理想解决方案 , 这为要求非常高且受欢迎的名为ApacheSpark的替代方案的出现铺平了道路 。 与MapReduce相比 , Spark使得开发完全是一项令人愉快的活动 , 并具有更好的性能执行引擎 , 同时使用相同的存储引擎HadoopHDFS来执行海量数据集 。
SparkHadoop比较
在我们进一步讨论什么使HadoopMapReduce具有ApacheSpark的能力之前 , 让我们简要地了解ApacheSpark的实际含义 , 然后继续理解两者之间的区别 。
Hadoop的用户友好界面简介-ApacheSparkSpark是由加州大学伯克利分校AMP实验室的50家公司的近250位开发人员共同开发的一种快速集群计算系统 , 它可以使数据分析变得更快 , 更容易编写和运行 。
ApacheSpark是可免费下载的开放源代码 , 因此使它成为分布式编程框架(即大数据)的用户友好界面 。 Spark遵循通用执行模型 , 该模型有助于内存计算和任意运算符图的优化 , 因此与基于磁盘的引擎(如MapReduce)相比 , 查询数据变得更快 。
ApacheSpark拥有一个设计良好的应用程序编程接口 , 该接口由各种并行集合组成 , 这些集合具有诸如groupByKey , Map和Reduce之类的方法 , 因此您仿佛在本地编程 。 使用ApacheSpark , 您可以使用功能性编程语言Scala编写面向集合的算法 。
为什么开发ApacheSpark?谷歌设想并成功实施了HadoopMapReduce , 而ApacheHadoop是一个非常著名且广泛使用的执行引擎 。 您会发现几个应用程序 , 它们与如何将其工作分解为一系列MapReduce作业的条件相似 。 所有这些实时应用程序都必须继续运行 , 而无需进行任何更改 。
但是 , 用户一直抱怨HadoopMapReduce存在高延迟问题 , 因为在处理和分析数据时 , 所有这些实时应用程序的批处理模式响应都非常痛苦 。
现在 , 这为HadoopSpark铺平了道路 , 后者是继续系统 , 比HadoopMapReduce更强大 , 更灵活 。 尽管事实可能并非所有将来的分配或现有应用程序都完全放弃HadoopMapReduce , 但是大多数未来应用程序仍有一定余地可以利用通用执行引擎(如HadoopSpark)附带还有更多创新功能 , 可以完成比MapReduceHadoop更大的成就 。
ApacheSpark与Hadoop-为什么Spark比hadoop快?ApacheSpark是一个开源独立项目 , 旨在与HDFS共同发挥作用 。 到目前为止 , ApacheSpark拥有庞大的声音贡献者和用户社区 , 这是因为使用Scala使用Spark编程更容易 , 并且比磁盘和内存中的HadoopMapReduce框架要快得多 。
因此 , HadoopSpark只是未来大数据应用程序的合适选择 , 这些应用程序可能需要更低的延迟查询 , 迭代计算以及对相似数据的实时处理 。
相对于HadoopMapReduce框架 , HadoopSpark在其可以处理的大量计算工作负载以及执行批处理作业的速度方面具有许多优势 。
Hadoop和Spark之间的区别带你对比Hadoop MapReduce与Apache Spark
文章图片

带你对比Hadoop MapReduce与Apache Spark
文章图片

i)Hadoop与Spark性能
据说仅通过减少对磁盘的读写次数 , HadoopSpark即可执行比HadoopMapReduce框架快约10至100倍的批处理作业 。
在使用MapReduce的情况下 , 将执行以下MapandReduce任务 , 随后将出现同步障碍 , 并且需要将数据保存到磁盘 。 开发MapReduce框架的功能是为了在出现故障的情况下可以恢复作业 , 但是这样做的缺点是 , 它没有最大程度地利用Hadoop群集的内存 。
不过 , 借助HadoopSpark , RDD(弹性分布式数据集)的概念使您可以将数据保存在内存中 , 并且仅在需要时才将其保存到磁盘上 , 并且它不具有任何类型的同步障碍 , 可能会减慢数据传输速度 。 处理 。 因此 , 使用内存时 , Spark的通用执行引擎比HadoopMapReduce快得多 。
ii)HadoopMapReduce与Spark-轻松管理与HadoopSpark一样 , 组织现在可以轻松地简化其用于数据处理的基础架构 , 因为现在可以在同一群集中执行流式处理 , 批处理和机器学习 。
大多数实时应用程序都使用HadoopMapReduce生成报告 , 以帮助找到历史查询的答案 , 然后完全延迟另一个将处理流处理的系统 , 以便实时获取关键指标 。 因此 , 组织应该管理和维护单独的系统 , 然后为两个计算模型开发应用程序 。
但是 , 使用HadoopSpark可以消除所有这些复杂性 , 因为可以在同一系统上同时实现流处理和批处理 , 从而简化了应用程序的开发 , 部署和维护 。 使用Spark可以控制各种工作负载 , 因此 , 如果同一流程中的各种工作负载之间存在交互 , 则更容易管理和保护此类工作负载 , 这是MapReduce的局限性 。
iii)SparkvsMapreduce–处理流的实时方法在使用HadoopMapReduce的情况下 , 您只需要处理一批存储的数据 , 但是使用HadoopSpark , 也可以通过SparkStreaming实时修改数据 。
使用SparkStreaming , 可以通过各种软件功能传递数据 , 例如在收集数据时进行数据分析 。
带你对比Hadoop MapReduce与Apache Spark
文章图片

开发人员现在也可以使用ApacheSpark进行图形处理 , 该处理可在各种实体(例如人和对象)之间映射数据中的关系 。 组织还可以将ApacheSpark与预定义的机器学习代码库结合使用 , 以便可以对存储在各种Hadoop集群中的数据执行机器学习 。
iv)Spark与MapReduce-缓存与完全面向磁盘的MapReduce不同 , Spark通过在分布式工作者的内存中缓存部分结果来确保较低的延迟计算 。 与编写复杂的HadoopMapReduce管道相比 , HadoopSpark逐渐被证明可以极大地提高生产力 。
v)SparkvsMapReduce-易于使用编写Spark总是比编写HadoopMapReduce代码紧凑 。 这是一个SparkMapReduce示例-下图显示了Spark和HadoopMapReduce中的字数统计程序代码 。 如果查看这些图像 , 显然可以看出HadoopMapReduce代码更加冗长冗长 。
SparkMapReduce示例-Spark中的Wordcount程序带你对比Hadoop MapReduce与Apache Spark
文章图片

SparkMapReduce示例-HadoopMapReduce中的Wordcount程序带你对比Hadoop MapReduce与Apache Spark
文章图片

带你对比Hadoop MapReduce与Apache Spark
文章图片

SparkMapReduce比较-底线HadoopMapReduce用于不适合内存的数据 , 而ApacheSpark对于适合内存的数据具有更好的性能 , 特别是在专用集群上 。 HadoopMapReduce可以是一种经济的选择 , 因为Hadoop即服务(HaaS)和更多人员的可用性 。 根据基准测试 , ApacheSpark更具成本效益 , 但是在使用Spark的情况下 , 人员配置会很昂贵 。 ApacheSpark和HadoopMapReduce都具有容错能力 , 但是相对而言 , HadoopMapReduce比Spark具有更高的容错能力 。 就数据类型和数据源而言 , Spark和HadoopMapReduce都具有相似的兼容性 。 在ApacheSpark中进行编程比较容易 , 因为它具有交互模式 , 而HadoopMapReduce需要具有核心的Java编程技能 , 但是有多种实用程序使在HadoopMapReduce中进行编程更加容易 。 ApacheSpark是否会消除HadoopMapReduce?HadoopMapReduce被大多数用户谴责为HadoopClustering中的日志阻塞 , 原因是MapReduce以批处理模式执行所有作业 , 这意味着无法实时分析数据 。 随着HadoopSpark的问世(事实证明它是HadoopMapReduce的替代品) , 阻碍数据科学家的最大问题是Hadoopvs.Spark-谁赢得了胜利?
ApacheSpark以微批的方式执行作业 , 这些作业非常短 , 例如大约不到5秒 。 与面向实时流的Hadoop框架相比 , ApacheSpark过去一直在提供更高的稳定性方面取得了成功 。
尽管如此 , 每个硬币都有两个面 , 是的 , HadoopSpark也存在一些积压 , 例如如果中间数据大于节点的内存大小 , 则无法处理 , 节点故障时的问题 , 最重要的是成本因素 。
HadoopSpark利用日志记录(也称为“重新计算”)来提供弹性 , 以防万一发生节点故障 , 因此我们可以得出结论 , 节点故障情况下的恢复行为与以下情况相似:HadoopMapReduce除外 , 事实上恢复过程会更快 。
如果特定节点的RAM不足以存储数据分区 , Spark还具有“溢出磁盘”功能 , 从而为基于磁盘的数据处理提供了适度的降级功能 。
HadoopMapReduce相对于ApacheSpark的一大优势是 , 如果数据大小大于内存 , 则在这种情况下 , ApacheSpark将无法利用其缓存 , 并且很有可能比它慢得多 。 MapReduce的批处理 。
困惑的Hadoop与Spark–选择哪一个?
如果让您对HadoopMapReduce或ApacheSpark感到困惑的问题 , 或者说是选择基于磁盘的计算或基于RAM的计算 , 那么这个问题的答案很简单 。 这全都取决于并且这个决定所依赖的变量会随着时间而动态变化 。
【带你对比Hadoop MapReduce与Apache Spark】但是 , 当前的趋势支持诸如ApacheSpark之类的内存技术 , 因为行业趋势似乎正在为其提供积极的反馈 。 因此 , 总而言之 , 我们可以说 , 选择HadoopMapReduce与ApacheSpark取决于基于用户的情况 , 我们无法做出自主选择 。


    推荐阅读