查看博客: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
集群中包括4个节点:1个Master,3个Salve,节点之间局域网连接,可以相互ping通,具体集群信息可以查看"Hadoop集群(第2期)
在centos上经过编译后的hadoopnative库,直接替换使用即可
Hadoop实用 该存储库适用于《 Hadooop基础知识》的《中期实践》。
详细介绍Hadoop开发的电子版教程,对于研究云计算来说是一本不错的教程.
64位编译资源,windows运行hadoop程序报错误,将此文件放到hadoop安装的bin目录下,hadoop.dll放置在Windows\System下。
windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容
大数据实验报告Hadoop编程实现InvertedIndex文档倒排索引程序附源码.doc
" " "搭建环境,安排Hadooop2.X,启动Hadoop. " "实验步调 "用户及用户组,添加用户及用户组,添加sudo权限. " " "装置及配置依赖的软件包,装置openssh-server、java、rsync等,配置ss" " "h免密码登录. " " "下载并装置...
在这个项目中例举了多个Hadoop的例子。主要给Hadoop初学者提供一些了解Hadoop的例子。
—— EasyHadoop 国内专业的Hadooop社区,致力于让Hadoop大数据分析更简单第一部分 Hadoop——一种分布式编程框架第1 章 Hadoop简介1.1 为什么写《Hadoop 实战》1.2 什么是Hadoop1.3 了解分布式系统和Hadoop1.4 ...
windows远程远程调用 Hadoop 需要把 hadoop.dll、winutils.exe,分别放到目录“C:\Windows\System32”和“$HADOOP_HOME\bin”下。hadoop2.7 版本,亲测可用。
hadoop eclipse 插件,从源码编译的,在3.7上是正常的,其它版本未测试
hadooop 的开发
hadooop 2.7.5在windows下的运行环境, 配置hadoop_home环境变量直接指向该资源
安装Maven,eclipse,本地Hadooop, eclipse-hadoop插件,然后再windows上就可以运行MapReduce程序
hadooop环境所用的的工具包,是大数据生态圈的组件;另外:Zookeeper是一个开源的分布式应用程序协调服务,基于zookeeper可以实现同步服务,配置维护,命名服务,环境所运用到
在搭建Hadooop 完全分布式的时候,从节点一般是从主节点复制过来的,再给从节点配置网络的时候,会出现Device eth0 does not seem to be present,delaying initialization的错误,导致网卡无法重启。 出现这种问题...