阅读更多

17顶
6踩

数据库
本文原名“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_csvPandas是一种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。它带来的烦恼根本不值,用传统方法既省时又省力。

Via CSDN极客头条
17
6
评论 共 14 条 请登录后发表评论
14 楼 psfu 2013-09-24 16:05
cywhoyi 写道
现在不说big data,都不好意思出门!其实程序员也有文艺范儿,自认为在海量方面在中国还是比较需要的,人口基数太大了,有木有?


也许吧,但是一张 1TB 的表就相当于 10亿人 每人10K的 数据!!
13 楼 Azurer 2013-09-23 22:55
这就跟当年沃森断定计算机不会超过XX台一样, 社会始终在进步的~~
12 楼 cywhoyi 2013-09-23 11:24
现在不说big data,都不好意思出门!其实程序员也有文艺范儿,自认为在海量方面在中国还是比较需要的,人口基数太大了,有木有?
11 楼 haibo 2013-09-22 20:06
自从被EJB朦过之后,就很少再尝试什么框架,很简单,一方面是自己的业务与目标框架不符合,另一方面是框架过于束缚 ,不可否认他们都很优秀,但与现实都相差太远,只有借鉴的作用
10 楼 psfu 2013-09-22 15:49
bitray 写道
dohkoos 写道
IT界的不良风气之一:过分追求新技术。

合适的才是最好的

主要是互联网行业的不良风气,号称规模大,数据多,必须新技术解决问题



5TB 的表才是Hadoop 的优势啊
9 楼 bitray 2013-09-22 14:51
dohkoos 写道
IT界的不良风气之一:过分追求新技术。

合适的才是最好的

主要是互联网行业的不良风气,号称规模大,数据多,必须新技术解决问题
8 楼 psfu 2013-09-22 10:31
赞同啊,,
7 楼 ai2ming 2013-09-21 18:38
说的不错,数据量较小的时候,普通的数据库足够应付了。
6 楼 peihexian 2013-09-20 11:49
翻译的很好,赞!
5 楼 kuchaguangjie 2013-09-19 11:56
找个能解决问题的方案, 而不是听起来很酷的方案,
4 楼 dohkoos 2013-09-18 19:08
IT界的不良风气之一:过分追求新技术。

合适的才是最好的
3 楼 hanjiangit 2013-09-18 17:58
zhangzhenjj 写道
单单数据量大不能称作大数据,还得考究这个数据集的维度,上了维度才跟这个“大”沾上了边

哪方面的维度?
2 楼 zhangzhenjj 2013-09-18 12:48
单单数据量大不能称作大数据,还得考究这个数据集的维度,上了维度才跟这个“大”沾上了边
1 楼 tongyitaiwan 2013-09-18 11:45
狗腿啊啊啊啊

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

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

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

  • 别老扯什么hadoop,你的数据根本不够大

    本文原名“Don't use Hadoop when your data isn't that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过高频交易平台,当过创业公司的CTO,更习惯称自己为统计学者。...

  • 别老扯Hadoop蛋了,你的数据根本不够大

    为什么80%的码农都做不了架构师?>>> ...

  • 别老扯Hadoop蛋了,你的数据根本不够大(有点搞笑)

    本文原名“Don’t use Hadoop when your data isn’t that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过高频交易平台,当过创业公司的CTO,更习惯称自己为统计学者。...

  • grpcio-1.14.0-cp36-cp36m-macosx_10_7_intel.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • 哈尔滨工程大学825经济学2020考研专业课初试大纲.pdf

    哈尔滨工程大学考研初试大纲

  • hack-10万密码.txt

    hack-10万密码

  • ASP“辅导员之家”网站设计与开发(源代码+论文)【ASP】.zip

    ASP“辅导员之家”网站设计与开发(源代码+论文)【ASP】

  • 大作业基于python+tkinter学生成绩管理系统带登录界面完整源代码.zip

    学生成绩管理系统 一个简单的学生课程系统,可以创建学生,课程,成绩,以及计算最高对分。 代码流程: (1)通过创建一个CSV文件对学生信息进行存储 (2)通过对CSV文件的访问对数据进行修改和读取 (3)通过TKINTER做出界面与代码进行对接 (4)通过Pandas和numpy对数据进行分析、归类 (5)通过Matplotlib对已处理的数据进行可视化处理并与界面对接。 需求分析: (1)创建一个登陆界面,并拥有管理员权限进行数据访问。 (2)通过创建一个ENTRY读取交互界面的数据。 (3)创建一个学生类,包含学号,姓名,性别,对信息进行存取。 (4)创建一个学生信息删除类,对学生信息的删除。 (5)创建一个学生课程成绩类,包含学生类成员和课程类数组成员,并对成绩进行修改。 (6)可以生成学生,并且为学生创建课程成绩。 (7)输出指定科目分数最高和最低的学生课程成绩信息。 (8)输出指定学生的科目分数最高和最低分。 (9)对整体单科成绩的一个可视化分析。

  • 基于python的模板数字识别程序

    基于python的模板数字识别程序

  • 看了昨晚的跨年演唱会,想必大家都被自己的idol的唱功或颜值所折服吧 今天就教大家如果用照片制作一副照片墙,以我粉了多年的老薛作

    看了昨晚的跨年演唱会,想必大家都被自己的idol的唱功或颜值所折服吧 今天就教大家如果用照片制作一副照片墙,以我粉了多年的老薛作

  • python大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zip

    python大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zip 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、项目初期立项演示等用途。 4.如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能。 python大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zippython大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zip python大作业基于pyqt5框架设计的音乐播放器项目源码+超详细注释(带GUI界面).zip

  • 基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip

    基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、项目初期立项演示等用途。 4.如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能。 基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip 基于python大数据分析与可视化的疫情信息发布平台源码(含前端、后端、数据库).zip

  • openssh-debuginfo-9.3p2-1.ky10.aarch64.rpm

    openssh-debuginfo-9.3p2-1.ky10.aarch64

  • springboot微信小程序商城系统(源码+数据库+论文)

    高分毕设 springboot微信小程序商城系统(源码+数据库+论文) 购物系统设计的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与购物系统设计管理的实际需求相结合,讨论了基于购物系统设计管理的使用。 + 微信小程序 + springboot + vue + jdk1.8

  • ASP.NET《数据库原理及应用技术》课程指导平台的开发(源代码+论文)【ASP】.zip

    ASP.NET《数据库原理及应用技术》课程指导平台的开发(源代码+论文)【ASP】

  • 基于Java的超市管理系统(源码+论文+需求分析+数据库文件+演示视频).zip

    如今科技迅猛发展的今天台,各种管理系统已应用到社会的各个领域。各个大小企业无论规模如何,都充分意识到传统的手工管理模式已经逐渐不能适应时代的发展,为了更好的发展,纷纷开发适合自己的管理系统。 通过超市管理系统这个平台,可以实现小型超市管理的信息化、网络化、系统化、规范化,使工作人员从繁杂的数据查询和统计中解脱出来,减少工作量。系统的主要功能包括:商品分类管理、商品管理、入库管理、出库管理、库存信息浏览、商品管理、供应商 管理等。 本系统前台主要使用JSP作为开发语言,后台使用Mysql作为数据库管理系统,开发环境是MyEclipse,服务器采用tomcat,开发出的一个基于Web技术的B/S结构的超市管理系统。

  • HTML开发的最主要的三种框架(Bootstrap、Foundation、Bulma)及Python实现的例子

    本资源提供了基于HTML开发的三个主要框架(Bootstrap、Foundation、Bulma)以及Python实现的三个例子。这些框架和例子将帮助您更好地理解和应用Web开发技术。 1. Bootstrap:Bootstrap是一个流行的前端框架,用于快速开发响应式和移动优先的网站。它包含了丰富的预定义样式、组件和JavaScript插件,可以大大提高开发效率。 2. Foundation:Foundation是一个灵活的前端框架,适用于各种类型的网站和应用程序。它提供了一套简洁的CSS和JavaScript组件,用于构建美观且功能强大的Web界面。 3. Bulma:Bulma是一个轻量级的前端框架,基于Flexbox布局。它提供了一套易于使用的CSS和JavaScript组件,用于创建现代且响应式的Web界面。

  • ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)【ASP】.zip

    ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)【ASP】

Global site tag (gtag.js) - Google Analytics