本文原名“Don't use Hadoop when your data isn't that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过高频交易平台,当过创业公司的CTO,更习惯称自己为统计学者。对了,他现在自己创业,提供数据分析、推荐优化咨询服务,他的邮件是:stucchio@gmail.com 。

“你有多少大数据和Hadoop的经验?”他们问我。我一直在用Hadoop,但很少处理几TB以上的任务。我基本上只是一个大数据新手——知道概念,写过代码,但是没有大规模经验。

接下来他们会问:“你能用Hadoop做简单的group by和sum操作吗?”我当然会,但我会说需要看看具体文件格式。

他们给我一个U盘,里面有所有的数据,600MB,对,他们所有的数据。不知道为什么,我用pandas.read_csv(Pandas是一种Python数据分析库)而不是Hadoop完成了这个任务后,他们显得很不满意。

Hadoop其实是挺局限的。它无非是运行某个通用的计算,用SQL伪代码表示就是: SELECT G(...) FROM table GROUP BY F(...) 你只能改变G和F操作,除非要在中间步骤做性能优化(这可不怎么好玩!)。其他一切都是死的。

(关于MapReduce,之前作者写过一篇“41个词讲清楚MapReduce”,可以参考。)

Hadoop里,所有计算都必须按照一个map、一个group by、一个aggregate或者这种计算序列来写。这和穿上紧身衣一样,多憋得慌啊。许多计算用其他模型其实更适合。忍受紧身衣的唯一原因就是,可以扩展到极大极大的数据集。可你的数据集实际上很可能根本远远够不上那个数量级。

可是呢,因为Hadoop和大数据是热词,世界有一半的人都想穿上紧身衣,即使他们根本不需要。

可我的数据有好几百MB呢!Excel都装不下

对Excel很大可不是什么大数据。有很多好工具——我喜欢用的是基于Numpy的Pandas。它可以将几百MB数据以高效的向量化格式加载到内存,在我已经3年的老笔记本上,一眨眼的功夫,Numpy就能完成1亿次浮点计算。Matlab和R也是很棒的工具。

数百MB数据一般用一个简单的Python脚本逐行读取文件、处理,然后写到了一个文件就行了。

可我的数据有10G呢!

我刚买了一台笔记本电脑。16G内存花了141.98美元,256GB SSD多收200美元。另外,如果在Pandas里加载一个10GB的csv文件,实际在内存里并没有那么大——你可以将 “17284932583” 这样的数值串存为4位或者8位整数,“284572452.2435723”存为8位双精度。

最差情况下,你还可以不同时将所有数据都一次加载到内存里。

可我的数据有100GB/500GB/1TB!

一个2T的硬盘才94.99美元,4T是169.99。买一块,加到桌面电脑或者服务器上,然后装上PostgreSQL。

Hadoop的适用范围远小于SQL和Python脚本

从计算的表达能力来说,Hadoop比SQL差多了。Hadoop里能写的计算,在SQL或者简单的Python脚本都可以更轻松地写出来。

SQL是直观的查询语言,没有太多抽象,业务分析师和程序员都很常用。SQL查询往往非常简单,而且一般也很快——只要数据库正确地做了索引,要花几秒钟的查询都不太多见。

Hadoop没有任何索引的概念,它只知道全表扫描。而且Hadoop抽象层次太多了——我之前的项目尽在应付Java内存错误、内存碎片和集群竞用了,实际的数据分析工作反而没了时间。

如果你的数据结构不是SQL表的形式(比如纯文本、JSON、二进制),一般写一小段Python或者Ruby脚本按行处理更直接。保存在多个文件里,逐个处理即可。SQL不适用的情况下,从编程来说Hadoop也没那么糟糕,但相比Python脚本仍然没有什么优势。

除了难以编程,Hadoop还一般总是比其他技术方案要慢。只要索引用得好,SQL查询非常快。比如要计算join,PostgreSQL只需查看索引(如果有),然后查询所需的每个键。而Hadoop呢,必须做全表扫描,然后重排整个表。排序通过多台机器之间分片可以加速,但也带来了跨多机数据流处理的开销。如果要处理二进制文件,Hadoop必须反复访问namenode。而简单的Python脚本只要反复访问文件系统即可。

可我的数据超过了5TB!

你的命可真苦——只能苦逼地折腾Hadoop了,没有太多其他选择(可能还能用许多硬盘容量的高富帅机器来扛),而且其他选择往往贵得要命(脑海中浮现出IOE等等字样……)。

用Hadoop唯一的好处是扩展。如果你的数据是一个数TB的单表,那么全表扫描是Hadoop的强项。此外的话,请关爱生命,尽量远离Hadoop。它带来的烦恼根本不值,用传统方法既省时又省力。

附注:Hadoop也是不错的工具

我可不是成心黑Hadoop啊。其实我自己经常用Hadoop来完成其他工具无法轻易完成的任务。(我推荐使用Scalding,而不是Hive或者Pig,因为你可以用Scala语言来写级联Hadoop任务,隐藏了MapReduce底层细节。)我本文要强调的是,用Hadoop之前应该三思而行,别500MB数据这样的蚊子,你也拿Hadoop这样的大炮来轰。

刘江总编发布于GEEK头条 2013-09-18 09:24

分享到:  

评论

已有35条评论

  • 最新
ljx930520 2015-01-31 14:28
怎样用pandas读GB级的数据啊?~内存溢出了
0

我是一只魂 2015-04-13 19:13
你好,不知道你的问题解决没? 我用的是pandas0.16版本,python2.7.5,用pandas加载几百兆的数据出现MemoryError。求助解决!
0

毕加索爱编程 2014-09-26 20:08
了解hadoop是必须的,现在hadoop更新的很快,基本上一两个月就能发布一个新版本。 各种性能也在提高。 即使对hadoop的褒贬不一,但是不能否认它是一个非常优秀的分布式平台,大家可以多了解一点。 目前最新的hadoop是hadoop2.5.1,界面什么的都更新了
0

yfteach 2014-08-09 18:34
云凡教育Hadoop2.x架构详解和伪分布式环境搭建视频分享http://www.yfteach.com
0

haitao 2014-03-29 11:29
百G、10亿条级别,mssql2005就完全胜任——内存大点、分区表
0

Mea_Culpa 2013-12-16 15:24
现在都好高级,让我这用awk 分进程的情何以堪...
0

baidu_23542553 2014-11-19 17:08
同感啊 awk飘过
0

瓜瓜东西 2013-11-14 08:45
hadoop也不是啥高新的技术,只是现阶段说有的技术排列组合到一起,实现了一些功能,大数据库处理,内存处理能力已经到天花板了,技术不好提升了
0

红帆软件 2013-09-21 15:00 来自 新浪微博
路要自己走,乐在其中才有建树,追风总会随风而散
0

hills 2013-09-20 22:47
个人认为,Hadoop的分布式计算和可以理论上无限的水平扩展是优势,业务复杂度一般的TPS达到1万是小CASE。
0

BYSF_XF 2013-09-20 12:46
我上次去一家公司,做小项目的,面试居然还问到了负载均衡什么的,简直扯蛋
-1

cheniwantyou 2013-09-20 12:19
那些小破公司动不动也吹神马hadoop啊,其实都是人傻没办法。这些完全就是炒作罢了
0

hctsai 2013-09-20 01:28
真懷疑作者學歷怎麼拿的,還當過CTO。MapReduce 解決的不只是 Scalability 問題,精隨也不只是把工作分到不同節點運算後再合併。更關鍵的解決 Atomic運算的互鎖卻忽略不提。談論Big Data 只考慮數據輛大小,而不考慮處理速度、資料變異性、容錯,真的是誤導新人。
1

期科比 2015-10-11 12:20

说得有理啊

0

车东 2013-09-19 19:39 来自 新浪微博
@梁斌penny 你研究的内存数据库有对此过一些来源引擎吗?
0

xg1103 2013-09-19 17:14
路过~~~~~~~~~
0

搬砖工人 2013-09-19 09:54
其实Hive也是写的SQL语句
0

getclass 2013-09-18 22:04
这句话说的太精辟了 “Hadoop其实是挺局限的。它无非是运行某个通用的计算,用SQL伪代码表示就是: SELECT G(...) FROM table GROUP BY F(...) 你只能改变G和F操作,除非要在中间步骤做性能优化(这可不怎么好玩!)。其他一切都是死的。”
0

我心向着佛 2013-09-18 19:24 来自 新浪微博
[围观]
0

旖旎嫣儿 2013-09-18 16:14 来自 新浪微博
看到了,私信了
0

Bai-Bertie 2013-09-18 16:13 来自 新浪微博
有道理!
0

iamxiami 2013-09-18 15:05
每小时1TB的数据呢? 公司做的项目,每小时差不多可能有1TB的数据. 用户有要求需要秒级查询数据(不统计),为了满足多要求,只能选择冗余多份存放HBASE,更有趣是客户可能需要个IN的操作,有几个列是树型的结构,很可能他查一个数据,条件就几MB,转成几万条查询... 还需要分页... NND,对N多查询自己做seek... 哎~ 真的没什么好替换的方案,被逼的!
0

普世编程技术 2013-09-20 11:49
有个概念叫OLAP知道不? 复杂的,批量数据,就应该先安排作业,然后一天之后才拿到结果。 hadoop这样的东西,只适合google这等即使搜索的业务,所以google自己研究论文,自己实现自己的业务技术。 是个人,是个公司就讲hadoop,就和非洲某个吃不饱饭的小村庄,讨论人家美国总统选举一样荒唐可笑。
0

sniffer12345 2013-09-18 14:42
即便是5TB 你上mysql集群也比hadoop好得多
-1

juefan_c 2013-09-18 14:39
也不见得很对, Hadoop能处理上TB级别的数据, 也能处理100M级别的小数据, 但不见得拿100M级别的数据用其它工具处理就是明智的, 例如这100M的数据得从1TB的数据中生成时, 如果反复迁移数据的话, 那成本更大!
0

胡争辉 2013-09-18 14:33 来自 新浪微博
期待翻译后我好转发
0

白硕SH 2013-09-18 14:18 来自 新浪微博
太拽了!
0

胡争辉 2013-09-18 13:57 来自 新浪微博
浇灭NoSQL虚火从清算Hadoop入手
0

好兵帅克 2013-09-18 13:52
用Hadoop之前应该三思而行,别500MB数据这样的蚊子,你也拿Hadoop这样的大炮来轰。这才是核心!
2

ictcamera 2013-09-18 13:51
国内砖家一般不希望把这层纸给捅破
0

外号cook 2013-09-18 13:29
不太懂
0

无聊找乐 2013-09-18 12:27
其实用的人未必不知道这些。 炒作新概念使用新技术 不过是一种营销手段罢了~
0

Well工作室 2013-09-18 11:59
因地制宜!
0

308682805 2013-09-18 11:47
这个是准确的
0

m101162004 2013-09-18 11:28

别老扯什么hadoop,你的数据根本不够大相关推荐

  1. 别老扯什么Hadoop了,你的数据根本不够大

    本文原名"Don't use Hadoop when your data isn't that big ",出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯 ...

  2. 使用Hadoop分析气象数据完整版(附带完整代码)

    <分布式>布置了一道小作业,让我花了7天时间学习了Hadoop...现在终于可以正式地做这个作业了,记录一下. 使用Hadoop分析气象数据 1 获取数据 1.1 下载数据 1.2 数据格 ...

  3. SparkSQL和Hadoop(面向数据科学家和大数据分析师)

    了解HDFS命令.Hadoop.Spark SQL.SQL查询.ETL和数据分析| Spark Hadoop集群虚拟机|完全解决的问题 你会学到什么 作为本课程的一部分,学生将获得在Spark Had ...

  4. 量化派基于Hadoop、Spark、Storm的大数据风控架构--转

    原文地址:http://www.csdn.net/article/2015-10-06/2825849 量化派是一家金融大数据公司,为金融机构提供数据服务和技术支持,也通过旗下产品"信用钱包 ...

  5. 学习笔记Hadoop(一)—— Hadoop介绍(1)——认识大数据

    文章目录 一.认识大数据 1.1.认识大数据 1.2.大数据特征 1.3.大数据流程图 1.4.什么是大数据平台? 一.认识大数据 1.1.认识大数据 大数据(Big data)或称巨量数据.海量数据 ...

  6. Hadoop三大核心组件及需求催生大数据技术的背景

    Spark是基于内存处理的,所以比基于磁盘处理的Hadoop要快.Hadoop是离线处理的,也就是 先要将数据收集过来,然后基于数据进行处理.Flume是数据采集,可以理解成是一个爬虫框架,把数据比如 ...

  7. 什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)

    1. HADOOP背景介绍 1. 1.1 什么是HADOOP 1.        HADOOP是apache旗下的一套开源软件平台 2.        HADOOP提供的功能:利用服务器集群,根据用户 ...

  8. Hadoop之OutputFormat数据输出详解

    Hadoop之OutputFormat数据输出详解 目录 OutputFormat接口实现类 自定义OutputFormat 1. OutputFormat接口实现类 OutputFormat是Map ...

  9. Hadoop之InputFormat数据输入详解

    Hadoop之InputFormat数据输入详解 Job提交流程和切片源码详解 FileInputFormat切片机制 CombineTextInputFormat切片机制 InputFormat接口 ...

最新文章

  1. 如何在一个文件中写多个Vue组件(译-有删改)
  2. 【BIM入门实战】Revit入门基础知识选择题带答案解析(116题)
  3. 联想即将推出预装 Fedora 的 ThinkPad 笔记本电脑
  4. Apache 服务器端安装配置(Windows版本)
  5. UNIX环境高级编程之第8章:进程控制
  6. 如何在macOS Big Sur系统中隐藏菜单栏?
  7. WhatsApp拟取消服务订阅年费
  8. GB2312 GBK BIG5
  9. 冰点还原精灵如何卸载
  10. P2P业务整体流程图
  11. windows消息机制
  12. 一张图片告诉你win10各版本之间的主要区别
  13. 揭秘腾讯智慧城市版图:“数字政府”+“超级大脑”的新打法
  14. 微信h5互动小游戏制作心得
  15. 十六进制转ASCII码表
  16. 邓凡平WIFI学习笔记4:WiFi Simple configuration
  17. Android适配全面屏
  18. 【应届生笔试资料分享二】中国农业银行相关介绍汇总
  19. myeclipse把选中的字母转换成大写或者大写转小写
  20. linu学习第二天:文件系统相关操作

热门文章

  1. BUPT OJ144 SmallTalk
  2. 2022-08-02 第二小组 张明旭 Java基础学习记录
  3. Uos统信系统 bind+chroot(DNS)
  4. clearInterval无效的一种原因
  5. 在Portainer上添加其他主机上的docker
  6. 武科大计算机学硕好考吗,点赞!武科大机械学院一宿舍四女生全部考上研究生...
  7. 图解K-Means算法
  8. “知行-技术人的管理之路”书籍推荐
  9. 2022-2月股票投资实战------中国电信
  10. 把 Excel 透视表搬到 WEB 上