应该在什么时候使用Hadoop

  作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

  有人问我,“你在大数据和Hadoop方面有多少经验?”我告诉他们,我一直在使用Hadoop,但是我处理的数据集很少有大于几个TB的。

  他们又问我,“你能使用Hadoop做简单的分组和统计吗?”我说当然可以,我只是告诉他们我需要看一些文件格式的例子。

  他们递给我一个包含600MB数据的闪盘,看起来这些数据并非样本数据,由于一些我不能理解的原因,当我的解决方案涉及到pandas.read_csv文件,而不是Hadoop,他们很不愉快。

  Hadoop实际上是有很多局限的。Hadoop允许你运行一个通用的计算,下面我用伪码进行说明:

  Scala风格的伪码:

  SQL风格的伪码:

  目标:计算图书馆书籍的数量

  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。

时间: 2024-09-15 01:58:49

应该在什么时候使用Hadoop的相关文章

小功告成,在WIN7上配置上了HADOOP,终于可以一窥真容啦

主要参考文档: http://blog.csdn.net/ruby97/article/details/7423088 以后,慢慢熟悉具体操作吧. sky@koala /home/hadoop-0.20.2 $ cd conf sky@koala /home/hadoop-0.20.2/conf $ dos2unix hadoop-env.sh dos2unix: converting file hadoop-env.sh to Unix format ... sky@koala /home/h

Eclipse查看Hadoop源码

1.开发环境 1.Hadoop-1.2.1 2.apache-ant-1.8.0 2.新建Java项目 项目叫"Hadoop_sourcecode" 3.拷贝Hadoop中源码 Hadoop包中src文件文件夹下core.hdfs.mapred文件夹拷贝到项目的src中 4.改变目录结构 删除原来的目录结构:   增加新的目录结构:        选定后的目录结构      5.添加Jar包 需要包含进来的jar包: "\hadoop-1.2.1\lib"中所有ja

如何低成本、高效率搭建Hadoop/Spark大数据处理平台

随着人们逐渐认识到 "大数据"的价值,互联网.电商到金融业.政企等各行业开始处理海量数据.如何低成本.敏捷高效地搭建大数据处理平台,成为影响大数据创新效率的关键. 为了让用户以最简便地方式享用阿里云全球资源,在云端构建敏捷弹性.高可靠和高性价比的大数据平台,近日,阿里云在成都云栖大会上发布了一款Hadoop/Spark场景专用的ECS存储优化型实例D1规格族,单实例提供最高56核CPU,224GB内存,168TB本地盘容量,5GB/S总吞吐,PPS达120万+.这对Hadoop/Spa

Win7下安装Hadoop

1.本人电脑是Win7 64位系统的: 2.JDK 版本: 3.Cygwin 版本: 官网自行下载 4.Hadoop 版本: 官网自行下载,下载稳定版的吧 下面就开始安装啦~~~~ 一. 安装JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK.我安装的路径为C:\Java\jdk1.7.0_21,安装完配置环境变量: 1. 安装完成后开始配置环境变量,右击我的电脑,点击属性 2. 在出现的对话框中选择高级系统

eclipse/intellij idea 远程调试hadoop 2.6.0

很多hadoop初学者估计都我一样,由于没有足够的机器资源,只能在虚拟机里弄一个linux安装hadoop的伪分布,然后在host机上win7里使用eclipse或Intellj idea来写代码测试,那么问题来了,win7下的eclipse或intellij idea如何远程提交map/reduce任务到远程hadoop,并断点调试? 一.准备工作 1.1 在win7中,找一个目录,解压hadoop-2.6.0,本文中是D:\yangjm\Code\study\hadoop\hadoop-2.

九头蛇与大象之争,Hydra或将取代Hadoop

[编者按]Hadoop被认为是最好的大数据分析平台,本身就具有较好的性能,还有活跃的开源社区支持,Hadoop创始人Doug Cutting也曾预言未来Hadoop不仅仅用于大数据处理,还将成为数据平台的系统内核,将用于在线事务处理--Hadoop的发展前景似乎一片光明,却没有注意到竞争者的出现,Hydra在某些方面甚至具有比Hadoop更加优越的性能,宣布开源以后,Hydra得到了越来越多的支持,未来Hydra极有可能成为Hadoop强劲的竞争对手,Datanami的主编Alex Woodie

Hadoop Yarn详解

一.Yarn简介 Yarn是Hadoop集群的资源管理系统.Hadoop2.0对MapReduce框架做了彻底的设计重构,我们称Hadoop2.0中的MapReduce为MRv2或者Yarn.在介绍Yarn之前,我们先回头看一下Hadoop1.x对MapReduce job的调度管理方式(可参考:Hadoop核心之MapReduce架构设计),它主要包括两部分功能: 1. ResourceManagement 资源管理 2. JobScheduling/JobMonitoring 任务调度监控

大数据分析平台Hadoop与Spark之争

ZD至顶网软件频道消息 原创文章(文/邓晓蕾): 有人把大数据称为信息资产.有人称为金矿.甚至社会财富.而大数据,即,无法在可承受的时间范围内用常规软件工具进行捕捉.管理和处理的数据集合.Gartne认为"大数据"是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产.大数据并不在"大",而在于"有用".价值含量.挖掘成本比数量更为重要.对于很多行业而言,如何利用这些大规模数据是成为赢得竞争的关键.大数据

CentOS 7下配置hadoop 2.8 分布式集群

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,实现分布式文件系统HDFS,用于存储大数据集,以及可以以流的形式访问(streaming access)文件系统中的数据.Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算.本文描述了在CentOS 7下,基于三个节点安装hadoop 2.8,供大家参考. 一.基础环境描述 OS版本 [root@namenode ~]# more /etc/

windows-Windows 安装Hadoop格式化出错

问题描述 Windows 安装Hadoop格式化出错 hadoop-env.sh # The java implementation to use.export JAVA_HOME=""/cygdrive/c/Program Files/Java/jdk1.8.0_51"" 解决方案 在Windows下安装Hadoop在Windows下安装与配置Hadoopwindows下安装配置hadoop 解决方案二: jdk路径指定正确了吗