第一章《开始Hadoop核心

概序:

应用程序更频繁的需要性价比更高的计算机, 很多组织发现自己的业务流程已经不再适合运行在单个成本效益的计算机。一个简单但费钱的的解决方案一直来就是去买指定的有很多内存条和处理器的计算机。

为获得必需的计算,一个更经济的解决方案就是云计算。一个常见的模式是有很大的数据需要被转化,这些数据中的每一个数据都不基于其它的数据。这就是单指令多数据算法,Hadoop 的核心就是提供一个开源的云据算框架,同样也是分布式文件系统。

这本书就是指导练习你去基于Hadoop 核心开发和运行一个软件,这个项目主办方是Apache软件基金会。这章将介绍Hadoop 核心和详细告诉你怎么去安装和运行Hadoop 核心。

1.1介绍图压缩模型。

Hadoop 支持MapReduce模型,它是由Google 提出用巨大的便宜的计算机集群去解决一类千亿次的问题。对于一个软件来说这个模型基于两个不同的步骤

·         图:一个初始化的抓取和转换的步骤 ,其中独立的输入记录能并行处理。

·         压缩: 一个聚合或者综合的步骤,其中所有相关的记录必需被一起处理通过的一个单一的实体。

Hadoop MapReduce的核心原理是输入时可能被分割进入一个逻辑块,并且每一个块可能独立的被初始化。这些个独立的处理块的结果 能被物理的划分到独立的集合。图一 说明了MapReduce 模型的工作模式。

 

 

 

 

 

1-1 MapReduce 模型。

 

一个Map 的任务可能运行在集群的任意节点电脑上,多个Map 任务可能并行的运行在集群中。Map 所要做的就是将输入数据转化为键值对。所有的输出的Map 将被分区,并且每一个分区都可以被排序。对于每一个压缩任务都有一个分区,通过减少任务每一个分区的排序键值联系到键.这时可能有多个压缩任务并行的运行在集群上。

程序开发人员只需要提供仅仅4个小项给hadoop框架,将被输入和转换每一条记录到键值对的类,一个映射方法,一个压缩方法,和一个返回输出记录的转化键值对的压缩方法类。

我的第一个MapReduce 程序是一个特殊的网络爬虫,这个爬虫是用来搜索到巨大的媒体的URL集合 并且包含了媒体的内容获取和处理.这些media 很庞大, 不管是在时间和资源的成本,获取这些资源是很大一次。我们做了下面几步,

1,  取得URLs和一些相关的原始数据。

2,  整理这些URLs,

3,  除去一些重复的URLs.

4,  过滤一些URLs  反复的包含和不包含的过滤集。

5,  过滤URL 反复的没有取到的列表。

6,  过滤URLs 反复最近碰到的集合。

7,  获取URL

8,  这个小项内容的指纹。

9,  更新最近的看见的集合。

10,   为下一个程序的工作列表做准备。

 

我有2o台机器运行着这个项目,前一个程序很复杂,它是用一个开源的分布式序列框架,性能很烂,投入了上百个小时去写和优化程序,最后这个项目还是处在失败的边缘。后来另一个项目组的成员建议使用Hadoop

在花了一整天在获得一个集群运行在这20台机器上, 并且成功的运行了一个例子.这个团为九个映射方法和三个压缩方法花费了几个小时创建一个计划. 这个目标对每个映射方法或者压缩方法只花费了不到100行代码。到这周的结束,我基于 Hadoop的应用程序比以前的程序运行起来更快更可靠.1-2 说明了它的架构,这一步用第三方包来记录整个机器的运行情况.

 


1-2 :我的第一个MapReduce 程序的架构图。

很容易的通过集群使用Hadoop 的分布式应用程序,即使在个别机器出现问题时也可以继续运行,通过我最爱的Hadoop 工具。

GoogleYahoo MappReduce 集群来处理PB级别的程序,早在2008年,Google就声称用MapReduce 在一天内处理了20PB的数据。

 

1.2

介绍Hadoop .

Hadoop Apache基金会的顶级项目,它有多个子项目已经从Apache的孵化器中独立出来了。Hadoop 提供和支持开发一个高级的分布式计算的框架。Hadoop 框架 注重于细节处理 让更多的开发人员着重于程序的业务逻辑。

贴士:hadoopLogo是一只黄色玩偶象,而Hadoop的名字是由Hadoop构架师的小孩所取。

Hadoop  核心提供一个基本的服务:创建一个在商用机上的云计算环境,以及开发软件的API,两个核心的基础层是MapReduce 以及云计算环境和分布式文件系统。

 Hadoop 核心Mapreduce.

通过集群,Hadoop 分布式文件系统 Mapreduce 环境提供给用户顶级框架去管理和执行映射及压缩任务。用户需要告诉框架如下东东:

输入工作的分布式文件系统的位置。

输出工作的分布式文件系统的位置。

输入输出格式。

包含的映射函数的类

 可选:包含 压缩函数的类。

Jar文件:包含映射和压缩函数和任何支持的类。

如果一个任务不需要压缩函数,这个用户就不需要指定压缩类,并且一段压缩工作将不会运行。这个框架分成输入,进度和执行映射任务通过集群。如果有请求,它将对映射任务和执行压缩映射输出的任务进行排序。最终输出的结果将被移送到输出目录。并且工作的状态将被报告给用户。

MapReduce是面向与键值对。这个框架将转换每一条记录输入到键值对中,每一个键值对将被写入映射函数一次。这个映射输出是使一个键值对的集合-----名义上,一个键值对意味就是一个输入的键值对,但可以很好的接受多个输出键值对。这些个映射设输出的键值对将会被按Key来分组和排序。压缩函数会被每一个Key所调用,排序顺序是按键和共同键的值来进行排序的。压缩后的输出键不会被改变从压缩的输入键中,只是最后的输出将被排序而已。

这个框架提供了两个进程去管理MapReduce 工作。

一个是任务追踪:管理这个是用来执行单个在一个集群中的一个计算节点中的映射和压缩任务。

一个是工作追踪:接受提交的任务,提供任务监控和控制和管理分发任务到任务追踪的节点中。

通常,一个集群由一个工作追踪处理和一个或者多个任务追踪去处理每一个节点.工作追踪有个点实效了,这个工作追踪将解决那些独立的任务追踪过程。

Hadoop的分布式文件系统

HDFS是一个文件系统,它被设计成一个为MapReduce系统读取,处理,写入的大块输入文件系统。HDFS对随机访问处理的不是特别好。为了可靠性,文件数据被简单的镜像到多存储节点中。

这些涉及到作为一个副本在Hadoop中的交流。只要至少有一个副本数据块能用,那么用户就不会知道存储服务器是否失效了。

HDFS 服务提供两处理:

命名节点 负责处理和管理文件的原始数据 并且提供管理和监控服务。

数据节点 提供数据存储和数据恢复工作。

HDFS文件系统中将有个命名节点,如果这个该死的节点实效了,Hadoop 内核将搞定恢复和自动备份这个节点,但是不会有错误转移服务。一个集群中将有多个数据节点进程,典型方式是一个集群中每一个存储节点都有一个数据节点进程。

 Note: 我们经常看到一个集群的节点提供包括任务追踪服务以及数据节点服务,也经常看到一个节点提供工作追踪和命名节点服务。

 

1.3 安装Hadoop

就像所有的软件,你需要一些先决条件在你开始使用Hadoop.Windows下开发Hadoop 应用程序是可行的,Cygwin(一个Windows下对Unix环境模拟)提供安装。不过还是强烈建议你让这些节点运行在一个现代化的Linux分布式Hadoop集群中。

 贴士:对于使用Hadoop,你需要一些基本的Linux java知识 所有的这本书上的例子将会是在shell 中搞。

先决条件:

Ferdora 8

Sun Java 1.6

Hadoop 0.19.0 or later

Hadoop 先前0.18.2 版本多大使用范型,这本书的例子不会在这些版本下编译。Java 版本到1.6 将不支持所有在Hadoop核心需要的语言功能。 另外,Hadoop的核心能稳定的运行在SunJDK上,还能得到很多其他JDK厂商的帮助。这本书的例子是基于Hadoop0.19.0,而它需要JDK1.6

我们需要一个好点的Linux.所以我选择了Red Hat Package Manager(RPM) 工具,它被用于RedHat ,Fedora, CentOS, 并且,这些个例子会需要 RPM来安装一些程序。

 

 

 

 

 

 

 


 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐