Hadoop 分布式文件系统
管理网络中跨多台计算机存储的文件系统称为分布式文件系统
Hadoop有一个称为HDFS的分布式系统
HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上
HDFS的构建思路是这样的:一次写入、多次读取是最高效的访问模式,
HDFS主要特性:
1 支持超大文件,甚至TB的文件
2 检测和快速应对硬件故障
3 流式数据访问,注重的是数据的吞吐量,而不是数据访问的速度
4 简化的一致性模型,一次写入,多次读取
不适合HDFS上的应用
1 低时间延迟的数据访问
2 大量的小文件
3 多用户写入,任意修改文件
数据块
HDFS也有块的概念,默认为64MB,
好处:
1 文件的大小可以大于任意磁盘的容量
2 使用块抽象,简化了存储子系统的设计
* 简化存储管理
* 消除对元数据的顾虑(块只存储数据,而文件的元数据,可以单独存储,这样,其他系统可以单独管理这些元数据)
3 非常适用于数据备份而提供数据容错能力和可用性
HDFS采用了主从(Master/Slave)体系结构,namenode、DataNode、Client。
NameNode:
在一个HDFS中,有一个名字节点(NameNode)和第二名字节点(SecondaryNameNode)
NameNode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录
这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件
名字节点保存的关系:
第一关系:命名空间镜像保存着某一特定时刻HDFS的目录树、元信息和数据块索引等信息。后续对这些信息的改动则保存在编辑 日志中
第二关系:NameNode中与DataNode相关的信息在名字节点每次启动时,都会动态地重建这些信息
datanode:
文件系统的工作节点,它们根据需要存储并检索数据块,并定期向namenode发送它们所存储的块的列表
客户端:
用户和HDFS进行交互的手段,HDFS提供了命令行接口、java API、Thrift接口、C语言库、用户空间文件系统等
HDFS源代码结构:
org.apache.hadoop.hdfs
HDFS信息流动的三种方式:
1 HDFS的文件和目录相关事务部分,利用Hadoop远程过程调用(RPC),发送到名字节点上去执行
2 文件数据的读写,HDFS提供了对数据的流式访问,使用基于TCP的流式数据访问接口,有利于批量处理数据
3 NameNode和SecondaryNameNode之间处理文件系统镜像和编辑日志,使用基于HTTP的流接口
数据节点
以数据块的形式在本地Linux文件系统上保存了HDFS文件的内容,
数据节点管理的目录下一般有4个目录和2个文件:
1 blocksBeingWritten:保存着由客户端发起的正在写的数据块
2 current:已经写入HDFS文件系统的数据块,还有一些系统工作时需要的文件
唯一带目录的子目录,其中既有目录,也有文件
大部分文件以blk_作为前缀,有两种类型:
1 HDFS数据块,例如:blk_37857392342939347832
2 保存数据块的校验信息,例如:blk_37857392342939347832.meta
当目录中存储的数据块增加到一定规模时,数据节点会创建一个新的目录,用于保存新的块及元数据
3 detach:配合数据节点升级,供数据块分离操作保存临时工作文件
4 tmp:保存由数据块复制引发的正在写的数据块
5 storage:保存一段提示信息,一个二进制文件,0.13版本之前是数据块的保存目录
6 in_use.lock:表明目录已经被使用,实现一种锁机制
命名节点
命名节点维护两个重要关系:
1 HDFS文件系统的文件目录树,以及文件的数据块索引,既每个文件对应的数据块列表
目录树、元信息和数据块索引等信息会持久化到磁盘上,保存在命名空间镜像和编辑日志中
2 数据块和数据节点的对应关系,既某一数据块保存在那些数据节点的信息
在名字节点启动后,由数据节点上报,动态建立
命名节点的磁盘目录文件结构:
由${dfs.name.dir}制定,有三个目录和一个文件:
1 current:保存命名空间镜像和编辑日志,它有4个文件
1 fsimage:元数据镜像文件
2 edits:日志文件
3 fstime:保存了最近一次检查点的时间,检查点一般由第二名字节点产生,是一次fsimage和edits合并的结果
4 VERSION:名字节点存储的一些属性
2 image:防止不兼容当前目录结构的名字节点的误启动
3 previous.checkpoint:保存名字节点的上一次检查点,它的目录结构和current目录是一致的
4 in_use.lock:保证名字节点独占使用该目录
第二名字节点:
它定期获取合并名字节点上的命名空间镜像和编辑日志,生成新的命名空间镜像,然后上传名字节点原有镜像,清空编辑日志
名字节点的启动:
1 名字节点加载命名空间镜像,并应用镜像编辑日志,会创建一个新的检查点,开始监听IPC和HTTP请求。
虽然已经对外提供服务,但是只提供一个只读视图,这种名字节点的只读模式成为安全模式
2 处理数据节点启动时的若干远程调用,建立名字节点第二关系,需要一些时间,使名字节点获得足够多的数据节点
3 收集足够的第二关系信息后,名字节点会离开安全模式,进入正常工作状态,允许客户端和系统自身对文件系统进行修改
HDFS安全模式的总结如下:
1 处于安全模式下,HDFS只提供系统的只读视图,不能进行修改
2 名字节点启动时,根据配置,检查第二关系中数据块的副本信息,满足条件时离开安全模式
3 通过命令行支持安全模式状态查询、等待和设置

浙公网安备 33010602011771号