hadoop相关概念回顾


前言

大数据特点:5V
体量大:volume 采集、储存、计算量大
数据种类多:variety 结构化 半结构化 非结构化
增长速率大:velocity
价值密度低:value
准确性、数据的质量:Veracity

hadoop,狭义上讲时java软件、数据分析平台,广义上讲是围绕hadoop所生成的生态圈。

主要面对的问题是,大数据的储存和计算问题。方案来自谷歌的三篇论文启发,分布式储存大数据,将程序移到数据资源中进行计算。
即hadoop的三大组件:HDFS,hadoop分布式文件系统;Yarn,分布式资源管理和调度平台,MapReduce,大数据计算引擎。

一、Zookeeper

1.特点

分布式协调服务(铲屎官)
特性:
分布式小文件存储系统,节点可以储存数据(1M)
全局数据一致性
选举、监听机制

节点类型:
永久节点:一致存在,不重复
临时节点:会话关闭则消失
永久序列化节点:永久存在,重复会在后面加上序列号
临时序列化节点:临时存在,重复会在后面加上序列号

监听机制:
对节点状态进行监听,节点状态改变默认触发监听。一次监听设置,只会响应一次改变,多次监听需要循环设置。

选举机制:
过半原则,集群机器2N+1
权重计算,myid,zxid等参数

全局数据一致性:
写操作唯一入口leader
原子广播方式广播数据变化ZAB。

2.leader选举机制

zookeeper作为分布式文件协调系统,为标准的主从架构模式,其节点称之为znode,作为分布式架构,其具有全局数据一致性的特点,又另一个特性小文件存储系统,默认每个节点最大储存1M的数据。

在znode的选举机制中,遵循过半原则,集群数量2N+1,即超过一半的znode确认了leader则选举成功。

在选举过程中znode有以下状态:

1、looking 即,未有leader时的状态,会发起选举

2、following 即当前状态为从节点状态

3、leading 即当前状态为主节点状态

4、observing 即为观察者状态,无选举和投票权,只能进行读操作

znode间的集群选取主要根据FastLeaderElection算法,其中重要的参数为myid(配置的znode节点表示) 和zxid(事务id)等。

1、在zookeeper启动阶段,因为zxid都为0,此时根据myid的大小进行选举,如5台机器,myid分别为1,2,3,4,5。集群启动时,znode1自己启动,投票自己。

2、根据第一轮结果,zonde1获得一票,但是未过一半,进入looking阶段,开启第二轮,zonde2此时启动

3、此时,zonde2发起投票给自己发布报文,zode1接收报文,根据myid投票给node2。

4、计算第二轮结果,node2获得两票,未过一半,进入looking阶段,开启第三轮,zode3启动

5、zode3发起投票投给自己,发布报文告诉node1,node2重新投票。

6、zonde3获得三票到达一半,成为leader,node1,node2改变状态为follower,并对zonde3开启监听,node4开启。

7、因为已经存在了leader,node4接收到广播消息改变为follower节点,监听znode3。node5与node4相同。

即,leader选举成功。若过程中出现宕机谁的数据新谁当选leader,事务无差异时谁的myid大谁当选

二、HDFS

1.组成与职责

HDFS集群组成,主从架构:
Namenode:元数据存储metadata、namespace
Datanode:实际数据存储
SecondaryNamenode:帮助Namenode完成内存元数据的合并

2.HDFS读流程和写流程

大数据存储问题:

文件传输和存储数据量太大:逻辑切片,分块储存(2.0之后128M每块)
文件查询速率和资源问题:元数据管理,不实际储存数据,记录元数据于内存中。
文件安全问题:三副本机制,共三个。
1、第一台机器与Namenode相同机架
2、第二台机器与第一台不同机架
3、第三胎机器与第二台不同机器
每一块三副本一起写入HDFS。
面向分析,大数据,不支持直接修改。

HDFS写流程:

hadoop分布式文件系统,主要由namenode和secondarynamenode、datanode进行管理,其中,namenode储存元数据(meta data),datanode储存实际的数据,secondarynamenode负责合并内存元数据。在HDFS的读流程中:

1、客户端通过RPC(远程过程调用)HDFS,进行写数据写入请求,hdfs服务端确认请求检验请求目录和目标是否存在,返回相应的datanode位置信息

2、客户端读取数据(根据数据的大小以128M分为数据块block)块block1及其2个副本(默认总数3副本),以数据包(packet,每个64K)形式通过输出流向datanode1发送数据

3、数据以管道形式(pipeline)从客户端传输至datanode1(储存,流出)–>datanode2(储存,流出)–>datanode3(储存)

4、同时从datanode3反向进行数据ack校验结果,直至block1传输完毕

5、随后客户端请求传输block2,NN返回datanode位置信息,进行余下数据写入。

6、当所有数据传输完毕后,客户端通知NN数据上传完毕,NN记录数据元数据,完成写入。

​ ​ HDFS读流程:

​ ​ 1、客户端通过RPC连接HDFS,进行读取请求,NN进行检核请求路径和目标信息,检测通过则继续

​ ​ 2、NN视情况返回数据的datanode信息

​ ​ 3、返回的datanode信息是有序的,在网络拓扑图中离客户端近的优先。datanode状态好的靠前,stack(响应慢的)靠后

​ ​ 4、客户端通过输入流到返回的数据块上read信息,在第一个读取完毕之前,连接到第二个继续读取

​ ​ 5、数据读取完之后,在客户端中根据顺序进行数据合并,合并完成之后进行CRC检验

3.HDFS元数据管理

解决问题:
读取速率问题:将元数据放在在内存中,内存元数据=上次的fsimage+edit_log,定期将元数据持久化到内存中
日志文件过大问题:每天形成新的日志文件
NN性能问题:让SNN进行元数据、日志合并

HDFS元数据管理:
1、(开机由DATANODE主动汇报和历史结合)内存元数据最新最全,生成新的日志文件,SNN定时将旧日志文件和fsimage拉去过来进行checkpoint
2、SNN进行合并元数据和日志
3、发送给NN形成历史内存元数据
4、与新的日志文件组成最新的内存元数据(持久化磁盘中)

三、MapReduce与Yarn

1.MapReduce思想

分而治之:汽车生产线
map:映射,输入到输出的一中关系
reduce:减少,汇总

2.MapReduce过程

maptask个数(并行度):文件大小、文件个数、逻辑切片大小(split大小)
reducetask个数(并行度):未设置,默认-1,一个reduce。设置N则N个,同时数据会在shuffle阶段分区。分区即key.hash进行模2运算。

1、客户端通过TextInputFormat组件(按行读)读取数据,进行map操作(业务操作),操作数据形成<k,v>形式,进入到shuffle阶段。
2、根据reduce参数确定是否分区(partition)
3、分区或未分区的数据进入环形内存缓冲区,根据80%的内存溢出比例,溢写数据进到磁盘
4、进行数据的sort(字典排序)和merge(合并)操作、规约,写入本地
5、每个reduce向maptask拉取(copy)结果,进行merge(合并)操作
6、随后进行sort(字典排序),grouping(分组)操作
7、结果通过textoutputformat组件输出结果。

3.Yarn集群组成和功能

ResourceNodeManager、NodeManager和内部组件ApplicationMaster。

ResourceNodeManager:资源管理、调度平台
NodeManager:本机资源管理、运行容器
ApplicationMaster:运行程序,在mapreduce中具体实现为Mr程序(MrappMaster)

调度策略:
1、fifo scheduler:先进先出
2、fair scheduler:公平,多队列,每个队列共享资源,按权重分配
3、capacity scheduler:容量调度,多队列,先进先出(默认策略)

3.MapReduce在Yarn集群中的调度流程

1、客户端向RM请求执行AM
2、RM根据请求并结合NM汇报的资源状况分配容器给客户端运行AM
3、客户到指定的NM上配合NM启动容器,运行AM程序
4、AM启动成功后要向RM进行注册,并建立通信保持连接
5、AM根据本次任务的逻辑切片向RM申请资源运行maptask
6、RM根据调度策略和资源状况将任务分配到相应的队列
7、根据调度策略运行本次程序时,AM到各个NM上启动容器运行Mr并监督maptask运行装况向RM汇报
8、reducetask与maptask相同
9、本次任务执行结束后,AM向RM申请收回容器
10、AM最后把任务的执行情况汇报给RM并申请销毁AM

四、高可用与hadoop集群方案

1.高可用相关概念

高可用:持续可用,即程序在一段时间内持续提供服务的能力。
单点故障:即某个程序或机器出现故障会导致全局的服务停用
故障转移:单点故障发生后,一段时间内人为或自动解决故障的能力
高可用的实现方式:主备集群
解决的问题:
脑裂:集群无主、集群多主。(保证集群只有一主)
数据一致性:数据不一致导致的程序混乱,服务出错。(数据共享)

2.HDFS的高可用实现JMQ

实现方式:主备集群
脑裂解决方式:利用zookeeper选举特性,实现zkfc组件,主备机器抢注临时节点,抢注成功则为主,发生异常时,主断开,节点删除,备份监听到消息,主动登录主机器,杀掉主机器进程,注册节点成为主。
数据一致性:利用journal node共享数据(2N+1)台普通机器,写入日志文件edit_log,一半写入则视为成功,暴漏读写接口。保证DATANODE数据一致;

3.Yarn的高可用实现

利用zookeeper分布式小文件储存和leader选举机制,直接提供ResourcenodeManager的主备服务;


总结

时光如水,人生逆旅矣。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值