电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2207 人浏览分享

Apache Hadoop最佳实践和反模式

[复制链接]
2207 0
Apache Hadoop是一个用于构建大规模,共享存储和计算基础设施的软件框架,Hadoop集群经常用于各种研究和开发项目,如Yahoo!,eBay,Facebook,Twitter等互联网公司就大量使用了Hadoop,并在核心业务系统中扮演中关键角色,因此正确部署Hadoop集群是确保获得最佳投资回报的关键。站长工具
本文介绍了在Apache Hadoop上运行应用程序的最佳实践,实际上,我们引入了网格模式(Grid Pattern)的概念,它和设计模式类似,它代表运行在网格(Grid)上的应用程序的可复用解决方案。
概述
Hadoop上的应用程序数据是使用Map-Reduce(映射-化简)范式写入的,Map-Reduce作业通常要将输入数据集拆分成独立的数据块,由Map任务以完全并行的方式处理,框架对Map的输出结果排序,然后传递给Reduce任务,通常情况下,作业的输入和输出结果都保存在文件系统上,框架管理计划任务,监控它们的执行情况,以及重新执行失败的任务。
Map-Reduce应用程序指定输入/输出位置,通过实现适当的Hadoop接口,如Mapper和Reducer,分别提供Map和Reduce功能,它们和其它作业参数一起构成作业配置。Hadoop作业客户端将作业(jar/可执行文件等)和配置提交给JobTracker,JobTracker承担起分配软件/配置,调度任务和监控的职责,为作业客户端提供状态和诊断信息。
Map/Reduce框架工作在(键/值)对上,也就是说,框架将给作业的输入看作是一对,并产生一对作为作业的输出,当然输入输出的类型可能是不同的。
下面是Map/Reduce应用程序中常见的数据流.

     绝大多数Map-Reduce应用程序都在网格上执行,不会直接实现低级的Map-Reduce接口,相反,它们使用高级语言,如Pig实现。
Oozie是网格上完美的工作流管理和调度解决方案,它支持多种接口(Hadoop Map-Reduce,Pig,Hadoop Streaming和Hadoop Pipes等),并可以根据时间或数据可用性实现应用程序的调度。
网格模式
这部分内容涉及在网格上运行Map-Reduce应用程序的最佳实践。
输入
Hadoop Map-Reduce专门为处理大批量数据做了优化,Map通常使用并行方式处理数据,至少1个HDFS数据块,也就是说每次最少要处理128MB的数据。
◆默认情况下,这个框架每个Map至少要处理1个HDFS文件,这意味着如果某个应用程序要处理非常大的输入文件,最好是通过一种特殊的输入格式,如MultiFileInputFormat,让每个Map处理多个文件,即便是在处理为数不多的小型输入文件时也理应如此,每个Map处理多个文件可以大大提高效率。
◆如果应用程序需要处理大量的数据,即使它们存在于大型文件中,每个Map处理超过128MB的数据也会更快。
网格模式:在少量Map中聚合处理多个小型输入文件,使用更大的HDFS块大小处理超大型数据集。
Map(映射)
Map的数量通常是由输入的总大小决定的,即所有输入文件的总数据块数,因此,如果你要处理10TB输入数据,块大小128MB,那么总共需要82000个Map。
任务设置需要一段时间,因此执行大型作业时,Map至少需要一分钟。正如前面提到的,让每个Map同时处理多个文件效率会更高,因此,如果应用程序要处理超大型输入文件,让每个Map处理更大的数据块更有效,例如,让每个Map处理更多数据的一个方法是让应用程序处理更大的HDFS数据块,如512MB或尽可能更大。
作为一个极端的例子,Map-Reduce开发团队使用大约66000个Map完成了PB级数据的排序(PetaSort),也就是说,66000个Map处理了1PB数据(每个Map负责12.5GB)。但太多的Map在很短的时间内同时运行很容易造成反效果。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

23

粉丝

2901

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.