HDFS

HDFS1.0

记录存储文件block的位置

namenode

  • 管理着文件系统命名空间
    – 维护着文件系统树及树中的所有文件和目录

  • 存储元数据
    – NameNode保存元信息的种类有:
    • 文件名目录名及它们之间的层级关系
    • 文件目录的所有者及其权限
    • 每个文件块的名及文件有哪些块组成

• 元数据保存在内存中
– NameNode元信息并不包含每个块的位置信息
• 保存文件,block,datanode之间的映射关系

  • SecondNameNode
    -是namenode的小秘书

Datanode

• 负责存储数据块,负责为系统客户端提供数据块的读写服务
• 根据NameNode的指示进行创建、删除和复制等操作
• 心跳机制,定期报告文件块列表信息
• DataNode之间进行通信,块的副本处理

  • 数据块——磁盘读写的基本单位
    – HDFS默认数据块大小64MB
    – 磁盘块一般为512B
    – 原因:块增大可以减少寻址时间,降低寻址时间/文件传输时间,若寻址
    时间为10ms,磁盘传输速率为100MB/s,那么该比例仅为1%
    – 数据块过大也不好,因为一个MapReduce通常以一个块作为输入,块过
    大会导致整体任务数量过小,降低作业处理速度

Hadoop更倾向存储大文件原因:

  • 一般来说,一条元信息记录会占用200byte内存空间。假设块大
    小为64MB,备份数量是3 ,那么一个1GB大小的文件将占用
    163=48个文件块。如果现在有1000个1MB大小的文件,则会占
    用1000
    3=3000个文件块(多个文件不能放到一个块中)。我们
    可以发现,如果文件越小,存储同等大小文件所需要的元信息就
    越多,所以Hadoop更喜欢大文件。

元信息持久化

– 在NameNode中存放元信息的文件是fsimage。在系统运行期间
所有对元信息的操作都保存在内存中并被持久化到另一个文件
edits中。并且edits文件和fsimage文件会被
SecondaryNameNode周期性的合并
• 运行NameNode会占用大量内存和I/O资源,一般
NameNode不会存储用户数据或执行MapReduce任务。

hafs HA high availability

在HA的集群里头,两台独立的机器会被个配置成为一个NameNode。在任何时刻,只能有一个namenode是active的,另外一个是standby状态。active的namenode是负责来自client的所有请求操作,而standby则在待命随时准备成为active的namenode。

为了保持namenode active和namenode standby 之间的同步,两个namenode之间通过一个叫做JournalNodes的守护进程来保持同步的。当namenode active的namespace有被修改的时候,namenode active会把这些操作日志记录在journalnodes上。然后namenode standby就会从journalnodes的edits上读取这些操作日志。当namenode拿到edits操作日志之后,它就会把日志的操作应用到自己的namespace里头。一旦namenode active出现问题,namenode standby就可以确保自己在成为namenode active之前,自己已经读取了所有的edits操作日志。

为了提供一个快速的热备切换,就需要namenode standby时刻知道block的位置信息,要实现这一点,datanode节点配置了namenode的信息,然后datanode主动把block的位置信息和心跳数据发送给两个namenode。

确保任何时候只有一个active的namenode是至关重要的,否则,可能导致数据丢失和一些严重后果。journalnodes会保证同一时刻只有一个namenode active。在热备切换的时候,即将成为active的namenode standby会接管writer的角色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值