概述
HDFS:
为什么出现:一台机器不能存储下所有的数据
是什么:分布式存储文件系统
特点:高容错性(多备份)
批处理(移动计算,而不是移动数据;数据暴露给计算框架)
适合大数据处理(可也达到10K+节点)
流式文件(一次写入,多次读取;不可修改原有文件)
构建在廉价的机器上(多副本,高容错)
提高了磁盘的利用率(如果不切片进行存储,那么当需要拉去数据时,只能从该节点拉去数据,那么此时该节点将会成网络瓶颈,导致网络流量激增。)
缺点:不适合低延迟的数据访问(牺牲了低延迟,保留了高吞吐)
不适合小文件的存取(Master内存中存放了数据块存储位置的元信息,所以占用大量内存;寻道时间大于读取时间)
解决访问:把小文件合并成大文件
不适合并发写入,不适合文件随机修改,只支持追加操作
实现原理:
Hdfs回将数据先进行切片处理,比如说把50GB的数据切成 每块64MB的数据块,然后在多副本的形式存储在多个节点上。然后有两张表(元数据信息),分别时:1、存储被切分的数据由哪几个块组成 2、每个块存储在哪个节点上
这么做,解决了集群的负载均衡,以及解决了网络瓶颈。
Hdfs架构:
Master和slave架构:
Master就是namenode用来存放元数据信息的。负责处理数据的读写请求。
Slave就是datanode存储实际的数据,负责数据读写操作,每个datanonde回定时的向Namenode汇报心跳。
Client访问namenode的时候,告诉namenode我要进行数据存储了,那么此时namenode会告诉client写到哪几个datanode上。Client负责数据的切割。
Namenode存在单点故障问题,所以此时就存在了namenode backup这个东西。
Secondarynamenode 时1.0出现的。而standbynamenode在2.0的时候出现的热备份。
Standbynamenode定期合并fsimage(文件系统的镜像文集那)和fsedits(文件系统的操作日志),推送给namenode。
Hdfs默认三个备份,默认数据块64MB;两个数据都时可配置的。
Hdfs写流程:
Client需要进行写数据的时候,回创建一个DistributedFileSystem询问namenode我现在要写的文件是否存在,不存在则返回给client允许写。此时,client就回告诉FSDataOutputStream,要写数据了,那么在写数据之前,会向namenonde索要三个datanode的位置信息,FSDataOutputStream会将文件以更小的单元pack大小的形式传输给第一个datanode,第一个datanode接受到数据之后,会紧接着把数据传输给第二个datanode,然后第一个datanode会向client索要第二个pack数据,于此同时,第二个datanode会将数据传给第三个(具体过程同第一个datanode)。当所有的block都写完后,client会通知namenode自己写完数据,然后namenode就会进行元数据的记录。
Hdfs读流程:
Client通过namenode获取了所需要的文件有哪几个block,分别这些block又在哪几个datanode。获取到这些信息,然后client就去相应的datanode获取block
Hdfs块副本放置策略:
副本1:同client存放在同一个机架上面
副本2:不同与client的其他机架
副本3:与副本2相同的机架上的另一个节点
其他副本随机选择
Hdfs可靠性策略:
文件损坏:当读取文件之前对CRC32校验码进行校验,如果校验失败,则认为该副本失败,从其他副本读取。
网络或者机器挂了:通过datanode定时发送的心跳来判断,当namenode发现datanode挂了,就会把对应datanode上的数据在其他datanode上进行重构。
Namenode挂了:元信息会定期刷新到磁盘上。备用namenode 。Fsimage和fsedit整合。
最后
以上就是无语耳机为你收集整理的HDFS原理篇HDFS:实现原理:Hdfs架构:Hdfs写流程:Hdfs读流程:Hdfs块副本放置策略:Hdfs可靠性策略:的全部内容,希望文章能够帮你解决HDFS原理篇HDFS:实现原理:Hdfs架构:Hdfs写流程:Hdfs读流程:Hdfs块副本放置策略:Hdfs可靠性策略:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复