HDFS 总结

这篇博客全面介绍了HDFS,包括其基本概念、特性、shell操作、工作机制、NAMENODE和DATANODE的工作原理,以及如何通过Java API进行操作。此外,还提供了两个案例,分别展示了如何开发shell采集脚本和JAVA采集程序进行数据上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

课程大纲(HDFS详解) 2

1. HDFS前言 3

2. HDFS的概念和特性 3

3. HDFSshell(命令行客户端)操作 4

3.1 HDFS命令行客户端使用 4

3.2命令行客户端支持的命令参数 4

3.2 常用命令参数介绍 5

4. hdfs的工作机制 8

4.1 概述: 8

4.2 HDFS写数据流程 9

4.2.1 概述 9

4.2.2 详细步骤图 9

4.2.3 详细步骤解析 9

4.3. HDFS读数据流程 10

4.3.1 概述 10

4.3.2 详细步骤图: 10

4.3.3 详细步骤解析 10

5. NAMENODE工作机制 11

5.1 概述 11

5.2元数据管理 11

5.2.1 元数据存储机制 11

5.2.2 元数据手动查看 11

5.2.3 元数据的checkpoint 12

6. DATANODE的工作机制 13

6.1 概述 13

6.2 观察验证DATANODE功能 13

7. HDFSjava操作 13

7.1 搭建开发环境 13

7.2 获取api中的客户端对象 14

7.3 DistributedFileSystem实例对象所具备的方法 14

7.4 HDFS客户端操作数据代码示例: 15

7.4.1 文件的增删改查 15

7.4.2 通过流的方式访问hdfs 18

课程大纲(HDFS详解)

Hadoop HDFS

分布式文件系统DFS简介

HDFS的系统组成介绍

HDFS的组成部分详解

副本存放策略及路由规则

命令行接口

Java接口

客户端与HDFS的数据流讲解

目标:

掌握hdfs的shell操作

掌握hdfs的java api操作

理解hdfs的工作原理

******HDFS基本概念篇******

1. HDFS前言

  1. 设计思想

分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;

  1. 在大数据系统中作用:

为各类分布式运算框架(如:mapreduce,spark,tez,……)提供数据存储服务

  1. 重点概念:文件切块,副本存放,元数据

2. HDFS的概念和特性

首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件

其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色;

重要特性如下:

  1. HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M
  2. HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
  3. 目录结构及文件分块信息(元数据)的管理由namenode节点承担

——namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及所在的datanode服务器)

  1. 文件的各个block的存储管理由datanode节点承担

---- datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication)

  1. HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改

(注:适合用来做数据分析,并不适合用来做网盘应用,因为,不便修改,延迟大,网络开销大,成本太高)

******HDFS基本操作篇******

3. HDFS的shell(命令行客户端)操作

3.1 HDFS命令行客户端使用

HDFS提供shell命令行客户端,使用方法如下

3.2 命令行客户端支持的命令参数

        [-appendToFile <localsrc> ... <dst>]

        [-cat [-ignoreCrc] <src> ...]

        [-checksum <src> ...]

        [-chgrp [-R] GROUP PATH...]

        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]

        [-chown [-R] [OWNER][:[GROUP]] PATH...]

        [-copyFromLocal [-f] [-p] <localsrc> ... <dst>]

        [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]

        [-count [-q] <path> ...]

        [-cp [-f] [-p] <src> ... <dst>]

        [-createSnapshot <snapshotDir> [<snapshotName>]]

        [-deleteSnapshot <snapshotDir> <snapshotName>]

        [-df [-h] [<path> ...]]

        [-du [-s] [-h] <path> ...]

        [-expunge]

        [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]

        [-getfacl [-R] <path>]

        [-getmerge [-nl] <src> <localdst>]

        [-help [cmd ...]]

        [-ls [-d] [-h] [-R] [<path> ...]]

        [-mkdir [-p] <path> ...]

        [-moveFromLocal <localsrc> ... <dst>]

        [-moveToLocal <src> <localdst>]

### HDFS 知识点总结 #### 1. **HDFS 的基本概念** Hadoop分布式文件系统 (HDFS) 是一种专为通用硬件设计的分布式文件系统,具有高容错性和可扩展性特点[^1]。它的主要目标是通过廉价硬件提供可靠的数据存储服务。 #### 2. **HDFS 的核心组件** - **NameNode**: 负责管理文件系统的命名空间和元数据。它将文件系统的元数据存储在内存中,并响应客户端的读写请求[^2]。 - **DataNode**: 实际存储数据块的节点,负责执行数据的实际读写操作并定期向 NameNode 报告其状态。 #### 3. **HDFS 数据存储机制** HDFS 将大文件分割成固定大小的小块(Block),默认情况下,在 Hadoop 1.x 中 block 大小为 64MB,而在 Hadoop 2.x 中则增加到 128MB[^4]。这些 blocks 可以分布在集群的不同 DataNodes 上,从而实现负载均衡和冗余备份。 #### 4. **HDFS 容错能力** 为了提高可靠性,HDFS 对每一个文件都会创建多个副本,默认复制因子为三份[^1]。这意味着即使某些物理设备发生故障,只要还有其他地方存在该文件的有效拷贝就可以恢复丢失的信息。 #### 5. **HDFS 性能优化策略** - 放宽 POSIX 标准限制以便于更高效的批量处理任务需求[^1]. - 提供高吞吐量的数据访问路径特别适用于大规模数据分析场景. #### 6. **HDFS 元数据管理** HDFS 使用 FSImage 和 EditLog 来持久化保存整个文件系统的状态信息以及每次修改记录。FSImage 表示当前时刻完整的文件系统镜像;EditLogs 则记录自上次检查点以来发生的变更日志条目集合[^4]. #### 7. **HDFS 文件写入流程概述** 当客户端上传新文件至 HDFS 时: 1. 首先联系 Namenode 获取分配的目标 Datanodes 地址; 2. 接下来按照预定义好的 Block Size 进行分片传输给指定的一系列 Datanodes ; 3. 最终确认所有 Blocks 已经安全落地之后才会结束此次事务提交过程.[^5] --- ### 示例代码展示如何设置 HDFS 块大小 如果需要调整 HDFS 默认块大小可以在 `hdfs-site.xml` 配置如下参数: ```xml <configuration> <!-- 设置 HDFS 块大小 --> <property> <name>dfs.blocksize</name> <value>134217728</value> <!-- 单位字节(这里表示128M)--> </property> </configuration> ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值