Hadoop vs Spark:面对面比较
hadoop和spark是由apache软件基金会开发的广泛使用的开源框架,用于大数据架构。
我们现在真正处于“大数据”现象的核心,公司不能再忽视数据对他们决策的影响。
作为提醒,被认为是“大数据”的数据必须满足三个标准:速度、速度和多样性。然而,您无法使用传统的系统和技术处理大数据。
正是为了解决这个问题,apache软件基金会提出了最常用的解决方案,即hadoop和spark。
然而,对于新手来说,理解这两种技术是很困难的。为了消除所有疑问,在本文中,了解hadoop和spark之间的关键区别以及何时应选择其中之一或同时使用。
hadoop
hadoop是一个由多个模块组成的软件实用程序,形成了一个用于处理大数据的生态系统。hadoop用于这种处理的原则是将数据分布式分发以并行处理。
hadoop的分布式存储系统设置由多台普通计算机组成,从而形成了多个节点的集群。采用此系统使得hadoop能够通过同时、快速、高效地执行多个任务来高效处理大量可用数据。
使用hadoop处理的数据可以采用多种形式。它们可以像excel表或传统dbms中的表一样结构化。这些数据还可以以半结构化方式呈现,例如json或xml文件。hadoop还支持无结构的数据,如图像、视频或音频文件。
主要组件
hadoop的主要组件包括:
- hdfs或hadoop分布式文件系统是hadoop用于执行分布式数据存储的系统。它由包含群集元数据的主节点和存储数据本身的多个从节点组成;
- mapreduce是用于处理这些分布式数据的算法模型。这种设计模式可以使用多种编程语言实现,如java、r、scala、go、javascript或python。它在每个节点内并行运行;
- hadoop common,其中包含多个实用程序和库支持其他hadoop组件;
- yarn是一个编排工具,用于管理hadoop集群上的资源和每个节点执行的工作负载。自此框架的2.0版本起,它还支持mapreduce的实现。
apache spark
apache spark是一个开源框架,最初由计算机科学家matei zaharia在他的博士学位项目中于2009年创建。然后他在2010年加入了apache软件基金会。
spark是一种分布式计算和数据处理引擎,以分布式方式分布在多个节点上。spark的主要特点是执行内存处理,即它使用内存缓存和处理在集群中分布的大数据。这使其具有更高的性能和更高的处理速度。
spark支持多种任务,包括批处理、实时流处理、机器学习和图计算。我们还可以处理来自多个系统的数据,例如hdfs、rdbms甚至nosql数据库。spark的实现可以使用多种语言,如scala或python。
主要组件
apache spark的主要组件包括:
- spark core是整个平台的通用引擎。它负责计划和分发任务,协调输入/输出操作或从任何故障中恢复;
- spark sql是提供rdd模式的组件,支持结构化和半结构化数据。特别是,它可以通过执行sql或提供对sql引擎的访问来优化结构化类型数据的收集和处理;
- spark streaming允许流数据分析。spark streaming支持来自不同源(如flume、kinesis或kafka)的数据;
- mlib是apache spark的内置机器学习库。它提供多个机器学习算法以及创建机器学习流水线的多个工具;
- graphx在分布式架构中结合了一组用于进行建模、计算和图分析的api。
hadoop与spark的区别
spark是一个大数据计算和数据处理引擎。理论上,它有点像hadoop的mapreduce,但速度更快,因为它在内存中运行。那么是什么让hadoop和spark不同呢?让我们来看一下:
- spark更高效,特别是由于内存处理,而hadoop则批处理;
- 从成本的角度来看,spark更昂贵,因为它需要大量的ram来保持性能。而hadoop只依赖于普通机器进行数据处理;
- hadoop更适用于批处理,而spark在处理流数据或非结构化数据流时更合适;
- hadoop更具容错性,因为它持续复制数据,而spark使用可靠分布式数据集(rdd),它本身依赖于hdfs;
- hadoop更具可伸缩性,只需在现有机器不足时添加另一台机器。spark依赖于其他框架(如hdfs)的系统来扩展。
因素 | hadoop | spark |
处理 | 批处理 | 内存处理 |
文件管理 | hdfs | 使用hadoop的hdfs |
速度 | 快 | 快10到1000倍 |
语言支持 | java、python、scala、r、go和javascript | java、python、scala和r |
容错性 | 更高 | 更低 |
成本 | 成本较低 | 成本较高 |
可伸缩性 | 更可伸缩 | 更不可伸缩 |
hadoop适用于
hadoop是一个很好的解决方案,如果处理速度不是关键的话。例如,如果数据处理可以在夜间完成,那么考虑使用hadoop的mapreduce是有意义的。
hadoop允许您将大型数据集从数据仓库卸载,因为在数据仓库中进行处理相对困难,而hadoop的hdfs为组织提供了更好的存储和处理数据的方式。
spark适用于:
spark的弹性分布式数据集(rdd)允许多个内存中的映射操作,而hadoop mapreduce必须将中间结果写入磁盘,这使得spark成为实时交互式数据分析的首选选项。
spark的内存处理和对分布式数据库(如cassandra或mongodb)的支持是数据迁移和插入的优秀解决方案-当从源数据库检索数据并发送到另一个目标系统时。
同时使用hadoop和spark
通常情况下,您必须在hadoop和spark之间进行选择;然而,在大多数情况下,选择可能是不必要的,因为这两个框架可以很好地共存并协同工作。实际上,spark的开发主要是为了增强hadoop而不是取代它。
正如我们在前面的章节中所看到的,spark可以使用其hdfs存储系统与hadoop集成。事实上,它们都可以在分布式环境中执行更快的数据处理。同样,您可以将数据分配到hadoop上,并使用spark进行处理,或者在hadoop mapreduce中运行作业。
结论
hadoop还是spark?在选择框架之前,您必须考虑您的架构,并且构成它的技术必须与您希望实现的目标一致。此外,spark与hadoop生态系统完全兼容,并且与hadoop分布式文件系统和apache hive无缝配合工作。
您还可以探索一些大数据工具。