相反,我认为Hadoop很棒。 但是,它并不能证明Hadoop出现了一些公然的失败,可能是架构,概念上或文档上的明智选择。 Hadoop的普及不应使它免受Hadoop实施中的重新设计和返工问题的需要。 以下几点是基于几个月来围绕Hadoop进行探索和黑客攻击的。 挖吧。
- 我听到有人说“数据本地性”吗?
Hadoop一次又一次地在数据局部性方面。 在Hadoop挤奶者举办的一些讲习班中,他们只是继续进行下去。 他们说,Hadoop将尽可能尝试通过HDFS在该节点本地存储的数据块上启动任务。 这听起来像是一项超级功能,不是吗? 它节省了大量带宽,而无需传输TB的数据,对吗? 地狱,不。 它不是。 这意味着首先必须找到一种将数据导入HDFS(Hadoop分布式文件系统)的方法。 除非您生活在过去的十年中,并且所有数据都以文件形式存在,否则这并非易事。 假设您这样做了,让我们将数据的TB转移到HDFS。 现在,它将开始完成整个“数据局部性”工作。 嗯,好。 我是否被一波光辉打动了,还是应该做什么? 让我们弄清事实。 要使用Hadoop,我们的问题应该能够并行执行。 如果问题或至少一个子问题无法并行化,它将不会从Hadoop中获得太多收益。 这意味着任务算法独立于它处理的数据的任何特定部分。 这将进一步简化,也就是说,任何任务都可以处理数据的任何部分。 那么,这是否意味着显而易见的事情就是“数据局部性”? 为什么,Hadoop开发人员甚至会编写一些代码,使某任务在另一个节点上处理数据,除非出现严重错误。 该功能将是如果这样做否则! 如果任务已完成对节点本地数据的操作,然后又从另一个节点传输数据并处理该数据,那将是难题的一个重要特征。 至少那是值得的。
- 你能把所有东西都放回文件中吗
您在数据库中是否有结构良好的数据? 也许,您变得有点幻想,并使用了最新最好的NoSQL数据存储? 现在让我写下您的想法。 “好吧,让我们来运行一些Hadoop作业,因为我想在我的数据中找到所有这些隐藏的金矿,这将使我成为《福布斯》的头版。” 我听到你了 让我们滚动一些Hadoop作业。 可是等等! 什么…..? 为什么所有样本都在文本文件中。 使用CSV文件,制表符分隔文件,空格分隔文件以及所有其他类型的整洁文件的大量示例。 为什么每个人都回溯几十年并再次使用文件? 所有这些家伙都没有听说过DB和所有这些花哨的东西。 看来您采用数据存储还为时过早。 文件是Hadoop世界的英雄。 如果您想快速,轻松地使用Hadoop,那么正确的最佳选择是将数据整齐地导出到文件中,并运行所有那些令人眼花word乱的字数示例(Pun打算这样做!)。 因为没有文件,Hadoop无法完成所有很酷的“数据局部性”。 一切都必须首先放在HDFS中。 那么,您将如何分析假设的FUHadoopDB中的数据? 首先,实现大约10多个必要的类,以将数据拆分并传输到Hadoop节点并运行您的任务。 Hadoop需要知道如何从FUHadoopDB中获取数据,因此我们假设这是可以接受的。 现在,如果不将其存储在HDFS中,则不会丢失数据本地性。 在这种情况下,任务运行时,他们自己将不得不从FUHadoopDB中提取数据来处理数据。 但是,如果您想使数据位置变得混乱,则需要从FUHadoopDB中提取数据并将其存储在HDFS中。 您不会招致任务运行时提取数据的损失,但是会在作业准备阶段以将数据传输到HDFS的形式支付。 哦,我是否提到了在HDFS中存储相同数据所需的额外磁盘空间。 我想节省磁盘空间,所以我选择让我的任务在运行任务时提取数据。 这是你的选择。
- Java是与操作系统无关的,不是吗?
Java有其缺陷,但是在大多数情况下,它可以在大多数操作系统上顺利运行。 即使存在某些操作系统问题,也可以轻松解决。 Hadoop的人们大多基于Linux环境发布了文档。 他们说Windows受支持,但是由于没有提供足够的文档而忽略了那些无知的人。 Windows甚至没有使它进入推荐的生产环境。 它可以用作开发平台,但是随后您必须将其部署在Linux上。 我当然不是Windows迷。 但是,如果我编写Java程序,我会费心地使其在Windows上运行。 如果没有,为什么还要使用Java? 为什么要搞出怪异的字节码呢? 哦,所有想出字节码和JVM并没有浪费的好人的不眠之夜。
- CS 201:面向对象的编程
如果您尝试将Hadoop集成到平台中,请再考虑一下。 让我自由输入您的想法。 “让我们扩展一些接口并插入我的身份验证机制。 它应该很容易。 我的意思是这些家伙设计了世界上最伟大的软件,可以消除世界的饥饿。” 我又听到你了 如果您打算这样做,请不要这样做。 就像那里的OOP反图案101。 如此多的地方会说“ if(kerberos)”并执行一些特定于安全性的功能。 我的一位同事经历了这一痛苦,最终决定为他的软件编写基于keberos的身份验证,然后使其与Hadoop一起使用更容易。 拥有权利的同时也被赋予了重大的责任。 Hadoop无法履行此职责。
即使存在这些问题,Hadoop的流行似乎也引起了极大的关注,这是理所应当的。 它应该具有大数据分析能力。 但是我认为它太流行了,太快了。 Hadoop社区需要进一步改进这一出色的软件。
参考: Hadoop中的问题–何时无法交付? 来自我们的JCG合作伙伴 Mackie Mathew在dev_religion博客上
翻译自: https://www.javacodegeeks.com/2012/03/problems-in-hadoop-when-does-it-fail-to.html