应该在什么时候使用Hadoop

  • 时间:
  • 浏览:0
  • 来源:大发彩神排列三_大发神彩排列三官方

让当我们又问我,“你能使用Hadoop做简单的分组和统计吗?”你说当然不需要 ,我就是告诉让当我们我不需要 看但是 文件格式的例子。让当我们递给我有另另1个含晒 300MB数据的闪盘,看起来哪此数据从不样本数据,意味但是 我必须理解的意味,当我的避免方案涉及到pandas.read_csv文件,而全部都是Hadoop,让当我们很不愉快。Hadoop实际上是有但是 局限的。Hadoop允许你运行有另另1个通用的计算,下面我用伪码进行说明:Scala风格的伪码:

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

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

SQL风格的伪码:

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