基本概念
HDFS分布式文件存储系统,是基于Java实现的,是Hadoop最重要的核心组件,支持顺序写入,而非随机定为读写。
HDFS前提和设计目标
- 存储超大文件
- HDFS适合存储大文件,单个文件大小通常在百兆以上
- HDFS适合存储海量文件,总存储量可达PB,EB级
- 硬件容错
- 基于普通机器搭建,硬件错误是常态而不是异常,因此错误检测和快速、自动的恢复是HDFS最核心的架构目标
- 流式数据访问
- 为数据批处理而设计,关注数据访问的高吞吐量
- 简单的一致性模型
- 一次写入,多次读取
- 一个文件经过创建、写入和关闭之后就不需要改变
- 本地计算
- 将计算移动到数据附近
基本构成
- 数据块
- 文件以块为单位进行切分存储,块通常设置的比较大(最小6M,默认128M)
- 块越大,寻址越快,读取效率越高,但同时由于MapReduce任务也是以块为最小单位来处理,所以太大的块不利于对数据的并行处理
- 一个文件至少占用一个块(逻辑概念)
- nameNode与DataNode
- nameNode负责维护整个文件系统的信息,包括:整个文件树,文件的块分布信息,文件系统的元数据,数据复制策略等;
- dataNode存储文件内容,负责文件实际的读写操作,保持与nameNode的通信,同步文件块信息
nameNode深入
- 启动过程:
- 开启安全模式:不能执行数据修改操作
- 加载fsimage
- 逐个执行所有Edits文件中的每一条操作将操作合并到fsimage,完成后生成一个空的edits文件
- 接收dataNode发送来的心跳消息和块消息
- 根据以上信息确定文件系统状态
- 退出安全模式
- 安全模式:文件系统只接受读数据请求,而不接收删除、修改等变更请求
- 什么情况下进入:nameNode主节点启动时,HDFS进入安全模式
- 什么时候退出:系统达到安全标准时,HDFS退出安全模式
- dfs.namenode.safemode.min.datanodes:最小可用datanode数量
- dfs.namenode.safemode.threshold-pct:副本数达到最小要求的block占系统总block数的百分比
- dfs.namenode.dafemode.extension:稳定时间
- 相关命令:
- hdfs dfsadmin -safemode get:查看当前状态
- hdfs dfsadmin -safemode enter:进入安全模式
- hdfs dfsadmin -safemode leave:强制离开安全模式
- hdfs dfsadmin -safemode wait:一直等待直到安全模式结束
HDFS HA高可用性
- dataNode:通过数据冗余保证数据的可用性
- nameNode:在2.0以前存在SPOF(single point of failure单点故障)风险,从2.0之后:
- 把name.dir指向NFS(Network File System)
- QJM(Quorum Journal Manager)方案