Touch HDFS (hadoop分布式文件系統)
初入HDFS--HadoopDistributedFileSystem
总览
注:本文为学习课程内容整理
环境
具体见上一章:
- hadoop各结点:
hadoop01 hadoop02 hadoop03 NameNode SecondaryNameNode DataNode DataNode DataNode NodeManager NodeManager NodeManager JobHistoryServer ResourceManager
1. Hadoop文件系统
-
hadoop有一个抽象的文件系统概念
-
HDFS是hadoop文件系统的一个实现
-
Java抽象类org.apache.hadoop.fs.FileSystem定义了Hadoopp中的一个文件系统接口
2. 什么是HDFS
- HDFS(Hadoop Distributed FileSystem)最初作为apache Nutch项目的基础架构开发, 是 apache hadoop core项目的一部分
- 适合运行在通用硬件设备上, 有高容错性, 适合部署在廉价机器上
- 提供高吞吐量的数据访问, 适合大规模数据集上的应用
3. HDFS设计目标
适用
- 超大文件
指具有几百MB, GB, TP, 的文件, 目前已经有pb级的Hadoop集群
- 流式数据访问
指一次写入, 多次读取的访问模式, 数据集通常由数据源直接生成或复制, 然后长时间在此数据集上进行操作
- 商用硬件
不需要高可靠性的机器, 而是在商用硬件集群上运行.
不适用
- 低时延的数据访问
不适合低时延的数据访问, 比如几十ms级别的时延, hdfs是设计为大量数据吞吐量优化的, 可能会以时延提高为代价
- 大量小文件
hdfs的namenode将元数据的信息存储在namenode内存中, 因此, hdfs的存储文件数受限于namenode内存容量, 大量小文件会导致namenode内存中存储大量的文件相关信息
- 多用户写入, 任意修改文件
hdfs只支持单用户写入, 而且写入方式总是以"只添加"的方式写入到文件末尾.
不支持多个写入者; 不支持在文件任意位置修改文件
4. HDFS概念
概念
- Block(数据块)
- NameNode(管理节点)
- SecondaryNamenode(辅助节点)
- DataNode(工作节点)
- 块缓存
- 联邦HDFS
概念图
4.1. Block(数据块)
- HDFS的最基本存储单位, DFS上的文件被划分为多个块大小的分块作为独立的存储单元, 默认块大小为 128M, 小于分块的文件 不会 占据整个块的空间
- 数据块的设置原则
1. hdfs的块比磁盘的块大, 这样, 从磁盘传输数据的时间会远大于定位这个块开始位置的时间
2. 这个参数不应该过大, 因为MR的map任务通常一次只处理一个块的数据, 若任务太少, 减少了并发性, 作业速度降低- 数据块的好处
1. 文件被分成很多块存储在很多磁盘中, 所以其大小可以大于网络中任意磁盘容量
2. 简化了存储子系统的设计, 块大小固定, 计算磁盘存储多少个块就相对容易
3. 块适合用于数据备份, 给i高容错能力和可用性
4.2. Namenode(管理节点)
- 管理文件系统的命名空间, 维护系统树及整颗树内的所有文件和目录
- 命名镜像文件和编辑日志文件
- 记录每个文件中各个块的数据节点信息, 在系统启动时根据节点信息重建
- 设置namenode
4.2.1 NameNode深入
- namenode目录结构
- Namenode–VERSION
- layoutVersin: 负整数, 描述当前hdfs的永久性数据结构的版本, 该版本号与hadoop版本无关, 更新递减;
- namespaceID: 是该文件系统的唯一标识符, 是文件系统首次格式化时创建的, 任何新注册的datanode是不知道该值的, 因此,namenode 可以通过改属性鉴别新建的datanode
- cTime: 时间戳, 创建namenode时为0
- staorageType: 该节点的类型
- NameNode–edits
- NameNode–fsimage
4.3. SecondaryNameode(辅助节点)
- NameNode的备份; 定期合并编辑日志与命名空间镜像
- 一般在单独物理机上运行, 需要和namenode一样的内存. 占用大量的cpu时间
- 保存合并的命名空间镜像, 在namenode发生故障时启用
- 设置SecondaryNameNode
4.3.1 SecondaryNameNode深入
- SecondaryNameNode–目录结构
- current与previouse.checkpoint与namenode的current布局相同. 在namenode发生故障时, 可以直接从secondaryNameNode恢复数据
SecondaryNameNode工作原理
4.4. DataNode(工作节点)
- 根据需要存储和检索数据块, 并定期向namenode发送他们所存储的块列表
- HDFS默认块大小128m, 以数据块形式存储数据
- Replication: 副本容量, 默认3个 可以在hdfs-site.xml的dfs.replication属性进行设置
- datanode设置
4.4.1 深入DataNode
- 目录结构
- DataNode–VERSION
4.5. 块缓存
- datanode从磁盘读取块, 对频繁访问的文件, 其对应块被显示的缓存在datanode的内存中, 以堆外块缓存的形式存在
- 默认情况下, 一个块仅缓存在一个datanode的内存中, 作业调度器通过缓存块的datanode上运行任务吗利用块缓存优势提高效率
4.6. 联邦HDFS
- namenode在内存中保存每个文件每个块的引用信息, 因此namenode的内存将限制系统的横向发展
- 联邦HDFS允许namenod实现扩展, 其中每个namenode管理dfs命名空间中的一部分
- 如: 一个namenode管理/user目录下的所有文件, 一个namenode管理/share目录下的所有文件