查看博客:http://blog.csdn.net/qq_20641565/article/details/53328279
第一阶段:hadoop hdfs
1. hadoop是大象的意思(哈度破):两个重点是:存(hdfs)、算(yarn)
2. 文件数据分成namenode元数据(基于内存存储)和datanode多节点数据(节点保存的是block数据块)。基于内存存储,但是内存断电会丢失,因此要先持久化到磁盘。
3. edits记录metadata的增删改的操作。fsimage(作用如快照)用来放metadata的。定期将edits和fsimage合并,用其他服务器(其他节点)去做这件事
4datanode存储block块的元数据信息
5. HDFS写流程:
第一:datanode节点数据处理:首先在一个整个文件中取一个block数据块,在传输的时候会再次分成更小的块(block1,block2,block3),并用流式传输,如同流水线传送给第一个datanode服务器, 第一个datanode在接收block2的同时又把block1传给了datanode2。效率高。
第二:namenode元数据处理:在第一步的同时,把该节点数据block的静态信息存储到namenode服务器,该信息是记录block块在整个文件中的位置、block发到了哪个datanode上了。block块的大小等静态信息。(写成日志的形式记录下来了)
第三:当block1,block2,block3都放在了各个datanode之后,说明整个文件中的一个block块中的节点数据处理完成了;完成之后会通知namenode服务器操作完成。
第四:namenode元数据与datanode节点数据都完成传输之后,此时由datanode向namenode发送心跳,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使用zkfc,zkfc故障转移控制,是个进程。它左手抓着NN,右手抓着zookeeper。
10.2zkfc对NN做健康检测,并在zookeep(根据目录存储的小数据库)中创建了一个文件,哪个zkfc先创建了这个文件,哪个就是主NN。
10.3如果一段时间后主NN挂了,此时zkfc通过检查会知道,知道之后会把zookeep
中的这个文件删除(一个删除事件)。由于有了删除事件,此时zookeep会回调另一个zkfc,让另一个zkfc创建文件,之后另一个NN就变成主NN了。即使第一台NN重新启动,它也不会变成主NN了(因为两个NN硬件配置一样,但是第二台NN数据最新)。
10.4如果此时第二台NN的zjfc进程被杀死了但是第二台的NN还在(第二台出现故障了),此时第一台NN的zkfc会利用远程免密钥的方式把第二台的配置级别降低(降低成备NN),
此时第一台自己在升级为主NN。
11.副本放置策略
– 第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
– 第二个副本:放置在于第一个副本不同的 机架的节点上。
– 第三个副本:与第二个副本相同机架的节点。
– 更多副本:随机节点
12.block块大小128M,过大过小都不好
过小:产生小文件过多,导致读时IO多、写时IO多,产生的对象多(因为每个小block块在进入mapreduce阶段的时候都会根据代码产生大量对象。如果block块数量少就能少产生一些对象)
过大:block块过大就会导致并行度不是很好。也不利于数据本地化计算(计算向数据移动)
第二阶段: mapreduce阶段(记住FileInputFormat、FileOutputFormat)
1.mapreduce定义:输入(格式化k、v)数据集,经过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)、分组。分组指的是相同key的value放到一个集合中。排序后:<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.计算向数据移动(也体现了split与block的区别)
6.1.数据文件放在hdfs-->nanenode-->datanone(在服务器中)中,此datanode中分block,并且有备份。map信息放在 reduce-->jobtracker--->task(也在服务器中,mapreduce计算的过程需要申请资源,即resourcemanager)
6.2.这里提现了计算向数据移动:因为数据已经分在hdfs的各个datanode服务器中了,因此mapreduce在计算的要去找数据。一个map处理一个black,所以datanode与task在一起呢,然后就能计算了(计算向数据移动)
6.3. split是MapReduce里的概念,是切片的概念,split是逻辑切片 ;而block是hdfs中切块的大小,block是物理切块;
6.4. split的大小在默认的情况下和HDFS的block切块大小一致,为了是MapReduce处理的时候减少由于split和block之间大小不一致,可能会完成多余的网络之间的传输。
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的时候数据量就少了)。
第六步:shuffle:reduce将众多服务器中的文件抓取并用归并排序进行合并(归并文件的时候,由于文件都是内部有序的了,只需一次IO就行了)。
第七步:调用reduce方法,key相同的一组数据为一组。一个分区调用一次reduce方法,一个分区可以有很多组。
7.hadoop on yarn资源管理
7.1.YARN:解耦资源与计算
7.2.ResourceManager :主节点,核心 。集群节点资源管理
7.3.NodeManager :与RM汇报资源 ,管理Container生命周期 ,计算框架中的角色都以Container表示
7.4.Container:【节点NM,CPU,MEM,I/O大小,启动命令】,容器的意思。
默认NodeManager启动线程监控Container大小,超出申请资源额度会杀死它。
7.5.MR数据提交过程 : 客户端-ApplicationMaster-Container;作业为单位,避免单点故障,负载到不同的节点;创建Task需要和RM申请资源(Container)
7.6.RM-Client:请求资源创建AM
7.7.AM-Client:与AM交互。
7.8任务提交过程:
第一步:向client端提交MapReduce job任务给resourcemanager。
第二步:resourcemanager随机找一台nodemanager启动applicationmanager(图中有两个client,因此启动了两个applicationmanager)
第三步:am向rs申请启动Container
第四步:rs找到一台符合资源要求的节点启动Container,并反向注册给client
第五步:client的任务提交到对应的Container上。
八:mapreduce的四个阶段
mapreduce有四个阶段:split map shuffle reduce
1).split进行切片
2).map需要我们重新map方法
3).shuffle:partition分区(默认是key的哈希值模上reduce个数)、sort排序(字典序,key的ASCII值排序。或者二次排序,例如我们的天气案例中)、group分组(默认按key分组,即key相同的为一组)。shuffle阶段在map和reudce阶段都有。
4).reduce:reduce也需要我们重写。
注意:如果计算非常简单,我们可以把shuffle和redcue过程去掉。这样速度快。
相关推荐
hadoop 实战,详细描述了hadoop的整个生态圈。从hadoop集群的搭建,到mapreduce的开发
### Hadoop权威指南第四版知识点概述 #### 一、Hadoop概述 - **定义与背景**:Hadoop是一个开源框架,用于分布式存储和处理大型数据集。它最初由Apache基金会开发,旨在支持大规模数据处理任务。...
### Hadoop环境搭建知识点详解 #### 一、文档概述及背景 本文档旨在提供一套详细的Hadoop部署指南,包括单机安装与集群安装的过程。通过本文档的学习与实践,可以帮助初学者快速上手Hadoop环境的搭建。...
### Hadoop集群配置详解 #### 一、Hadoop概述与集群角色分配 ##### 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一款开源分布式计算平台,它以Hadoop分布式文件系统(HDFS)和MapReduce为核心,为用户提供了一...
标题 "Hadoop-2.6.0 在64位机器编译后的 native 源码" 提供了关于Hadoop的一个关键组件的信息,即它的原生库(native library)。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" 暗示了这是一个针对64位Windows系统优化的Hadoop 2.7.7版本的特定组件集合,主要包含`hadoop.dll`和`winutils.exe`两个关键文件。...
在大数据领域,Hadoop是一个关键的开源框架,用于存储和处理海量数据。Hadoop-3.1.3是Hadoop的稳定版本,提供了许多增强的功能和优化,使其更适合大规模分布式计算环境。在这个针对Linux系统的安装包中,我们将探讨...
在第1章对Hadooop作了少量介绍,主要从宏观上了解Hadoop相关知识和体系结构。为了进一步实际操作和使用Hadoop,首先我们需要进行安装与配置。 Hadoop的安装方式分为三种:单机模式、伪分布式、完全分布式。它们是根据...
基于Hadoop技术的大数据就业岗位数据分析 作者:梁天友 邱敏 来源:《电脑知识与技术》2021年第31期 基于Hadoop技术的大数据就业岗位数据分析全文共10页,当前为第1页。 基于Hadoop技术的大数据就业岗位数据分析全文...
windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容
Hadoop大数据InvertedIndex文档倒排索引程序实验报告 大数据实验报告中,实现了使用Hadoop编程的InvertedIndex文档倒排索引程序。该程序使用Hadoop的MapReduce框架,通过Map、Combine和Reduce三个阶段,实现了文档...
hadoop-2.7.1.tar.gz做大数据处理,分布式计算的,安装在linux服务器上。
摘要 Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。这个“Hadoop-Practical”项目显然旨在提供一个实践平台,帮助用户深化对Hadoop基础知识的理解。以下是关于Hadoop及其相关技术的一些关键...
在本项目“Hadoop的Demo”中,我们深入探索了Hadoop生态系统,这是一个广泛用于大数据处理和分析的开源框架。这个项目特别针对Hadoop初学者,旨在通过一系列实例帮助他们理解并掌握Hadoop的核心概念和技术。...
windows远程远程调用 Hadoop 需要把 hadoop.dll、winutils.exe,分别放到目录“C:\Windows\System32”和“$HADOOP_HOME\bin”下。hadoop2.7 版本,亲测可用。
hadoop eclipse 插件,从源码编译的,在3.7上是正常的,其它版本未测试
在搭建Hadooop 完全分布式的时候,从节点一般是从主节点复制过来的,再给从节点配置网络的时候,会出现Device eth0 does not seem to be present,delaying initialization的错误,导致网卡无法重启。 出现这种问题...