`
datamachine
  • 浏览: 161829 次
社区版块
存档分类
最新评论

应该在什么时候使用Hadoop

 
阅读更多
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html

存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。

--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和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。


分享到:
评论

相关推荐

    hadooponwindows-master

    有些时候,我们想在自己电脑windows系统上使用hadoop,这样省去了建虚拟机的麻烦——虚拟机会占用更多电脑系统资源。 如果你也想在自己电脑的windows系统上使用hadoop,那就需要这个包来支持 否则windows系统无法...

    eclipse配置hadoop

    这个步骤与运行环境无关,只是在新建工程的时候能将 Hadoop 根目录和 lib 目录下的所有 jar 包自动导入。 5.2 创建工程 File -> New -> Project 选择“Map/Reduce Project”,然后输入项目名称,创建项目。插件会...

    hadoop3.3.4 winutils

    然而,通过自编译源码,我们可以在Windows 11平台上使用Hadoop。下面将详细讲解基于Hadoop 3.3.4在Windows 11上搭建环境的过程以及涉及的关键知识点。 1. **Hadoop 3.3.4概述**:Hadoop 3.3.4是Hadoop的一个稳定...

    hadoop常见问题及解决方法

    Hadoop是大数据处理的重要工具,但是在安装和使用Hadoop时,可能会出现一些常见的问题,这些问题可能会导致Hadoop无法正常工作,或者无法达到预期的性能。下面是Hadoop常见的问题及解决方法: 1、NameNode启动时...

    HADOOP硬实战2

    Hadoop是一个开源的MapReduce平台,设计运行在大型分布式集群环境中,提供查询和分析服务。尤其适用于大数据系统,Hadoop为苹果、eBay、LinkedIn、雅虎和Facebook等公司提供重要软件环境。它为开发者进行数据存储、...

    实验4:hadoop文件上传.docx

    10. BP(Block Pool):在 HDFS 中,每个数据块都有一个唯一的 BP 名称,该名称是在 HDFS 格式化的时候生成的字符串。 11. 数据块管理:HDFS 中的数据块是以块的形式存储的,每个块的大小可以设置。数据块的管理是 ...

    hadoop2x集成eclipse插件压缩包

    描述 "他是可以在eclipse上显示和hadoop webui一样的功能并且在下载的时候也是很方便的!" 指出,这个插件的主要优点在于它将Hadoop集群的监控和管理功能引入到Eclipse IDE中,使得开发者不必离开熟悉的开发环境就能...

    新手指导hadoop、hbase、hive版本对应关系查找表

    首先,Hadoop是一个开源框架,它允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它主要由HDFS(Hadoop Distributed File System)和MapReduce两部分构成。HBase是建立在Hadoop之上的一个开源...

    hadoop的外部依赖jar包

    有时候在eclipse上运行项目,需要引用的Hadoop的jar包,也就是hadoop的外部依赖包,有conf,fs,io,mapreduce等等,这里列举了一部分,基本上hadoop的所有外部依赖jar包都包含在内了,如果下载了不会使用,可以看我...

    Hadoop面试100题.pdf

    ### Hadoop面试100题知识点总结 #### 单选题知识点 1. **下面哪个程序负责HDFS数据存储** - **知识点说明**:在Hadoop生态系统中,HDFS (Hadoop Distributed File System) 是...在Hadoop环境中,可以使用`jps`来检查...

    Hadoop测试题

    Hadoop 测试题 Hadoop 测试题主要涵盖了 Hadoop ...33. DataNode 首次加入 cluster 的时候,如果 log 中报告不兼容文件版本,那需要 NameNode 执行“Hadoop namenode -format”操作格式化磁盘。因此,正确答案是 √。

    常见Hadoop面试题

    "Hadoop 面试题知识点总结" ...1. Client 端上传文件的时候,会将文件切分为 Block,依次上传。 Hadoop 面试题涵盖了 HDFS、MapReduce、Hive、HBase 等多个方面的知识点,对于掌握 Hadoop 技术栈非常重要。

    Hadoop 2.9.0 已废除属性集

    Hadoop是一款广泛使用的开源框架,由Apache软件基金会开发,其主要功能是可靠地存储大数据并能够在商品硬件上提供高吞吐量的数据访问。Hadoop在多个模块间分布数据,并对数据执行并行处理,以支持应用运行。随着技术...

    hadoop2.7.3 for win10 64位 bin目录

    在Windows下面使用Hadoop Java API进行开发的时候需要编译Windows版本的Hadoop,然后把下载的Hadoop/bin目录替换掉。这个资源是Windows10 64位系统下编译的hadoop 2.7.3的bin目录。下载后即可替换使用。

    Hadoop集群部署实例

    储存节点分离,计算节点结合 aws 的 Auto Scaling(自动扩容、缩容服务)以及竞价实例,动态调整,在跑任务的时候拉起一批实 例,任务跑完就自动释放掉服务器,本文记录下 Hadoop 集群的搭建过程,方便自己日后查看...

    hadoop-2.6.5 bin目录 for win10 64位

    在Windows下面使用Hadoop Java API进行开发的时候需要编译Windows版本的Hadoop/bin,这个资源是Windows10 64位系统下编译的hadoop 2.7.3的bin目录。下载Hadoop-2.6.5.tar.gz后解压然后替换bin。

    win10下hadoop-2.6.4 winutils.ext和hadoop.dll

    在Windows 10环境下搭建Hadoop 2.6.4时,可能会遇到一些特定于Windows的问题,特别是关于`winutils.ext`和`hadoop.dll`这两个文件。它们是Hadoop在Windows上运行所必需的组件,主要负责系统级别的操作,如文件系统的...

    hadoop出错解决方法

    但是在使用 Hadoop 过程中,我们经常会遇到一些错误和问题,本文将为您提供一些常见的 Hadoop 故障解决方法。 一、Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out 这个错误是由于系统默认的打开...

    hadoop介绍

    2. 文件分块存储,HDFS 上面的文件是切割成小块存储到集群的不同节点之上,这样在读取文件的时候可以从多个机器上并行读取,从而提高读取的效率。 3. 廉价的硬件设备,HDFS 的设计师能够运行在大量的廉价设备上,...

Global site tag (gtag.js) - Google Analytics