应该在什么时候使用Hadoop
应该在什么时候使用Hadoop
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs有人问我,“你在大数据和Hadoop方面有多少经验?”我告诉他们,我一直在使用Hadoop,但是我处理的数据集很少有大于几个TB的。
他们又问我,“你能使用Hadoop做简单的分组和统计吗?”我说当然可以,我只是告诉他们我需要看一些文件格式的例子。
他们递给我一个包含600MB数据的闪盘,看起来这些数据并非样本数据,由于一些我不能理解的原因,当我的解决方案涉及到pandas.read_csv文件,而不是Hadoop,他们很不愉快。
Hadoop实际上是有很多局限的。Hadoop允许你运行一个通用的计算,下面我用伪码进行说明:
Scala风格的伪码:
collection.flatMap( (k,v) => F(k,v) ).groupBy( _._1 ).map( _.reduce( (k,v) => G(k,v) ) )
SQL风格的伪码:
SELECT G(...) FROM table GROUP BY F(...)
目标:计算图书馆书籍的数量
Map:你统计奇数书架上书的数量,我统计偶数书架上书的数量。(人越多,统计越快)
Reduce:把我们单独统计后的数据加在一起。
我们所做的只有两个:F(k,v)和G(k,v),除开在中间步骤中的性能优化,一切都是固定的。
它会迫使你在Map中进行所有的计算,分组和统计,执行运算的方式像是穿上了紧身衣,其实很多计算更适合选用其它模型。穿上紧身衣的唯一原因是这可能会扩展到非常大的数据集上,而大多数情况下,你的数据量可能会小几个数量级。
但是由于“大数据”和“Hadoop”这两个热门词,即使很多人实际上不需要Hadoop,他们也愿意穿上“紧身衣”。
一、如果我的数据量是几百兆,Excel可能没法加载它
对于Excel软件来说的“很大的数据”并非大数据,其实还有其它极好的工具可以使用——我喜欢的Pandas。Pandas构建于Numpy库之上,可以以矢量格式的方式有效地把数百兆的数据载入到内存中。在我购买已3年的笔记本上,它可以用Numpy在一眨眼的功夫把1亿的浮点数乘在一起。Matlab和R也是极好的工具。
对于几百兆的数据量,典型的做法是写一个简单的Python脚本按行读取文件行,并处理它,向另一个文件写入。
二、如果我的数据是10GB呢
我买了个新笔记本,它有16GB的内存和256GB的SSD。如果你要载入一个10GB的CSV文件到Pandas,它占用的内存实际上是很小的——其结果是以数字类型的字符串保存的,如“17284832583”作为4字节货8字节的整数,或存储“284572452.2435723”字符串作为8字节的双精度浮点数。
最坏的情况是你或许不能把所有的数据都同时载入到内存中。
三、如果我的数据是100GB、500GB或1TB呢
买个2TB或4TB的硬盘,在桌面PC或服务器上安装一个Postgre来解决它。
四、Hadoop远远比不上SQL或Python脚本
在计算的表达方面,Hadoop弱于SQL,也弱于Python脚本。
SQL是一个很直接的查询语言,适合做业务分析,SQL的查询相当简单,而且还非常快——如果你的数据库使用了正确的索引,二级查询或多级查询另当别论。
Hadoop没有索引的概念,Hadoop只有全表扫描,Hadoop有高度泄露抽象——我花了很多时间来处理Java的内存错误、文件碎片以及集群竞争,这些时间远大于我花在数据分析上的时间。
如果你的数据并不是像SQL表那样的结构化数据(比如纯文本、JSON对象、二进制对象),通常是直接写一个小的Python脚本来按行处理你的数据。把数据存储于文件,处理每一个文件,等等。如果换成是Hadoop就很麻烦。
相比于SQL或Python脚本,Hadoop要慢的多。正确的使用索引后,SQL查询总是非快——PostgreSQL简单的查找索引,检索确切的键值。而Hadoop是全表扫描的,它会把整个表进行重新排序。通过把数据表分片到多台计算机上后,重排序是很快的。另一方面,处理二进制对象,Hadoop需要重复往返于命名节点,目的是查找和处理数据。这适合用Python脚本来实现。
五、我的数据超过了5TB
你应该考虑使用Hadoop,而无需做过多的选择。
使用Hadoop唯一的好处是可伸缩性非常好。如果你有一个包含了数TB数据的表,Hadoop有一个适合全表扫描的选项。如果你没有这样大数据量的表,那么你应该像躲避瘟疫那样避免使用Hadoop。这样使用传统的方法来解决问题会更轻松。
六、Hadoop是一个极好的工具
我并不讨厌Hadoop,当我用其它工具不能很好处理数据时我会选择Hadoop。另外,我推荐使用Scalding,不要使用Hive或Pig。Scalding支持使用Scala语言来编写Hadoop任务链,隐藏了其下的MapReduce。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《大数据分析:点“数”成金》----第三章:大数据与商业案例
第3章 大数据与商业案例 从 时髦概念到实际应用,大数据只用了很短的时间就完成了这个华丽的转身。曾经,不计其数的组织机构砸下重金研发大数据的周边技术。但现在,他们已将重心转移到发掘大数据真正的价值上来。 即便如此,就像当初那些颠覆性技术给不少IT(信息技术)管理人员带来的困惑,如今依然有许多人对大数据深存疑虑。大数据具有颠覆性,正如它颠覆了商业活动中BI的应用方式一样,对于许多高管而言,这是一个具有风险的命题。 CTO(首席技术官)、CIO(首席信息官)和IT管理人员在努力证明颠覆性技术的确能够促进商业活动的发展,大数据技术的出现却让他们陷入了尴尬的境地。加之企业自行处理大数据所产生的高昂成本,以及对非业务现场大数据分析过程安全性的担心,使这一情况变得更加复杂。 可能“大数据”这个词本身也导致了人们对它的误解。没有技术背景的人们也许只是从字面意思出发,认为“大数据”与“大问题”、“大成本”如影随形。大数据依赖企业的人员、技术和目标,它是为了实现特定目标并需要人工参与的一项技术。因此,综合考虑这些因素,在构建一项商业提案的时候,需要把大数据解读成“大数据分析”,才能赢得那些审慎的决策者...
- 下一篇
Security in Hadoop
Data is growing at an increasing rate, and processing and storing that data is a real issue that present and future generations will have to deal with. Hadoop, Apache's open source implementation of Google's MapReduce, can scale both storage space and processing power almost indefinitely across a large dataset. This is achieved by how Hadoop distributes data across its nodes, and then that it distributes the work out to the nodes. The data is processed in manageable chunks by 'mappers', and then...
相关文章
文章评论
共有0条评论来说两句吧...