何时不用Hadoop?

引言

近两年来,Hadoop一直是IT行业的热门话题。每个人似乎都急于学习,安装和使用Hadoop。他们为什么不呢?IT行业就是变革。当其他人使用Hadoop时,你也要匆忙学习。但是,仅学习Hadoop是不够的,学而不思则罔。大多数人都忽略了最重要的方面,即“何时不用Hadoop以及何时使用Hadoop”

参考:5-reasons-when-to-use-and-not-to-use-hadoop

何时不用Hadoop?

“大数据”

很多人相信他们拥有真正“大”的数据, 但通常情况并非如此。 当考虑数据容量和理解大多数人对“大数据”处理的想法的时候, 我们应当参考这篇研究论文, 没有人会因为买了一个集群的服务器而被辞退,它告诉了我们一些有趣的事实。 Hadoop是被设计成用来处理在TB或PB级别的数据的, 而世界上大多数的计算任务处理的是100GB以下的输入数据。(Microsoft和Yahoo在这个数据统计上的中位数是14GB,而90% Facebook的任务处理的是100GB以下的数据)。对于这样的情况来说, 纵向扩展的解决方案就会在性能上胜过横向扩展(scale-out)的解决方案。

参考资源:

实时分析

如果你想进行一些实时分析,您希望快速获得结果,则不应直接使用Hadoop。这是因为Hadoop的计算任务要在map和reduce上花费时间, 并且在shuffle阶段还要花时间。 这些过程都不是可以在限定时间内可以完成的, 所以Hadoop并不适合用于开发有实时性需求的应用。

下图说明了如何在Hadoop中使用MapReduce完成处理。

实时分析 - 行业认可的方式

由于Hadoop不能用于实时分析,因此人们探索并开发了一种新方法,使用Hadoop(HDFS)的强大功能并实时处理。因此,业界公认的方法是将大数据存储在HDFS中并在其上安装Spark。通过使用spark,可以实时和快速地完成处理(真正快速)。
在Hadoop HDFS中存储大数据

根据记录,据说Spark比Hadoop快100倍。哦,是的,我说快了100倍不是拼写错误。下图显示了MapReduce处理和使用Spark处理之间的比较
MapReduce处理与使用Spark处理

我拿了一个数据集并逐个执行了用Mapreduce和Spark编写的行处理代码。在保持两种技术的数据集大小,逻辑等等指标不变的情况下,下面分别是MapReduce和Spark所花费的时间。

MapReduce - 14秒
火花 - 0.6秒

参考资源:

多个较小的数据集

Hadoop框架不推荐用于小型结构化数据集,因为市场上有其他工具可以比Hadoop(如MS Excel,RDBMS等)更快速,更快地完成这项工作。对于小型数据分析,Hadoop可能比其他工具。

行业认可方式:

我们是聪明人。我们总能找到更好的方法。在这种情况下,由于所有小文件(例如,服务器日常日志)具有相同的格式,结构和要对它们进行的处理是相同的,我们可以将所有小文件合并为一个大文件然后最终运行我们的MapReduce程序就可以了。
将较小的文件合并为一个大文件

为了证明上述理论,我们进行了一个小实验。

下图说明了相同的内容:
小转大

我们分别获取了9个x mb的文件。由于这些文件很小,我们将它们合并为一个大文件。整个尺寸为9x mb。(非常简单的数学:9 * x mb = 9x mb)

最后,我们编写了一个MapReduce代码并执行了两次。

首次执行(输入为小文件):
输入数据:每个x mb各9个文件
输出:4225284条记录
所用时间:10400毫秒
第二次执行(输入为一个大文件):
输入数据:每个9x mb的1个文件
输出:4225284条记录
所用时间:6140毫秒
因此,您可以看到第二次执行所花费的时间少于第一次。因此,它证明了这一点。

参考资源:

安全是主要关注点

许多企业特别是在处理敏感数据的高度监管行业中 - 无法像实施大数据项目和Hadoop那样快速地移动。

行业认可的方式

有多种方法可以确保您的敏感数据在大象(Hadoop)中是安全的。

在迁移到Hadoop时加密您的数据。您可以使用任何加密算法轻松编写MapReduce程序,该算法对数据进行加密并将其存储在HDFS中。
最后,您使用数据进行进一步的MapReduce处理以获得相关的见解。

Hadoop分析集成

我知道并使用过的另一种方法是在Hadoop之上使用Apache Accumulo。Apache Accumulo是排序的,分布式键/值存储是一个健壮,可扩展,高性能的数据存储和检索系统。

他们错过了在定义中提到它实现了一种称为单元级安全性的安全机制,因此它成为一个关注安全性的好选择。
Hadoop分析集成1

参考资源:

MapReduce的模板

很多的计算任务、工作及算法从本质上来说就是不适合使用MapReduce框架的。 某些计算任务需要上一步计算的结果来进行当前一步的计算。一个数学上的例子就是斐波那契数列的计算。 某些机器学习的算法,如梯度和最大期望等,也不是很适合使用MapReduce的模式。很多研究人员已经对实现这些算法中需要的特定优化和策略(全局状态,计算时将数据结构传入进行引用等)给出了建议,但是如果用Hadoop来实现具体算法的话,还是会变得很复杂而且不易被理解。
一句话总结:对于那些不适合使用MapReduce分割、合并原则的计算任务,如果用Hadoop来实现他们的话,会让Hadoop的使用变得大费周折。

参考资源:

何时用Hadoop?

数据大小和数据多样性

当您处理来自各种来源和各种格式的大量数据时,您可以说您正在处理大数据。在这种情况下,Hadoop是适合您的技术。
何时使用Hadoop

未来规划

这就是为将来可能面临的挑战做好准备。如果您预计Hadoop是未来的需求,那么您应该做出相应的计划。要在您的数据上实现Hadoop,您应该首先了解数据的复杂程度以及数据的增长速度。因此,您需要进行群集规划。它可以从您的行业中根据目前可用的数据(以GB或少量TB)构建小型或中型集群开始,并根据数据的增长在未来扩展您的集群。
集群规划

参考资源:

大数据的多个框架

有各种各样的工具用于各种目的。Hadoop可以与多种分析工具集成以充分利用它,例如Mahout for Machine-Learning,R和Python for Analytics and visualization,Python,Spark for real time processing,MongoDB和Hbase for Nosql database,Pentaho for BI等。

Hadoop集成

参考资源:

终身数据可用性

当您希望数据生存并永久运行时,可以使用Hadoop的可扩展性来实现。您可以拥有的群集大小没有限制。您可以根据需要随时以最小的成本添加数据节点来增加大小。

终身数据可用性
底线是根据您的需要使用正确的技术。

参考资源:

温馨提示

学习Hadoop及其生态系统工具并确定哪种技术适合你的需求是一个复杂的过程。理清你拥有的各种资源,并且理解想要解决的问题的本质。在某些情况下, 最终的解决方案很有可能是Hadoop。

你在使用Hadoop方面有哪些经验和教训? 欢迎在评论中讨论分享。

猜你喜欢

转载自blog.csdn.net/rainbowzhouj/article/details/81738466