`

hadooop

 
阅读更多

查看博客:http://blog.csdn.net/qq_20641565/article/details/53328279

第一阶段:hadoop hdfs

1.     hadoop是大象的意思(哈度破):两个重点是:存(hdfs)、算(yarn

2.     文件数据分成namenode元数据(基于内存存储)datanode多节点数据(节点保存的是block数据块)。基于内存存储,但是内存断电会丢失,因此要先持久化到磁盘。

3. edits记录metadata的增删改的操作。fsimage(作用如快照)用来放metadata的。定期将editsfsimage合并,用其他服务器(其他节点)去做这件事

4datanode存储block块的元数据信息

5. HDFS写流程:

  第一:datanode节点数据处理:首先在一个整个文件中取一个block数据块,在传输的时候会再次分成更小的块(block1block2block3),并用流式传输,如同流水线传送给第一个datanode服务器, 第一个datanode在接收block2的同时又把block1传给了datanode2。效率高。

  第二:namenode元数据处理:在第一步的同时,把该节点数据block的静态信息存储到namenode服务器,该信息是记录block块在整个文件中的位置、block发到了哪个datanode上了。block块的大小等静态信息。(写成日志的形式记录下来了)

  第三:当block1block2block3都放在了各个datanode之后,说明整个文件中的一个block块中的节点数据处理完成了;完成之后会通知namenode服务器操作完成。

  第四:namenode元数据与datanode节点数据都完成传输之后,此时由datanodenamenode发送心跳,3秒发一次;如果namenode十分钟内都没收到此datanode发送来的心跳,那么它就会把block块拷贝到其他备份服务器上。

 

 

6.HDFS读流程:

 第一:首先元数据在namenode服务器上已存在,节点数据在datanode上也已存在。

 第二:客户端在读数据的时候,先回向namenode发送请求,然后客户端直接在主datanode中去取数据

 第三:在取到datanode中的数据之后,先要验证此black数据完整性。然后在取走。

 第四:如果数据不完整了,那就去备份datanode服务器中去取

 

7. hdfs默认端口号为50070

8.解决namenode内存受限是使用高可用

(1).水平扩展、支持多个namenode(联邦机制)

(2).所有NameNode共享所有DataNode存储资源

(3).每个NameNode分管一部分目录

总结:两个NN是互相独立的,共用所有DN。但是每个NN在处理所有DN数据的时候,只能处理DN中有关自己的数据。

9.解决namenode单点故障

a.昨天的课中DN只向一个NN发送心跳。现在DN会给两个NN分别发送心跳。

b.NN中的静态信息(位置信息、文件大小、偏移量等)是客户端发送来的,此时也要保证两个NN都收到客户端发来的静态信息,

c.做法就是NN在记录日志文件的时候往一个设备(jnn一个小集群)中记录(重定向)日志文件,而不是记录在主NN上,

d.然后这个设备在往主备NN发日志文件。这样最终主备NN互相没有影响,各自玩各自的。但是数据还都是全的。

 

10.在第9中手动解决了namenode单点故障问题,现在要自动解决单点故障问题

10.1使用zkfczkfc故障转移控制,是个进程。它左手抓着NN,右手抓着zookeeper

10.2zkfcNN做健康检测,并在zookeep(根据目录存储的小数据库)中创建了一个文件,哪个zkfc先创建了这个文件,哪个就是主NN

10.3如果一段时间后主NN挂了,此时zkfc通过检查会知道,知道之后会把zookeep

中的这个文件删除(一个删除事件)。由于有了删除事件,此时zookeep会回调另一个zkfc,让另一个zkfc创建文件,之后另一个NN就变成主NN了。即使第一台NN重新启动,它也不会变成主NN了(因为两个NN硬件配置一样,但是第二台NN数据最新)。

10.4如果此时第二台NNzjfc进程被杀死了但是第二台的NN还在(第二台出现故障了),此时第一台NNzkfc会利用远程免密钥的方式把第二台的配置级别降低(降低成备NN),

此时第一台自己在升级为主NN

11.副本放置策略

 

  第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。

  第二个副本:放置在于第一个副本不同的 机架的节点上。

  第三个副本:与第二个副本相同机架的节点。

  更多副本:随机节点

12.block块大小128M,过大过小都不好

 过小:产生小文件过多,导致读时IO多、写时IO多,产生的对象多(因为每个小block块在进入mapreduce阶段的时候都会根据代码产生大量对象。如果block块数量少就能少产生一些对象)

过大:block块过大就会导致并行度不是很好。也不利于数据本地化计算(计算向数据移动)

 

 

 

第二阶段: mapreduce阶段(记住FileInputFormatFileOutputFormat)

1.mapreduce定义:输入(格式化kv)数据集,经过map映射成一个中间的数据集,然后交给reduce进行计算。reduce认为'相同'key为一组,在调用reduce方法的时候,方法内迭代这一组数据进行计算

2.split的概念: 每个split切片会经过一个map映射成一个中间数据集,key决定reduce的并行(同时人也能决定reduce,因为人能控制切片的大小),split切片默认的大小跟block块的大小一样,但是split切片是人为可以调整大小的。

3.讲述过程:用户输入一组数据(其实是个文件),会用spilt进行分割,分割成很多切片,把多切片放到多map中进行并行,切片进入map之后,我们调整map程序把切片数据进行加工,数据的特征放在key里,最后产生一个中间数据集。然后把所有中间集汇总在一起,然后相同的key为一组,调用reduce方法。

4.Map任务处理

  4.1 读取HDFS中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数。                数据如下:<0,hello you>   <10,hello me>                    

  4.2重写map(),接收4.1中产生的<k,v>,进行处理,转换为新的<k,v>输出。          <hello,1> <you,1> <hello,1> <me,1>

  4.3 4.2输出的<k,v>进行分区。默认分为一个区。详见《Partitioner

  4.4 对不同分区中的数据进行排序(按照k)、分组。分组指的是相同keyvalue放到一个集合中。排序后:<hello,1> <hello,1> <me,1> <you,1> 

分组后:<hello,{1,1}><me,{1}><you,{1}>

注意:分区是在进入buffer的时候发送的,排序和分组是buffer溢写的时候产生的。排序并溢写之后就形成了磁盘小文件。

  4.5 (可选)对分组后的数据进行归约。详见《Combiner

5.Reduce任务处理

  5.1 多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上。(shuffle)详见《shuffle过程分析》

  5.2 对多个map的输出进行合并、排序。重写reduce函数,接收的是分组后的数据,实现自己的业务逻辑,处理后,产生新的<k,v>输出。<hello,2> <me,1> <you,1>

2.3  reduce输出的<k,v>写到HDFS中。

6.计算向数据移动(也体现了splitblock的区别)

6.1.数据文件放在hdfs-->nanenode-->datanone(在服务器中)中,此datanode中分block,并且有备份。map信息放在 reduce-->jobtracker--->task(也在服务器中,mapreduce计算的过程需要申请资源,即resourcemanager)

6.2.这里提现了计算向数据移动:因为数据已经分在hdfs的各个datanode服务器中了,因此mapreduce在计算的要去找数据。一个map处理一个black,所以datanodetask在一起呢,然后就能计算了(计算向数据移动)

6.3. splitMapReduce里的概念,是切片的概念,split是逻辑切片 ;而blockhdfs中切块的大小,block是物理切块;

6.4. split的大小在默认的情况下和HDFSblock切块大小一致,为了是MapReduce处理的时候减少由于splitblock之间大小不一致,可能会完成多余的网络之间的传输。

 

 

6.整个过程:

第一步:客户端通过初始化得到split切片,split切片进入map,按行读取,每行都会解析成<k,v>格式。

第二步:程序员会重写map方法。

第三步:map<key,value>处理后的数据会进入buffer缓冲区(进入buffer的时候会进行分区),缓冲区达到80%(阈值)的时候会溢写(把内存的数据写到硬盘中形成一个个的临时小文件(已经按照分区排序过了分区规则是key模上reduce个数,也已经按照key进行分组了)),溢写小文件的时候是使用的快速排序算法sort(此快排的过程叫做combine),整个过程叫排序并溢写。每次排序并溢写形成一个小文件的时候会有一次combiner。注意:(1.在溢写的过程中可以没有combiner的过程的。2.buffer环形缓冲区中的数据和溢写之后的小文件形成的数据格式是kvp,即<key,value,partition>

第四步:等此map的所有缓冲区都准备好了之后,会把小文件合并成一个大文件,并且按分区排序了。组成了外部(每个分区)有序,内部(每个key)无序的文件。是个buffer环。

第五步:(可选)。针对这个文件我们可以做了combiner(微缩版的reduce,在map阶段就计算一遍数据,传入reduce的时候数据量就少了)。

第六步:shufflereduce将众多服务器中的文件抓取并用归并排序进行合并(归并文件的时候,由于文件都是内部有序的了,只需一次IO就行了)。

第七步:调用reduce方法,key相同的一组数据为一组。一个分区调用一次reduce方法,一个分区可以有很多组。

 

 

7.hadoop on yarn资源管理

 

 

7.1YARN:解耦资源与计算

7.2.ResourceManager :主节点,核心 。集群节点资源管理

7.3.NodeManager :与RM汇报资源 ,管理Container生命周期 ,计算框架中的角色都以Container表示

7.4Container:【节点NMCPU,MEM,I/O大小,启动命令】,容器的意思。

默认NodeManager启动线程监控Container大小,超出申请资源额度会杀死它。

7.5.MR数据提交过程 : 客户端-ApplicationMaster-Container;作业为单位,避免单点故障,负载到不同的节点;创建Task需要和RM申请资源(Container

7.6RM-Client:请求资源创建AM

7.7.AM-Client:与AM交互。

7.8任务提交过程:

第一步:client端提交MapReduce job任务给resourcemanager

第二步:resourcemanager随机找一台nodemanager启动applicationmanager(图中有两个client,因此启动了两个applicationmanager

第三步:amrs申请启动Container

第四步:rs找到一台符合资源要求的节点启动Container,并反向注册给client

第五步:client的任务提交到对应的Container上。

 

 

 

八:mapreduce的四个阶段

 

 

 

mapreduce有四个阶段:split map shuffle reduce

1).split进行切片

2).map需要我们重新map方法

3).shufflepartition分区(默认是key的哈希值模上reduce个数)、sort排序(字典序,keyASCII值排序。或者二次排序,例如我们的天气案例中)、group分组(默认按key分组,即key相同的为一组)。shuffle阶段在mapreudce阶段都有。

4).reducereduce也需要我们重写。

注意:如果计算非常简单,我们可以把shuffleredcue过程去掉。这样速度快。

分享到:
评论

相关推荐

    hadooop 权威指南4

    hadoop 实战,详细描述了hadoop的整个生态圈。从hadoop集群的搭建,到mapreduce的开发

    hadooop权威指南 第四版

    ### Hadoop权威指南第四版知识点概述 #### 一、Hadoop概述 - **定义与背景**:Hadoop是一个开源框架,用于分布式存储和处理大型数据集。它最初由Apache基金会开发,旨在支持大规模数据处理任务。...

    hadooop 环境搭建

    ### Hadoop环境搭建知识点详解 #### 一、文档概述及背景 本文档旨在提供一套详细的Hadoop部署指南,包括单机安装与集群安装的过程。通过本文档的学习与实践,可以帮助初学者快速上手Hadoop环境的搭建。...

    hadooop 集群配置

    ### Hadoop集群配置详解 #### 一、Hadoop概述与集群角色分配 ##### 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一款开源分布式计算平台,它以Hadoop分布式文件系统(HDFS)和MapReduce为核心,为用户提供了一...

    hadooop-2.6.0 在64位机器编译后的 native 源码

    标题 "Hadoop-2.6.0 在64位机器编译后的 native 源码" 提供了关于Hadoop的一个关键组件的信息,即它的原生库(native library)。Hadoop是一个开源的分布式计算框架,它允许处理和存储大量数据在分布式集群中。...

    Hadoop大数据开发案例教程与项目实战 数据云盘+源代码+文档说明

    基于Hadoop开发出该系统。系统分为前台和后台两部分,前台采用 JSP 和Js编写界面和前端逻辑校验,后台开发主要采用Java语言,使用spring、bootmetro-master等Java EE开发框架,同时使用 MySQL、HDFS Java API等实现...

    hadoop.dll-and-winutils.exe-for-hadoop2.7.7-on-windows_X64-master

    标题 "hadoop.dll-and-winutils.exe-for-hadoop2.7.7-on-windows_X64-master" 暗示了这是一个针对64位Windows系统优化的Hadoop 2.7.7版本的特定组件集合,主要包含`hadoop.dll`和`winutils.exe`两个关键文件。...

    大数据 hadoop-3.1.3 linux 安装包

    在大数据领域,Hadoop是一个关键的开源框架,用于存储和处理海量数据。Hadoop-3.1.3是Hadoop的稳定版本,提供了许多增强的功能和优化,使其更适合大规模分布式计算环境。在这个针对Linux系统的安装包中,我们将探讨...

    Hadoop编程-Hadoop的安装配置pdf

    在第1章对Hadooop作了少量介绍,主要从宏观上了解Hadoop相关知识和体系结构。为了进一步实际操作和使用Hadoop,首先我们需要进行安装与配置。 Hadoop的安装方式分为三种:单机模式、伪分布式、完全分布式。它们是根据...

    基于Hadoop技术的大数据就业岗位数据分析.docx

    基于Hadoop技术的大数据就业岗位数据分析 作者:梁天友 邱敏 来源:《电脑知识与技术》2021年第31期 基于Hadoop技术的大数据就业岗位数据分析全文共10页,当前为第1页。 基于Hadoop技术的大数据就业岗位数据分析全文...

    windows64位hadoop2.7.7版本hadoop.dll

    windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容

    大数据实验报告Hadoop编程实现InvertedIndex文档倒排索引程序附源码.doc

    Hadoop大数据InvertedIndex文档倒排索引程序实验报告 大数据实验报告中,实现了使用Hadoop编程的InvertedIndex文档倒排索引程序。该程序使用Hadoop的MapReduce框架,通过Map、Combine和Reduce三个阶段,实现了文档...

    hadoop-2.7.1.tar.gz-百度网盘下载链接

    hadoop-2.7.1.tar.gz做大数据处理,分布式计算的,安装在linux服务器上。

    Hadoop下载 hadoop-2.9.2.tar.gz

    摘要 Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。...

    Hadoop-Practical:该存储库适用于Hadooop基础知识的中期实践

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。这个“Hadoop-Practical”项目显然旨在提供一个实践平台,帮助用户深化对Hadoop基础知识的理解。以下是关于Hadoop及其相关技术的一些关键...

    Hadoop的Demo

    在本项目“Hadoop的Demo”中,我们深入探索了Hadoop生态系统,这是一个广泛用于大数据处理和分析的开源框架。这个项目特别针对Hadoop初学者,旨在通过一系列实例帮助他们理解并掌握Hadoop的核心概念和技术。...

    hadoo2.7 hadoop.dll和winutils.exe

    windows远程远程调用 Hadoop 需要把 hadoop.dll、winutils.exe,分别放到目录“C:\Windows\System32”和“$HADOOP_HOME\bin”下。hadoop2.7 版本,亲测可用。

    hadoop-eclipse-plugin-1.0.4.jar

    hadoop eclipse 插件,从源码编译的,在3.7上是正常的,其它版本未测试

    CentOS6.5配置eth0重启报错提示Device eth0 does not seem to be present,delaying initialization 的解决方法

    在搭建Hadooop 完全分布式的时候,从节点一般是从主节点复制过来的,再给从节点配置网络的时候,会出现Device eth0 does not seem to be present,delaying initialization的错误,导致网卡无法重启。 出现这种问题...

Global site tag (gtag.js) - Google Analytics