楼主: hubifeng?
3647 11

[学习分享] 别老扯什么Hadoop了,你的数据根本不够大... [推广有奖]

已卖:1075份资源

副教授

68%

还不是VIP/贵宾

-

威望
0
论坛币
10579 个
通用积分
132.3199
学术水平
87 点
热心指数
86 点
信用等级
62 点
经验
486 点
帖子
661
精华
0
在线时间
1064 小时
注册时间
2010-12-7
最后登录
2025-10-28

楼主
hubifeng? 学生认证  发表于 2014-11-15 15:04:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
       本文原名“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。它带来的烦恼根本不值,用传统方法既省时又省力。







链接:http://www.chinacloud.cn/show.aspx?id=15889&cid=12
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Hadoop Had PostgreSQL Python数据分析 MapReduce 纽约大学 创业公司 交易平台 自己创业 科学家

已有 3 人评分经验 学术水平 收起 理由
yucuiting + 30 观点有启发
李会超 + 20 精彩帖子
oliyiyi + 60 + 1 精彩帖子

总评分: 经验 + 110  学术水平 + 1   查看全部评分

本帖被以下文库推荐

  • · R学习|主题: 262, 订阅: 161

沙发
李会超 发表于 2014-11-15 15:23:13
额,最近还一直看到R+hadoop很热……
已有 1 人评分经验 热心指数 收起 理由
hubifeng? + 60 + 1 鼓励积极发帖讨论

总评分: 经验 + 60  热心指数 + 1   查看全部评分

藤椅
daishen 发表于 2014-11-15 15:47:27
估计这些都是美帝忽悠人的东东,现在张口闭口机器学习,实际上是前几年抄烂掉的人工智能拿出来换一个大数据的马甲,来一个冷饭热炒,而目前又开始包装深度学习了,其实就是神经网络加一个马甲。
这帮人玩这些比较轻车熟路,反正都是忽悠,和金融市场的大骗子有一拼。
已有 1 人评分经验 热心指数 收起 理由
hubifeng? + 60 + 1 鼓励积极发帖讨论

总评分: 经验 + 60  热心指数 + 1   查看全部评分

板凳
suhui0723 在职认证  发表于 2014-11-16 19:42:36
好文章!

报纸
bailihongchen 发表于 2015-1-15 14:24:24
谢谢楼主的经验分享

地板
mao726 在职认证  发表于 2015-1-15 14:38:55
哈哈 是这样的!互联网公司一上来面试就喜欢问你会不会这个或者那个。当然,从长远发展来看,hadoop等基于mapredue的框架肯定会越来越友好,所以提前预备也无可厚非

7
mao726 在职认证  发表于 2015-1-15 14:41:50
daishen 发表于 2014-11-15 15:47
估计这些都是美帝忽悠人的东东,现在张口闭口机器学习,实际上是前几年抄烂掉的人工智能拿出来换一个大数据 ...
现在的机器学习和之前的也许原理一样,但是可以处理的数据集完全不一样了。在大数据的意义下看机器学习,还是有非常多的工业上的进步的。当然,学统计和概率的学生更加好找工作了。

8
mao726 在职认证  发表于 2015-1-15 14:41:54
daishen 发表于 2014-11-15 15:47
估计这些都是美帝忽悠人的东东,现在张口闭口机器学习,实际上是前几年抄烂掉的人工智能拿出来换一个大数据 ...
现在的机器学习和之前的也许原理一样,但是可以处理的数据集完全不一样了。在大数据的意义下看机器学习,还是有非常多的工业上的进步的。当然,学统计和概率的学生更加好找工作了。

9
引擎子 发表于 2015-1-17 10:59:18
谢谢分享  

10
liuhztang 发表于 2015-1-17 11:45:23
大数据具体应用有待进一步开发

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 15:35