英文原文: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 这样的大炮来轰。
================================
PB级的用hadoop
TB级的用mongodb
GB级的用sql数据库
MB级的用excel
KB级的用计算器
B级的用心算
否则高射炮打蚊子,大材小用。
=========================================================
5个最成功的Hadoop项目推荐
SD Times高级编辑Alex Handy日前列出了当前使用Hadoop的项目中他认为最成功的五个。
- 1. Cascading:Cascading是基于Hadoop集群之上的数据处理API。它通过实现了丰富的功能化API,使你不需要接触MapReduce任务就能使用分布式计算能力,其核心概念是基于管道和流的数据处理。
- 2. Mahout:Mahout是一个基于Hadoop实现各种机器学习与数据挖掘算法库。被用来提供推荐服务。
- 3. Hive:Hive由Facebook出品,它为Hadoop提供了一种类似于SQL的操作接口。
- 4. Avro:Avro是一个基于二进制数据传输高性能的中间件。Avro通过将数据进行序列化,以使得大批量数据交互过程更方便。
- 5. Storm:Storm由BackType Technology出口,其口号是“实时的Hadoop系统”。
相关推荐
第四章(Hadoop大数据处理实战)Hadoop分布式文件系统.pdf第四章(Hadoop大数据处理实战)Hadoop分布式文件系统.pdf第四章(Hadoop大数据处理实战)Hadoop分布式文件系统.pdf第四章(Hadoop大数据处理实战)Hadoop分布式文件...
第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大...
在大数据处理领域,Hadoop是一个不可或缺的关键工具,它以其分布式计算框架著称,为企业和组织提供了海量数据存储和处理的能力。本实践指南将深入探讨如何利用Hadoop来构建高效的数据仓库系统,以此来提升数据分析的...
第二章(Hadoop大数据处理实战)搭建Hadoop分布式集群.pdf第二章(Hadoop大数据处理实战)搭建Hadoop分布式集群.pdf第二章(Hadoop大数据处理实战)搭建Hadoop分布式集群.pdf第二章(Hadoop大数据处理实战)搭建Hadoop分布式...
《Hadoop大数据处理实战》是康开锋撰写的一本深入探讨Hadoop技术的书籍,旨在帮助读者理解并掌握Hadoop在大数据处理中的实际应用。这本书的内容涵盖了Hadoop生态系统的核心组件,以及如何利用这些组件解决实际问题。...
MapReduce是Hadoop用于大规模数据处理的编程模型,由“Map”阶段(数据分发和预处理)和“Reduce”阶段(聚合和总结数据)组成。 Hadoop生态系统的其他重要组件还包括: 1. **YARN(Yet Another Resource ...
本书《Hadoop海量数据处理》是一本专注于Hadoop技术的专业技术书籍,旨在向读者介绍Hadoop生态系统的关键组件、核心概念以及在处理海量数据时的应用方法。全书分为基础篇、应用篇和总结篇三个部分,全面涵盖了Hadoop...
《Hadoop大数据分析与挖掘实战》是一本专为IT专业人士准备的深度学习资源,它深入探讨了大数据领域中的核心技术和应用。这本书的核心内容围绕Hadoop框架展开,详细讲解了如何利用Hadoop进行大规模数据处理、分析和...
通过这个实验,我们可以学习如何运用Hadoop生态系统的组件进行大数据处理,理解Hive在数据仓库中的作用,以及如何利用SQL查询语句进行数据挖掘。这对于提升大数据分析能力,洞悉电影产业趋势具有重要意义。在实际...
《Hadoop大数据处理技术基础与实践(第2版)(微课版)PPT-课件》是一个关于Hadoop在大数据处理领域的核心课程资源。这个压缩包包含了丰富的教学资料,帮助学习者深入理解和掌握Hadoop生态系统的核心概念和技术。...
【基于Hadoop的电影影评数据分析】是一项大数据课程的大作业,旨在利用Hadoop的分布式处理能力来分析电影影评数据。Hadoop是一个由Apache软件基金会开发的开源框架,专为处理和存储大规模数据而设计。它由四个核心...
Hadoop能够高效地存储和处理大量数据,特别适用于需要进行海量数据分析的场合,因此在大数据处理领域得到了广泛的应用。 ### Hadoop核心组件 1. **HDFS(Hadoop Distributed File System)** HDFS是Hadoop项目的...
在大数据处理领域,Hadoop和Spark是两个至关重要的框架,它们为海量数据的存储、管理和分析提供了高效且可扩展的解决方案。本资源包含了基于这两个框架的数据算法和源代码,可以帮助我们深入理解并实践大数据处理...
Hadoop豆瓣电影数据分析(Hadoop)操作源码
在大数据处理领域,Hadoop 是一个至关重要的开源框架,它为海量数据的存储和处理提供了高效、可扩展的解决方案。本文将深入探讨“Hadoop 的大规模数据交换”这一主题,结合给定的压缩包文件“基于Hadoop 的大规模...
《Hadoop海量数据处理》是关于大数据领域的重要参考资料,它主要聚焦在利用Hadoop框架进行大规模数据处理的技术和实践。Hadoop是Apache软件基金会开发的一个开源项目,旨在提供分布式、容错性强的系统,用于存储和...