hadoop基础一

对于hdfs的管理,需要namenode及datanode。其中namenode用于记录哪些文件分成了哪几个block(默认是64M),以及这些block分别在哪些datanode结点上,并且负

责将客户端上传到hdfs的文件分成n个block,并选择合适的datanode进行存储。可以配置hadoop文件块备份数,如设置成3。

datanode负责将某个block写入到所在的磁盘上,并定时发送心跳到namenode。如果某台datanode挂了,namenode需要将这台datanode上所有block的副本数在没有这台

datanode后依旧为n份(这里为3)。如:datanode上有block A,这时这台datanode挂了,那么hadoop会选择一台含有block A副本的datanode将block A副本增加到另外一台datanode。

对于map reduce的管理,有一个中心job任务控制进程,即:JobTracker。和n个taskTracker。

JobTraker负责将用户提交的job请求,分解成n个task,然后交给相应的taskTracker进行处理,如果某台taskTracker结点挂了,JobTracker负责将它的任务放在一个

健康的结点上进行处理。

有了这几个组件,看下具体请求处理流程:

当前hadoop block大小配置成64M。jobTracker及namenode在一台机子V上,另外三台机子作为datanode及map reduce计算的机子,分别为A,B,C。副本数为3。这时A,B,C三台机子上都会有R1,R2两个block(R1和R2是文件R切分的两个block)。

整个处理流程如图:

这个图包含了四个角色:客户端job client进程,HDFS(含namenode与datanode),jobTracker,taskTracker。

客户端job负责指明要处理的文件是什么,最终reduce输出到什么地方等等,并且与namenode合作,得到一组要处理的数据分片,即split。

HDFS保证数据的可用性,这部分有namenode(单个)与datanode(可以有多个)来完成HDFS数据的维护,保证向HDFS写的文件的可用性。

JobTracker则作为任务的协调者出现,负责将单个客户端提交的job,分解成多个task,并指派到具体的某个taskTracker中。

taskTracker是一个进程,目前单独运行在一个虚拟机,每次新起一个map或reduce任务都需要单独启一个JVM进程,现在公司用的是这种形式,优点是由于每次新的map或reduce完全是在新的jvm进程中运行,不需要关心数据的状态性。缺点是每次都起一个JVM进程会存在一定开销。

在了解了这几个角色的职责后,以下按照上图分析具体过程。

1.首先客户端运行一个job,分别指明了要处理的Map类与Reduce类,输入文件在哪,输出到哪。接着向jobTracker请求说我要运行一个job。

2.jobTracker将这个请求放入一个队列。当jobTracker从队列取到这个job请求并进行处理时,生成一个job id表明一个job开始,记录下,并返回到客户端。

这时在交给客户端job id时,可能会发生丢失传送,tcp重试多次,如果还是没有成功,估计就将job id取消并标为失败。

当然没有传送成功job id给客户端,也有可能是客户端断网,这时客户端再次连接到JobTracker后,由于之前已经将这个job id标为失败,因此客户端收到这个消息后

也将取消这个job。(目前未验证)

3.客户端拿到这个job id后,需要完成将输入文件分成逻辑上n个分片split,以便交给m个Map进行并行处理。这时需要与namenode通信取得这个文件都在哪几个datanode结点上。假设我们要处理文件是65M,采用默认的HDFS block大小64M。这时将切分成2个split。

客户端将分片split及配置信息上传到HDFS。并通知JobTracker,说我已经准备好配置信息及计算好分片split了。

4.JobTracker接收到信息后,开始将split分片尽量分给单独的map。比如共2个分片,有三个taskTracker结点(datanode结点),这时会通知其中两个taskTracker结点,告诉它们要新启一个JVM进程处理map任务了。并将相应的split id及split及配置信息(客户端上传的)在HDFS中的地址告诉它们。

5.taskTracker接收到JobTracker命令后需要新启一个JVM(当然可以配置成不新启)。

然后进行map。

6.在进入map函数前,map进程会先调用InputFormater的getSplits方法,从HDFS根据传过来的split ID取出需要的分片数据及相应配置信息,并封装成一个List<InputSplit>。其中每个InputSplit代表一个数据分片抽象,含数据分片长度,分片文件在哪,以及读取方法。

接着需要将这些InputSplit转成对应Map的key,value。这里Map的inputFormat采用TextInputFormat。这时input key为行号,value为这行数据。

将所有这些InputSplit都转成key,value集合后,开启map方法处理。处理完成后,将数据进行partion,含对数据以key进行排序。这个过程应该会根据reduce数量,

提前按key对reduce数量取模,然后将数据写入相应磁盘文件,如临时文件0,临时文件1(对应两个reduce)。

6.当两个taskTracker都完成了map任务,它们分别通知JobTracker。JobTracker开启分配x个reduce结点进行处理(取决与你配置最多可以启多少个reduce与当前split数),这里为2个reduce。

7.启动好两个reduce结点后,jobTracker有义务告诉这两个reduce从每个map结点取出自己需要的数据.

8.当某个reduce取到所有map结点数据后,将这些数据合成一个大文件,然后按key进行排序组合,相同的key同一组value会单独进行处理。

如我们文件中,数据如下,第一列为key,第二列为value:

kit 26

kit 100

kit 33

ro  1

这时,假设key为kit的三行数据被流转到reduce1,这时reduce1会按key排序,将key为kit的三行数据作为一个集合。处理时reduce对应的value就是一个Iterable集合(含26,100,33)。

接着进行reduce业务逻辑处理,处理完成后将结果按配置写入到相应的HDFS文件中。

hadoop基础一

时间: 2024-10-25 05:42:06

hadoop基础一的相关文章

《Hadoop基础教程》之初识Hadoop

Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程>是我读的第一本Hadoop书籍,当然在线只能试读第一章,不过对Hadoop历史.核心技术和应用场景有了初步了解. Hadoop历史 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 随后在2

《Hadoop基础教程》之初识Hadoop 【转】

Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程>是我读的第一本Hadoop书籍,当然在线只能试读第一章,不过对Hadoop历史.核心技术和应用场景有了初步了解. Hadoop历史 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 随后在2

【Hadoop基础教程】7、Hadoop之一对多关联查询

我们都知道一个地址拥有着多家公司,本案例将通过两种类型输入文件:address类(地址)和company类(公司)进行一对多的关联查询,得到地址名(例如:Beijing)与公司名(例如:Beijing JD.Beijing Red Star)的关联信息. 开发环境 硬件环境:Centos 6.5 服务器4台(一台为Master节点,三台为Slave节点) 软件环境:Java 1.7.0_45.hadoop-1.2.1 1. Map过程 首先使用默认的TextInputFormat类对输入文件进行

【Hadoop基础教程】8、Hadoop之一对多关联查询

我们都知道一个地址拥有着多家公司,本案例将通过两种类型输入文件:address类(地址)和company类(公司)进行一对多的关联查询,得到地址名(例如:Beijing)与公司名(例如:Beijing JD.Beijing Red Star)的关联信息. 开发环境 硬件环境:Centos 6.5 服务器4台(一台为Master节点,三台为Slave节点) 软件环境:Java 1.7.0_45.hadoop-1.2.1 1. Map过程 首先使用默认的TextInputFormat类对输入文件进行

【Hadoop基础教程】9、Hadoop之倒排索引

开发环境 硬件环境:Centos 6.5 服务器4台(一台为Master节点,三台为Slave节点) 软件环境:Java 1.7.0_45.hadoop-1.2.1 1.倒排索引 倒排索引是文档检索系统中最常用的数据结构,被广泛用于全文搜索引擎.它主要是用来存储某个单词(或词组)在一个文档或一组文档的存储位置的映射,即提供了一种根据内容来查找文档的方式.由于不是根据文档来确定文档所包含的内容,而是进行了相反的操作(根据关键字来查找文档),因而称为倒排索引(Inverted Index).通常情况

Hadoop基础学习(一)分析、编写并运行WordCount词频统计程序

前面已经在我的Ubuntu单机上面搭建好了伪分布模式的HBase环境,其中包括了Hadoop的运行环境. 详见我的这篇博文:http://blog.csdn.net/jiyiqinlovexx/article/details/29208703 我的目的主要是学习HBase,下一步打算学习的是将HBase作为Hadoop作业的输入和输出. 但是好像以前在南大上学时学习的Hadoop都忘记得差不多了,所以找到以前上课做的几个实验:wordCount,PageRank以及InversedIndex.

《Hadoop基础教程》之初识Hadoop(转载)

转载自博主:上善若水任方圆http://blessht.iteye.com/blog/2095675 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程>是我读的第一本Hadoop书籍,当然在线只能试读第一章,不过对Hadoop历史.核心技术和应用场景有了初步了解. Hadoop历史 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Jav

[转载] 《Hadoop基础教程》之初识Hadoop

转载自http://blessht.iteye.com/blog/2095675 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程>是我读的第一本Hadoop书籍,当然在线只能试读第一章,不过对Hadoop历史.核心技术和应用场景有了初步了解. Hadoop历史 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎.

Hadoop基础之初识大数据与Hadoop

前言 从今天起,我将一步一步的分享大数据相关的知识,其实很多程序员感觉大数据很难学,其实并不是你想象的这样,只要自己想学,还有什么难得呢? 学习Hadoop有一个8020原则,80%都是在不断的配置配置搭建集群,只有20%写程序! 一.引言(大数据时代) 1.1.从数据中得到信息 我们看一张图片: 我们知道这个图片上的人叫张小妹,年龄20岁,职业模特.但是如果只有数据没有图片的话,就没有意义的数据了.所以数据一定是在特定的环境下才有意义的. 我们再来看一张图片: 从这张图片分析出: 从纵向分析,