设为首页 收藏本站
查看: 917|回复: 0

[经验分享] 【原创】应该在什么时候使用Hadoop?

[复制链接]

尚未签到

发表于 2016-12-7 08:12:01 | 显示全部楼层 |阅读模式
  IT界从来不缺少浮躁,现在什么公司都说大数据,好像不搞这个显得自己很落后似的。但是什么是大数据?多大的数据才是大数据?用什么工具去解决多大的数据?
  下面这篇文章的观点很好,我比较认同。其中它提到,超过5T的数据建议使用hadoop。其实从hadoop的计算架构来看,这也是合理的,因为经过测试,小而多的数据文件进行计算,效率非常差。大而少的文件嫩更充分利用hadoop计算架构的优势。
  最后想提一下的是,综合全文观点,是否直接采用spark就能解决所有问题?因为spark除了兼容hadoop的计算模外,还具有极高的性能去兼容各种hadoop所不能计算的场景。
  文章出处:http://www.36dsj.com/archives/22748
  有人问我,“你在大数据和Hadoop方面有多少经验?”我告诉他们,我一直在使用Hadoop,但是我处理的数据集很少有大于几个TB的。
  他们又问我,“你能使用Hadoop做简单的分组和统计吗?”我说当然可以,我只是告诉他们我需要看一些文件格式的例子。
  他们递给我一个包含600MB数据的闪盘,看起来这些数据并非样本数据,由于一些我不能理解的原因,当我的解决方案涉及到pandas.read_csv文件,而不是Hadoop,他们很不愉快。
  Hadoop实际上是有很多局限的。Hadoop允许你运行一个通用的计算,下面我用伪码进行说明:
DSC0000.jpg

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-310669-1-1.html 上篇帖子: hadoop中top-k问题解决 下篇帖子: hadoop 学习笔记(伪分布式)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表