之前研究hadoop但是笔记和记录都比较散,以后定期的整理到这技术博客中,希望可以帮到大家:
HDFS数据存储
NameNode:
接收客户端的读写服务,
NameNode保存metadata信息包括:
文件owership和permission,
文件包含那些块,block
保存在那个DataNode上。【datanode启动时上报到nameNode】
NameNode的metadata信息在启动后会加载到内存,
Metadata存储到磁盘的文件名为”fsimage”
Block的位置信息不回保存到fsimage
edits记录对metaImage的操作日志。
文件被切分成固定的大小,默认是64M可以修改,若文件不到64M单独作为一个block
一个文件的存储方式:按照文件的大小切分成若干block,存储到不同的节点上,
默认情况会有每个block会有3个副本
Block大小和副本是通过上传客户端上传文件设置的,文件上传成功后副本数变更,block size不能修改。
比如一个50G的文件将会产生好多个block块,每个block块默认会在3个不同的server上存一份。如果一个server挂了,检测副本数小于指定的副本时候会复制一份block放到别的好的server上
SecondNameNode:不是NN的备份,但是可以做部分的备份
主要工作是帮助NN合并editslog,减少NN启动时间。
SNN执行合并时间:
根据配置文件的时间间隔
fs.checkpoint.period 默认是3600秒
根据配置文件设置的edits log大小
fs.checkpoint.size规定edits文件最大默认值是64M
合并时候将edits文件和fsimage一同会转到secondNameNode的server合并同时在合并时候会产生新的edits文件,原来的文件用于合并,最后合并成一个新的fsimage替换原来的fsimage文件
DateNode:
存储block数据
启动时候DN线程会向NN汇报block信息,
通过向NN发送心跳保持与其联系(3秒一次),如果10分钟没有收到心跳,则认为已
经丢失,并copy其上边的block到其他的DN
副本放置策略:第一个副本放置在上传文件的DN上,如果是集群外提交,则随便挑选一台磁盘不满,cpu不大忙的节点。
第二个副本:放置在第一个副本不同的机架的节点上,
第三个副本:与第二个副本相同的节点上。
更多副本:随机节点。
HDFS读流程:
1.客户端发送请求,DistributeFileSystem open 获得block的位置信息NameNode。
2.收到位置信息开始read ,通过FSDateInputstream并发读取dataNode
3.关闭读取流
HDFS写流程:
1. 通过DistributeFileSystem API调用一个create方法创建一个文件,传递文件名文件大小,传递给NN,NN收到信息会计算出需要多少个Block和存储的信息。
2.写入文件到一份DN,DN会创建线程往别的DN上复制副本,复制完成后会返回一个反馈上传成功的信息。
3.上传完成会客户端收到反馈会给NN一个 成功的消息。汇报给NN。
MapReduce分布式计算框架:
离线计算框架,分布式计算框架。
移动计算不移动数据。
分4个阶段:InputHDFS->(split -> mapping-> shuffing-> reducing)-> OutputHDFS->HDFSreplication
1.InputHDFS处理成一个个的split,
2.每一个split由一个mapTask线程执行
3.shuffing执行合并和排序,【将相同的单次进行合并】
3.Reduce执行之后计算出相应的数据。【reduce可以是一个】
4.OutputHDFS—》HDFSreplication
Hadoop计算框架Shuffler:
在mapper和reduce中间的一个步骤,
可以把mapper的输出按照某种key值重新切分和组成n份,把key值符合某种范围的输出送到指定的reducer哪里去.(通过partiong后的数据分过来需要的数据)
MapTask执行后马上执行partion到缓存中,Map缓存在计算时候会出现溢写过程,溢写过程线程启动后,会执行sort和combiner到磁盘。
将disc中的文件在通过fetch的时候会通过parting的规则获得需要的parting数据,
可以简化reduce的过程。
每个mapTask都有一个缓存区,默认是100M存着map的输出结果。
当缓存区快满的时候需要将临时数据以一个临时文件的方式放入磁盘。
溢写(spill)是由单独的线程来完成的,不会影响往缓存区写map结果的线程,(spill.percent默认值是0.8)
当溢写线程启动后,需要对空间内的key做排序。
-假设client设置了conbiner,那么现在就是使用combiner的时候了,将具有相同key的key/value对value加起来,减少溢写到磁盘的数据量。
-当整个mapTask过程结束后对磁盘中mapTask所缠身的所有临时文件merge,对word就像是这样{“word”,[2,5,6,…]},假如有combiner,{word [13]},最终产生一个文件。
-reduce 从tasktracker copy数据。
-copy过来的数据先会放入缓存区中。这里的缓存区大小要比map端的更加灵活,它是基于JVM的head size设置的。
-merge有三种形式:1》内存到内存,2》内存到disk,3》disk到disk。 Merge从不同的tasktracker上拿到数据,{word [13,15,17]}
参考博客:http://langyu.iteye.com/blog/992916
MapReduce的架构:
-主从架构
-
JobTracker
负责调度分配每一个子任务task运行于TaskTracker上,如果发现有失败的task就会重新分配任务到其他节点,每一个hadoop集群中只有一个JobTracker一般他运行在Master节点上。(2.0之后已经没有了)
-从
TaskTracker
TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。为了减少网络带宽Tasktracker最好运行在HDFS的DataNode上。
Hadoop2产生的背景。
Hadoop1中的HDFS和Mapreduce在高可用,扩展性方面存在问题,
HDFS存在的问题:
NameNode单点故障,难以应用在线场景
NamoNode压力过大,且内存受限,影响系统的扩展。
Mapreduce存在的问题:
JobTracker访问压力大,影响系统的扩展性
难以支持Mapreduce[离线计算框架]之外的框架,如strom[流式计算框架],Spark[内存计算框架]等
Hadoop2.x由HDFS,Mapreduce和YARN三个分支完成
HDFS:NNFederation,HA。
1.解决HDFS1.0单点故障问和内存受限问题:
通过主备NN解决单点故障,如果主的NN发生故障,则切换到备的NN上。
所有的DN同时向两个NN汇报数据块信息。
具有两种切换选择
手动切换:通过命令实现主备之间的切换,可以在HDFS升级等场合,
自动切换:基于Zookeeper实现协调,基于zookeeper自动切换方案
ZookeeperFailoverContoller监控NN的健康状况
向zookeeper注册NN
NN挂掉后,ZKFC为NN的竞争锁,获得ZKFC锁的NN变为active
Zookeeper必须是奇数个的,内部是一种投票机制。
2.解决内存受限问题:Federation
HDFSFederation:将元数据分成多分,分散到多个节点中。使得NN可以通过增加机制来进行水平扩展,
能把单个NN负载分散到多个节点中,在HDFS数据规模较大的时候不会降低HDFS的性能。通过多个Namespace来隔离不同类型的应用,把不同类型应用的HDFS元数据的存储和管理分配到不同的NN中。
水平扩展,支持多个NN。
每个NN分管一部分目录。
所有的NN共享所有的DN存储资源。
2.0的框架变了使用方式上不变。
对HDFS使用者透明。
HDFS1.x中的命令和API都能使用。
搭建集群取数据是使用的多个集群。
YRAN:yet another resource negotiator
Hadoop2.0新引入的资源管理器,直接从MRv1演化而来的,
核心思想:将MRv1中的JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现,
ResourceManager:负责整个集群的管理和调度,
ApplicationMaster:负责应用程序相关的事务,比如任务调度,任务监控和容错等。
YARN的引入,使得多个计算框架可运行在一个集群上中。
每个应用程序对应一个ApplicationMaster
目前多个计算机框架可以运行在YARN上,比如MapReduce,Spark,Storm等。
MapReduce:运行在YARN上的MR
YRAN:资源管理系统,有了这个可以有别的计算框架。2.0的优势
将MapReduce作业直接运行在YARN上,而不是由JobTracker和TaskTracker构建的MRv1系统中。
基本的功能模块
YARN:负责资源管理和调度
MRAppMaster:负责任务的切分,任务调度,任务监控和容错等;
MapTask/ReduceTask:任务驱动引擎,于MRv1一致;
每个MapReduce作业对应一个MapAppMaster
MRAppMaster任务调度,
YARN将资源分配给MRAppMaster
MapAppMaster进一步将资源分配给内部的任务。
MRAppMaster容错
失败后,由YARN重新启动,
任务失败后,MRAppMaster重新申请资源。
JN是共享的NN服务器,在linux下使用JN集群,
FailOverController:心跳检查使用Zookepper,
Zookeeper: 协调服务
针对HA使用Test版本的查询对照表请看下章安装配置:
http://janle.iteye.com/blog/2298656
分享到:
相关推荐
Hadoop权威指南----读书笔记
本压缩包提供的“hadoop-common-bin-master”是Hadoop Common模块的源代码编译后的二进制版本,它是Hadoop生态系统的基础组件,包含了各种通用工具和库,如文件系统接口、网络通信协议等。 “winutils.exe”是...
Hadoop-MindMap-思维导图-读书笔记
根据2017大数据发展趋势,结合国内国外的大数据发展现状,以及政策纲要,浅层次的介绍了大数据发展的趋势...文章所述仅代表个人观点,不足之处还请指正。文档仅限学习所用,禁止仅限商业转播。 注:ppt模板取自互联网。
大数据之Hadoop学习教程+笔记合计_超详细完整.zip
自己整理的hadoop学习笔记,很详尽 很真实。linux操作终端下遇到的各种Hadoop常见问题 解决方案
【Hadoop辅助工具笔记】 在大数据处理领域,Hadoop生态系统提供了丰富的辅助工具,以支持整个离线数据分析流程。这些工具不仅包括数据采集、处理,还包括结果数据导出和任务调度等关键环节。本文主要探讨其中的一个...
2. "hadoop-shell.pdf" - 这可能涵盖使用Hadoop Shell命令行工具进行数据操作和管理的知识,包括创建、删除、查看HDFS文件等。 3. "数据同步过程.png" - 这可能是一张图表,解释了Hadoop中数据在不同节点间同步的...
这份"hadopp学习总结1-5"的资料很可能是针对Hadoop基础到进阶的一系列教程或笔记,旨在帮助学习者掌握这个强大的工具。下面我们将深入探讨Hadoop的相关知识点。 1. **Hadoop简介**: Hadoop是Apache软件基金会的一...
Hadoop的源码项目结构主要包括hadoop-common-project、hadoop-hdfs-project、hadoop-mapreduce-project、hadoop-yarn-project等,每个项目下又有多个子项目,包含了Hadoop运行所需的各个组件和客户端等。 在实际...
**Hadoop学习笔记详解** Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储海量数据。它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,两者构成了大数据处理的基础...
【标题】"传智黑马赵星老师hadoop七天课程资料笔记-第七天(全)" 涵盖了Hadoop技术栈的重要知识点,这是一份关于Hadoop学习的详尽资料,特别关注了课程的最后一天内容。在Hadoop的学习过程中,第七天通常会涉及到系统...
hadoop学习笔记,分天学习,原创,亲测,放心使用,没问题。
Hadoop是大数据技术中最重要的框架之一,是学习大数据必备的第一课,在Hadoop平台之上,可以更容易地开发和运行其他处理大规模数据的框架。尚硅谷Hadoop视频教程再次重磅升级!以企业实际生产环境为背景,增加了更...
Hadoop 学习笔记.md
HDFS(Hadoop Distributed File System)是 Hadoop 的核心组件之一,负责存储和管理大规模数据。HDFS 由 NameNode、DataNode 和 SecondaryNameNode 组成。 1. NameNode(nn):负责管理元数据,维护文件系统的目录...
HDFS(Hadoop Distributed File System)是Hadoop生态系统中的一个重要组成部分,它为用户提供了高容错性的文件存储服务,并能够提供高吞吐量的数据访问能力,适合部署在低成本的商用硬件上。 **HDFS的工作流程**:...