`

hadoop

 
阅读更多

查看博客: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不太忙的节点。

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

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

  更多副本:随机节点

 

 

 

 

 

 

 

 

第二阶段: mapreduce阶段

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方法,一个分区可以有很多组。

 

分享到:
评论

相关推荐

    Hadoop下载 hadoop-2.9.2.tar.gz

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

    hadoop2.7.3 Winutils.exe hadoop.dll

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是这个框架的一个稳定版本,它包含了多个改进和优化,以提高性能和稳定性。在这个版本中,Winutils.exe和hadoop.dll是两...

    Hadoop下载 hadoop-3.3.3.tar.gz

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...

    hadoop-2.7.7 linux安装包

    此文件为hadoop-2.7.7.tar.gz,可在linux下直接进行安装,如在windows上安装,则需要hadooponwindows-master.zip,用windows-master里的文件替换解压好后hadoop的bin和etc即可。Hadoop 2.7.7是一款开源的分布式计算...

    hadoop插件apache-hadoop-3.1.0-winutils-master.zip

    Apache Hadoop是一个开源框架,主要用于分布式存储和计算大数据集。Hadoop 3.1.0是这个框架的一个重要版本,提供了许多性能优化和新特性。在Windows环境下安装和使用Hadoop通常比在Linux上更为复杂,因为Hadoop最初...

    hadoop2.7.x_winutils_exe&&hadoop_dll

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。标题"hadop2.7.x_winutils_exe&&hadoop_dll"暗示我们关注的是Hadoop 2.7.x版本在Windows环境下的两个关键组件:`winutils.exe`和`...

    hadoop2.7.3的hadoop.dll和winutils.exe

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是Hadoop发展中的一个重要版本,它包含了众多的优化和改进,旨在提高性能、稳定性和易用性。在这个版本中,`hadoop.dll`...

    hadoop2.7.7对应的hadoop.dll,winutils.exe

    在Hadoop生态系统中,Hadoop 2.7.7是一个重要的版本,它为大数据处理提供了稳定性和性能优化。Hadoop通常被用作Linux环境下的分布式计算框架,但有时开发者或学习者在Windows环境下也需要进行Hadoop相关的开发和测试...

    win环境 hadoop 3.1.0安装包

    在Windows环境下安装Hadoop 3.1.0是学习和使用大数据处理技术的重要步骤。Hadoop是一个开源框架,主要用于分布式存储和处理大规模数据集。在这个过程中,我们将详细讲解Hadoop 3.1.0在Windows上的安装过程以及相关...

    hadoop2.6 hadoop.dll+winutils.exe

    标题 "hadoop2.6 hadoop.dll+winutils.exe" 提到的是Hadoop 2.6版本中的两个关键组件:`hadoop.dll` 和 `winutils.exe`,这两个组件对于在Windows环境中配置和运行Hadoop至关重要。Hadoop原本是为Linux环境设计的,...

    hadoop的hadoop.dll和winutils.exe下载

    在Hadoop生态系统中,`hadoop.dll`和`winutils.exe`是两个关键组件,尤其对于Windows用户来说,它们在本地开发和运行Hadoop相关应用时必不可少。`hadoop.dll`是一个动态链接库文件,主要用于在Windows环境中提供...

    hadoop2.7.3 hadoop.dll

    在windows环境下开发hadoop时,需要配置HADOOP_HOME环境变量,变量值D:\hadoop-common-2.7.3-bin-master,并在Path追加%HADOOP_HOME%\bin,有可能出现如下错误: org.apache.hadoop.io.nativeio.NativeIO$Windows....

    hadoop.dll & winutils.exe For hadoop-2.7.1

    在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本文将详细探讨与"Hadoop.dll"和"winutils.exe"相关的知识点,以及它们在Hadoop-2.7.1版本中的作用。 Hadoop.dll是Hadoop在...

    hadoop2.6.0插件+64位winutils+hadoop.dll

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop2.6.0是这个框架的一个重要版本,它包含了多项优化和改进,以提高系统的稳定性和性能。在这个压缩包中,我们关注的是与Windows...

    winutils+hadoop.dll+eclipse插件(hadoop2.7)

    在Hadoop生态系统中,`winutils.exe`和`hadoop.dll`是Windows环境下运行Hadoop必备的组件,尤其对于开发和测试环境来说至关重要。这里我们深入探讨这两个组件以及与Eclipse插件的相关性。 首先,`winutils.exe`是...

    hadoop的dll文件 hadoop.zip

    Hadoop是一个开源的分布式计算框架,由Apache基金会开发,它主要设计用于处理和存储大量数据。在提供的信息中,我们关注的是"Hadoop的dll文件",这是一个动态链接库(DLL)文件,通常在Windows操作系统中使用,用于...

    Hadoop源码分析(完整版)

    Hadoop源码分析是深入理解Hadoop分布式计算平台原理的起点,通过源码分析,可以更好地掌握Hadoop的工作机制、关键组件的实现方式和内部通信流程。Hadoop项目包括了多个子项目,其中最核心的是HDFS和MapReduce,这两...

    hadoop.dll & winutils.exe For hadoop-2.8.0

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。这个压缩包文件包含的是"Hadoop.dll"和"winutils.exe"两个关键组件,它们对于在Windows环境下配置和运行Hadoop生态系统至关重要。 首先,...

    大数据 hadoop-3.1.3 linux 安装包

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

Global site tag (gtag.js) - Google Analytics