2015-02-12 13:59:07
来 源
中存储网
Hadoop
精通 HADOOP一书是由罗伯特.李翻译自英文书 <Pro Hadoop>(英文原版下载),原书作者是Jason Venner。这是一部很专业的大数据数据,由浅入深全面介绍了HADOOP的相关概念,系统核心原理以及众多的应用实例。
《精通 HADOOP》 
 
关于
 
精通 HADOOP一书是由罗伯特.李翻译自英文书 <Pro Hadoop>(英文原版下载),原书作者是Jason Venner。这是一部很专业的大数据数据,由浅入深全面介绍了HADOOP的相关概念,系统核心原理以及众多的应用实例。中存储为了方便大数据爱好者学习方便,整理了HTML版本,供大家在线阅览和学习HADOOP。
 
目录
 
1 初识HADOOP
1.1 MAPREDUCE模型介绍
1.2 HADOOP介绍
1.2.1 Hadoop的核心MapReduce
1.2.2 Hadoop的分布式文件系统
1.3 安装HADOOP
1.3.1 安装的前提条件
1.3.2 安装Hadoop
1.3.3 检查你的环境
1.4 执行和测试HADOOP样例程序
1.4.1 Hadoop的样例代码
1.4.2 测试Hadoop
1.5 解决问题
1.6 总结
2 MAPREDUCE任务的基础知识
2.1 HADOOP MAPREDUCE作业的基本构成要素
2.1.1 输入分割块
2.1.2 一个简单的Map任务:IdentityMapper
2.1.3 一个简单的Reduce任务:IdentityReducer
2.2 配置作业
2.2.1 指定输入格式
2.2.2 设置输出参数
2.2.3 配置Reduce阶段
2.3 执行作业
2.4 创建客户化的MAPPER和REDUCER
2.4.1 设置客户化的Mapper
2.4.2 作业完成
2.4.3 创建客户化的Reducer
2.4.4 为什么Mapper和Reducer继承自MapReduceBase
2.4.5 使用客户化分割器
2.5 总结
1 初识Hadoop
 
单个低端硬件通常不能满足应用程序对资源的需求。许多企业发现安装他们使用的业务软件的计算机并不具有较好的性价比。对于他们来说,一个简单的解决方案就是购买具有更多内存和 CPU 的高端硬件,这通常需要巨额资金。只要你能买到最高端的硬件,这个解决方案能够达到理想的效果,但是通常来说,预算是最主要的问题。我们有另外一个可选方案,那就是构建一个高性能的集群。一个集群能够模拟成为一个单个计算机,然而,它需要专业的安装和管理服务。现今,存在着许多专有的高性能的并且造价昂贵的集群。
 
幸运的是,一个更经济的解决方案是通过云计算来获得必要的计算资源。这里是一个典型的应用场景,你需要处理一大批数据,这些数据分成若干个项,项与项之间不存在依赖关系,因此,你可以使用单指令多数据(SIMD)算法。Hadoop 核心提供了云计算的开源框架和一个分布式文件系统。
 
Hadoop 是阿帕奇软件基金下的一个著名的项目。这本书是一本在 Hadoop 核心上开发和运行软件的使用指南。本章介绍了 Hadoop 核心,讲述了如何安装和运行 Hadoop。1.1 MapReduce模型介绍Hadoop 完全支持 MapReduce 模型,MapReduce 模型是谷歌公司为了在廉价的计算机集群上处理以 P 数量级计算的大数据集而提出的一个解决方案。这个解决方案把解决问题分成两个不同的步骤:
 
 Map: 初始化数据的读入和转换,在此期间,框架对互不依赖的输入记录进行并行处理。
 
 Reduce: 处理数据的组合和抽样,有关联的数据必须通过一个模块进行集中处理。Hadoop 中 MapReduce 的核心概念是把输入的数据分成不同的逻辑块,Map 任务首先并行的对每一块进行单独的处理。这些逻辑块的处理结果会被重新组合成不同的排序的集合,这些集合最后由 Reduce 任务进行处理。图表 1-1 阐述了 MapReduce 模型的工作原理。
 
执行在集群中的多个节点上。Map 任务负责转换输入记录成为名值对。所有 Map 任务的输出会被重新组合成多个排序的集合,这里面的每一个排序的集合会被派发给一个单独的Reduce 任务。Reduce 任务会对集合中排序的关键字和关联在关键字的多个数据值进行处理。Reduce 任务也是并行的运行在集群中的不同节点上的。应用程序开发人员仅仅需要提供4项输入信息给Hadoop框架:读取和转换输入记录到键值对的作业类,一个 Map 方法,一个 Reduce 方法和一个转换键值对到输出记录的 Reduce任务类。
 
我的第一个 MapReduce 应用程序是一个专业的网络爬虫。这个爬虫接受大量的网页地址,然后读取和处理网页地址的内容。因为这个应用要处理大量的网页地址,所以获取他们的内容是极其浪费时间和资源的。整个处理流程包含一下几个步骤,
 
1. 输入网页地址和获得网页地址关联的元数据。
2. 规格化网页地址。
3. 排除重复的网页地址。
4. 通过预定义的排除和包含过滤器过滤网页地址。
5. 通过预定义的非取内容列表过滤网页地址。
6. 通过预定义最近已看列表过滤网页地址。
7. 获取网页地址内容。
8. 标志网页地址内容。
9. 更新最近已看列表。
10. 为下一个应用程序准备工作列表。
 
在这个项目中,我有 20 个机器可以使用。这个应用程序原来的实现是非常复杂的,它使用了一个开源分布式队列框架,它的效率非常低。因为,我花费了大量的时间在开发应用程序和对应用程序进行调优。因此,这个项目濒临失败。随后,其他团队的一个成员建议我使用 Hadoop。
 
我花费了一整天的时间建立了一个具有 20 台机器的 Hadoop 集群,接下来,试验性的执行了它的样例程序以后,我的团队花了几个小时的时间想出了一个解决方案,在这个解决方案中包含了九个 Map 方法和三个 Reduce 方法。目标是每一个 Map 和 Reduce 方法不能超过 100 行的代码量。那一周结束后,我们实现的基于 Hadoop 的应用程序就已经比原来的实现更快和更稳定。图表 1-2 阐述了它的架构。标志网页内容的步骤使用了第三方类库,不幸的是,它偶尔的会出现问题并且引起整个集群瘫痪。
 
图表 1-2 我的第一个 MapReduce 应用程序的架构
 
使用 Hadoop 能够很容易的把分布式应用程序并行的运行在集群上,集群上的一个节点的失败不会影响其他节点的操作,一个作业在一个节点上的失败,Hadoop 会分配其他的节点进行重试,因为这些优点,Hadoop 已经成为我最喜欢的开发工具之一。
 
谷歌和雅虎都是用MapReduce集群来处理以P数量级计算的大数据集。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。