HDFS分块存储

HDFS采用分块存储策略,无论文件大小,都将文件抽象为固定大小的block块,如在Hadoop2中默认为128M。即使文件大小不等于block大小,也会按实际大小存储。块抽象简化了存储子系统,并便于数据备份,提供容错和可用性。此外,频繁访问的文件块可被缓存在DataNode内存中,提升读取性能。

HDFS分块存储

目标:掌握什么是分块存储,HDFS的分块存储策略

hdfs将所有的文件全部抽象成为block块来进行存储,不管文件大小,全部一视同仁都是以block块的统一大小和形式进行存储,方便我们的分布式文件系统对文件的管理

所有的文件都是以block块的方式存放在HDFS文件系统当中,在Hadoop1当中,文件的block块默认大小是64M,Hadoop2当中,文件的block块大小默认是128M,block块的大小可以通过hdfs-site.xml当中的配置文件进行指定

<property>
        <name>dfs.block.size</name>
        <value>块大小 以字节为单位</value>//只写数值就可以
</property>

在这里插入图片描述

一个文件100M,上传到HDFS占用几个快?
一个块128M,剩余的28M怎么办?

事实上,128只是个数字,数据超过128M,便进行切分,如果没有超过128M,就不用切分,有多少算多少,不足128M的也是一个快。这个快的大小就是100M,没有剩余28M这个概念

抽象成数据块的好处

  1. 一个文件有可能大于集群中任意一个磁盘
    20T/128 = xxx块,这些block块属于一个文件

  2. 使用块抽象而不是文件,可以简化存储子系统。

  3. 块非常适合用于数据备份进而提供数据容错能力和可用性

块缓存

通常DataNode从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显示的缓存在DataNode的内存中,以堆外块缓存的形式存在。默认情况下,一个块仅缓存在一个DataNode的内存中,当然可以针对每个文件配置DataNode的数量。作业调度器通过在缓存块的DataNode上运行任务,可以利用块缓存的优势提高读操作的性能。

<think>我们正在处理用户关于HDFS文件存储机制及使用指南的问题。根据系统指令,我们需要使用中文回答,并正确使用LaTeX格式(行内公式用$...$,独立公式用$$...$$)。同时,在回答中引用段落末尾要添加引用标识。用户的问题分为两部分:HDFS文件存储机制和使用指南。我们参考了站内引用内容:-引用[1]提到共享存储系统在HDFS高可用机制中的作用,特别是数据可靠性和一致性。-引用[2]提供了HDFS的基本操作命令,如上传、下载文件等。-引用[3]和[4]详细介绍了HDFS的文件存储机制,包括副本放置策略、读写机制等。因此,我们的回答将包括:1.HDFS文件存储机制:包括副本机制、存储原理(如分块存储)、副本放置策略、写入和读取流程。2.HDFS使用指南:包括基本命令(上传、下载、查看文件等)以及注意事项。我们将按照以下结构组织回答:-第一部分:HDFS文件存储机制1.1基本存储原理(分块存储、副本机制)1.2副本放置策略1.3写入机制(详细步骤)1.4读取机制(详细步骤)-第二部分:HDFS使用指南2.1基本操作命令(上传、下载、查看文件等)2.2注意事项(如HDFS适用场景)在回答中,我们会自然地引用站内资料,并在引用段落末尾添加引用标识[^n]。最后,根据系统指令,我们需要生成相关问题。我们将围绕HDFS文件存储机制和使用方法生成2-3个问题。现在开始组织答案:</think>### HDFS文件存储机制及使用指南 #### 一、文件存储机制 1. **分块存储与副本机制** HDFS将文件分割为固定大小的**数据块**(默认128MB),每个块存储多个副本(默认3份)。这种设计支持海量文件存储,计算公式为: $$文件总存储量 = 文件大小 \times 副本数$$ 副本机制通过分布式存储保障数据可靠性[^1][^4]。 2. **副本放置策略** - 第一副本:写入客户端所在节点(若客户端不在集群,随机选择) - 第二副本:不同机架的节点 - 第三副本:与第二副本同机架但不同节点 该策略平衡了网络带宽与容灾能力[^3][^4]。 3. **写入流程** ```mermaid graph LR A[客户端] --> B[请求NameNode] B --> C[分配DataNode列表] C --> D[建立管道传输] D --> E[DataNode级联写入] E --> F[副本确认] ``` 数据以**Packet(64KB)** 为单位传输,每个Packet包含多个**chunk(512B)+校验和**。写入成功后,DataNode向NameNode汇报块信息[^3][^4]。 4. **读取流程** 客户端从NameNode获取块位置信息,优先读取最近副本。若某个DataNode故障,自动切换到其他副本,确保读取连续性[^3]。 #### 二、使用指南 1. **基础操作命令** | 操作类型 | 命令示例 | 功能说明 | |---|---|---| | **上传文件** | `hdfs dfs -copyFromLocal ~/data.txt /user/input` | 本地→HDFS[^2] | | **下载文件** | `hdfs dfs -copyToLocal /user/output/result.txt ~/` | HDFS→本地[^2] | | **查看文件** | `hdfs dfs -cat /user/logs/system.log` | 输出文件内容 | | **删除文件** | `hdfs dfs -rm /user/temp/tmp.data` | 永久删除 | 2. **关键注意事项** - **适用场景**:适合一次写入多次读取(如日志分析),不适用于频繁修改[^4] - **存储限制**:单个文件最大支持PB级,但小文件会降低NameNode性能 - **高可用保障**:通过共享存储系统(如QJM)实现主备NameNode切换[^1] > **示例操作序列**: > ```bash > # 创建目录 > hdfs dfs -mkdir /user/hdfs_test > # 上传实验数据 > hdfs dfs -copyFromLocal /home/user/sample.csv /user/hdfs_test > # 验证副本数 > hdfs fsck /user/hdfs_test/sample.csv -files -blocks -locations > ``` #### 三、机制优势与局限 - **优势**: - 自动处理硬件故障(通过副本重建) - 线性扩展存储能力(添加DataNode即可扩容) - 跨机架容灾(副本放置策略避免机架失效) - **局限**: - 不支持实时修改(仅允许追加写入) - 高延迟(不适合毫秒级响应场景)[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值