应该在什么时候使用Hadoop

  • 时间:
  • 浏览:5

目标:计算图书馆书籍的数量Map:你统计奇数书架上书的数量,我统计偶数书架上书的数量。(人太多,统计很慢)Reduce:把当让我们 单独统计后的数据添加一并。当让我们 所做的只4个 :F(k,v)和G(k,v),除开在里面步骤中的性能优化,一切都不 固定的。它会迫使你在Map中进行所有的计算,分组和统计,执行运算的土办法 像是穿上了紧身衣,我我虽然全都计算更适合挑选其它模型。穿上紧身衣的唯一意味是这意味会扩展到非常大的数据集上,而大多数情况报告下,你的数据量意味会小几个数量级。因此意味“大数据”和“Hadoop”这些 个热门词,即使全都人实际上不需用Hadoop,当让我们 也后来穿上“紧身衣”。一、意味我的数据量是几百兆,Excel意味那么 加载它对于Excel软件来说的“很大的数据”暂且大数据,我我虽然还有其它极好的工具都需用使用——我喜欢的Pandas。Pandas构建于Numpy库之上,都需用以矢量格式的土办法 有效地把数百兆的数据载入到内存中。在我购买已3年的笔记本上,它都需用用Numpy在一眨眼的功夫把1亿的浮点数乘在一并。Matlab和R也是极好的工具。对于几百兆的数据量,典型的做法是写4个 简单的Python脚本按行读取文件行,并避免它,向从前文件写入。二、意味我的数据是10GB呢我买了个新笔记本,它有16GB的内存和256GB的SSD。意味让人 载入4个 10GB的CSV文件到Pandas,它占用的内存实际上是很小的——其结果是以数字类型的字符串保存的,如“17284832583”作为4字节货8字节的整数,或存储“284572452.2435723”字符串作为8字节的双精度浮点数。最坏的情况报告有你或许那么 把所有的数据都一并载入到内存中。三、意味我的数据是80GB、800GB或1TB呢买个2TB或4TB的硬盘,在桌面PC或服务器上安装4个 Postgre来避免它。四、Hadoop远远比不上SQL或Python脚本在计算的表达方面,Hadoop弱于SQL,也弱于Python脚本。SQL是4个 很直接的查询语言,适合做业务分析,SQL的查询相当简单,因此还非常快——意味你的数据库使用了正确的索引,二级查询或多级查询另当别论。Hadoop那么 索引的概念,Hadoop那么 全表扫描,Hadoop有角度泄露抽象——我花了全都时间来避免Java的内存错误、文件碎片以及集群竞争,那些时间远大于我花在数据分析上的时间。意味你的数据并都不 像SQL表那样的特征化数据(比如纯文本、JSON对象、二进制对象),通常是直接写4个 小的Python脚从前按行避免你的数据。把数据存储于文件,避免每4个 文件,等等。意味添加是Hadoop就很麻烦。相比于SQL或Python脚本,Hadoop要慢的多。正确的使用索引后,SQL查询老是非快——PostgreSQL简单的查找索引,检索确切的键值。而Hadoop是全表扫描的,它会把整个表进行重新排序。通过把数据表分片到多台计算机上后,重排序是调慢的。当事人面,避免二进制对象,Hadoop需用重复往返于命名节点,目的是查找和避免数据。这适合用Python脚从前实现。五、我的数据超过了5TB你应该考虑使用Hadoop,而太多再做太多的挑选。使用Hadoop唯一的好处是可伸缩性非常好。意味你4个 含有了数TB数据的表,Hadoop4个 适合全表扫描的选项。意味你那么 从前大数据量的表,那么 你应该像躲避瘟疫那样避免使用Hadoop。从前使用传统的土办法 来避免难题会更轻松。六、Hadoop是4个 极好的工具我暂且讨厌Hadoop,当我用其它工具那么 很好避免数据时我会挑选Hadoop。另外,我推荐使用Scalding,暂且使用Hive或Pig。Scalding支持使用Scala语言来编写Hadoop任务链,隐藏了其下的MapReduce。

当让我们 又问我,“你能使用Hadoop做简单的分组和统计吗?”我知道你当然都需用,让人说 告诉当让我们 我需用看许多文件格式的例子。当让我们 递给我4个 含有800MB数据的闪盘,看起来那些数据暂且样本数据,意味许多我那么 理解的意味,当我的避免方案涉及到pandas.read_csv文件,而都不 Hadoop,当让我们 很不愉快。Hadoop实际上是有全都局限的。Hadoop允许你运行4个 通用的计算,下面我用伪码进行说明:Scala风格的伪码:

  1. collection.flatMap( (k,v) => F(k,v) ).groupBy( _._1 ).map( _.reduce( (k,v) => G(k,v) ) )  

SQL风格的伪码:

  1. SELECT G(...) FROM table GROUP BY F(...)