HDFS相关基础概念

HDFS:hadoop实现的一个分布式文件存储系统,是主/从(Mater/Slave)体系结构,是基于流
数据模式访问和处理超大文件的需求而开发的。它所具有的高容错、高可靠性、高可扩展性、高吞吐率等特征为海量数据提供了,是主从架构,分为namenode,datanode,secondaryNamenode。

Namenode:是master
1、管理 HDFS 的名命空间(
a.文件名称
b.文件目录结构
c.文件属性(权限 创建时间 副本数)
d.文件对应的哪些块(副本块)–>块对应在哪些DN节点上,这些都是在内存中动态维护的,不会持久化到存储这个map映射关系,一般是集群启动和运行时,dn定期(6小时)的发送blockreport(块报告)给nn,那么nn就在内存中动态维护这种映射关系)

2、管理数据块(Block)映射信息

3、配置副本策略

4、处理客户端读写请求。

DataNode:就是Slave。NameNode 下达命令,DataNode 执行实际的操作。

1、存储实际的数据块。

2、执行数据块的读/写操作。
与NN通信:通过RPC协议
a.默认每隔3秒向nn发送一个心跳包 配置参数 dfs.heartbeat.interval ,该参数不要调)
b.每隔6小时发送一次blockreport 块报告,配置参数 dfs.blockreport.intervalMsec

SecondaryNamenode:
定期合并NN节点的fsimage+editlog为新的fsimage,推送给NN,简称checkpoint检查点,配置参数为 dfs.namenode.checkpoint.period默认为3600s和dfs.namenode.checkpoint.txns 默认为1000000条事务,这两个参数都可以,意思就是说当时间到1小时了或者是事务到了100万条也会进行一次合并

HDFS特点:
1.能够运行在廉价机器上,硬件出错常态,需要具备高容错性
2.流式数据访问,而不是随机读写
3.面向大规模数据集,能够进行批处理、能够横向扩展
4.简单一致性模型,假定文件是一次写入、多次读取

HDFS缺点:
1.不支持低延迟数据访问
2.不适合大量小文件存储(因为nn维护一个小文件大概需要250byte的内存,如果小文件过多首先nn就会承受不住,其次也不利于我们的计算任务)
3.不支持并发写入,一个文件只能有一个写入者
4.不支持文件随机修改,仅支持追加写入

HDFS读流程:
1.Client通过DistributedFileSystem对象的open方法,传入一个path路径,然后与nn节点进行RPC协议通信,校验是否有权限以及要读取的文件是否存在,如果都满足,则返回一个FSDataInputStream对象,里面包括要读取文件的部分或者全部的block的位置信息
2.Client调用FSDataInputStream对象的read方法,找与Client网络最近的一个Datanode进行读取,读取完成后会以packet为单位来check校验,如果没问题会关闭与当前DN的通信,如果读取失败,则会记录该信息然后去该数据块的另一个副本进行读取
3.当第一个Datanode读取完成后,开始读取第二个Datanode,重复以上
4.假如block列表读取完毕后该文件还未读取结束,则FileSystem会从NN获取下一批次的block列表,继续读取
5.当该文件读取完成后,Client会调用FSDataInputStream对象的close方法关闭输入流

HDFS写流程:
1.Client调用DistributedFileSystem对象的create方法,传入一个path路径,然后通过RPC协议与NN通信,检查是否有权限创建文件以及该路径是否可存,如果都满足,则创建一个新文件,并返回一个FSDatanodeStream对象,如果不满足,则直接返回一个错误
2.Client将文件进行切分,然后调用FSDataOutputStream对象的write方法开始向第一个Datanode的第一个副本写数据,当第一个副本写完后,由DN完成副本的复制,然后开始向第二个Datanode写
3.当所有数据块都写入完成并收到所有Datanode的packet包校验没问题后,表示写入完成
4.Client调用DistributedFileSystem对象的close方法,关闭输出流
5.Client调用DistributedFileSystem对象的complete方法,告知NN写入成功

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值