HDFS,数据块,NameNode&DataNode概念及一些原理

分布式文件系统 ?

管理网络中跨多台计算机存储的文件系统称为分布式文件系统(distributed fileSystem)

HDFS ?

HDFS 即 Hadoop Distributed FileSystem(Hadoop分布式文件系统)

超大文件:上百M,GB,T的文件
流式数据访问:一次写入,多次读取是最高效的访问模式
不适合需要低时间延迟的数据访问:HDFS为高数据吞吐量应用优化,可能会以时间为代价
带个写入者:HDSF的文件写操作只支持单个写入者,且写操作以 只添加 的方式在文件末尾写数据

数据块

  • HDFS的块(block)默认为128M
  • HDFS中小于一个块的文件不会占据整个块的空间

HDFS的块为什么这么大?

最小化寻址开销

NameNode&DataNode

HDFS集群有两类节点:
1. 管理节点 NameNode
2. 工作节点 DataNode

NameNode

  • NameNode管理文件系统的命名空间
  • 维护文件系统树及整棵树内所有的文件和目录
  • 记录每个文件各个块所在的数据节点信息(非永久保存,启动时根据数据节点信息重建)

这些信息以文件形式保存在磁盘上:命名空间镜像文件;编辑日志文件

DataNode

DataNode是文件系统的工作节点,根据客户端或NameNode调度需要,存储并检索数据块

  • 没有NameNode DataNode将无法使用

HDFS工作机制

  • HDFS集群分为两大角色:NameNode、DataNode
  • NameNode负责管理整个文件系统的元数据
  • DataNode 负责管理用户的文件数据块
  • 文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上
  • 每一个文件块可以有多个副本,并存放在不同的datanode上
  • Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量
  • HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

NameNode

元数据存储机制

  • 内存中有一份完整的元数据(内存meta data)
  • 磁盘有一个“准完整”的元数据镜像(fsimage)文件(在namenode的工作目录中)
  • 用于衔接内存metadata和持久化元数据镜像fsimage之间的操作日志(edits文件)
  • 当客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存meta.data中

元数据的checkpoint

每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)

CheckPoint流程图

配置参数

dfs.namenode.checkpoint.check.period=60  #检查触发条件是否满足的频率,60秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
#以上两个参数做checkpoint操作时,secondary namenode的本地工作目录
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}

dfs.namenode.checkpoint.max-retries=3  #最大重试次数
dfs.namenode.checkpoint.period=3600  #两次checkpoint之间的时间间隔3600秒
dfs.namenode.checkpoint.txns=1000000 #两次checkpoint之间最大的操作记录

secondary namenode的另一个作用

namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据

DataNode

  • 存储管理用户的文件块数据
  • 定期向namenode汇报自身所持有的block信息(通过心跳信息上报)

确定块报告间隔配置(以毫秒为单位)

<property>
    <name>dfs.blockreport.intervalMsec</name>
    <value>3600000</value>
    <description>Determines block reporting interval in milliseconds.</description>
</property>

Datanode掉线判断时限参数

HDFS默认的超时时长为10min+30s

超时时长的计算公式为:

timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
<property>
        <name>heartbeat.recheck.interval</name>
        <value>2000</value><!-- 毫秒 -->
</property>
<property>
        <name>dfs.heartbeat.interval</name>
        <value>1</value><!-- 秒 -->
</property>
发布了118 篇原创文章 · 获赞 10 · 访问量 7万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览