怎么改变HDFS块大小

1.上传test1.txt
[hadoop@Master hadoop]$ hadoop fs -put  /home/hadoop/input/test1.txt  /usr/hadoop/in
Warning: $HADOOP_HOME is deprecated.

2.查看上传的文件大小

[hadoop@Master hadoop]$ hadoop fs -stat "%o" /usr/hadoop/in/test1.txt
Warning: $HADOOP_HOME is deprecated.

67108864

3.修改hdfs-site.xml配置文件,增加全局参数dfs.block.size


        <property>
                 <name>dfs.block.size</name>
                 <value>512000</value>
         </property>


注意:blockSize必须是io.bytes.per.checksum的整数倍,否则会报错


put: io.bytes.per.checksum(512) and blockSize(100000) do not match. blockSize should be a multiple of io.bytes.per.checksum


4.再上传test1.txt文件

[hadoop@Master bin]$  hadoop fs -put /home/hadoop/input/test1.txt /usr/hadoop/in/test1000.txt

5.查看test1000.txt文件大小

[hadoop@Master bin]$ hadoop fs -stat "%o" /usr/hadoop/in/test1000.txt
Warning: $HADOOP_HOME is deprecated.

512000





<think>好的,用户现在想要了解HDFS中的文件大小和数据相关的知识。首先,我需要回忆之前已经提供的关于HDFS的介绍,特别是关于数据的部分。之前的回答里已经提到过HDFS将文件分割成固定大小,默认是128MB或256MB,副本机制等。但用户现在更具体地询问文件大小和数据的关系,可能需要更详细的信息。 接下来,我需要考虑用户的潜在需求。用户可能在使用HDFS时遇到了存储优化的问题,或者想知道如何设置块大小来提升性能,特别是处理大文件或小文件的情况。他们可能关心为什么块大小这么设置,或者如何调整块大小来适应不同的应用场景。 然后,我需要组织信息结构。首先解释数据的基本概念,包括默认大小、设计目的,比如减少元数据开销和优化磁盘寻址时间。然后讨论文件大小HDFS的影响,尤其是大文件和小文件的处理方式。用户可能想知道如何处理小文件问题,比如合并或使用其他工具如HAR文件或HBase。 另外,需要提到块大小的配置方法,因为用户可能有调整的需求。还要包括注意事项,比如块大小与硬件的关系,以及最佳实践建议,比如避免小文件,合理设置块大小,监控元数据等。 同时,要确保回答符合之前设定的系统级指令,比如使用正确的中文术语,数学表达式用$...$格式,但在这个问题中可能用不到数学公式,所以可能不需要特别处理。结构要清晰,分点说明,可能用表格比较不同文件大小的处理方式。 还要检查是否有遗漏的关键点,例如HDFS如何处理超过块大小的文件,与数据节点的分布,以及块大小对MapReduce任务的影响。这些都是用户可能关心的深层问题,需要简明扼要地解释。 最后,需要验证信息的准确性,比如Hadoop 2.x之后的默认块大小是否是128MB,而Hadoop 3是否有变化,副本机制是否正确,以及小文件问题的解决方案是否有其他替代方法。确保所有信息都是最新的,避免过时的内容。</think>以下是关于HDFS文件大小与数据的详细介绍,结合设计原理、实际影响和操作建议: --- ### 一、数据(Block)的核心概念 #### 1. **定义与默认值** - **数据**是HDFS存储文件的基本单位,文件会被切分为多个分散存储。 - **默认块大小**: - Hadoop 1.x/2.x:**128 MB** - Hadoop 3.x:**256 MB**(可配置) - **设计目的**: - 减少NameNode元数据压力(越大,元数据条目越少)。 - 优化磁盘寻址时间(减少随机读取开销)。 #### 2. **块大小的意义** - **物理存储无关性**: 文件逻辑上连续,但物理上分散存储在不同节点。 - **读写优化**: 大减少客户端与DataNode的网络交互次数,提升吞吐量。 --- ### 二、文件大小HDFS的影响 #### 1. **大文件(GB/TB级)** - **优势**: - 完美匹配HDFS设计目标,利用率高。 - 并行读写性能好(MapReduce/Spark任务可并发处理多个)。 - **示例**: 一个1 GB文件会被切分为: - Hadoop 2.x:$1 \text{GB} / 128 \text{MB} = 8 \text{}$ - Hadoop 3.x:$1 \text{GB} / 256 \text{MB} = 4 \text{}$ #### 2. **小文件(远小于块大小)** - **问题**: - **存储浪费**: 一个10 KB文件仍占用1个完整(默认128MB),实际存储空间浪费。 - **元数据膨胀**: 每个文件/占用NameNode约150字节内存,100万个小文件需约150 MB内存。 - **解决方案**: - 合并小文件(SequenceFile、HAR归档文件)。 - 使用HBase存储小文件(底层基于HDFS但优化了元数据管理)。 --- ### 三、块大小配置与调优 #### 1. **修改块大小** - **全局配置**: 在`hdfs-site.xml`中设置: ```xml <property> <name>dfs.blocksize</name> <value>134217728</value> <!-- 128MB,单位:字节 --> </property> ``` - **单文件指定**: 在代码或命令中临时覆盖: ```bash hdfs dfs -D dfs.blocksize=256m -put largefile.txt /path/ ``` #### 2. **选择块大小的权衡** | 块大小 | 优势 | 劣势 | |--------|------|------| | **增大** | 减少元数据量,提升吞吐 | 并行度降低,任务负载不均 | | **减小** | 提高并行度,减少数据浪费 | 元数据压力增大,网络交互频繁 | --- ### 四、数据的物理存储 #### 1. **存储规则** - 每个存储为**独立物理文件**(如`blk_1073741825`),包含数据和校验信息。 - 副本按以下策略分布(默认3副本): - 第1副本:写入请求发起节点(客户端所在DataNode)。 - 第2副本:同一机架内的另一节点。 - 第3副本:不同机架的节点。 #### 2. **与MapReduce任务** - **数据本地性(Data Locality)**: Map任务优先调度到存储对应的节点,减少网络传输。 - 本地 → 本地任务(最优) - 同机架 → 同机架任务(次优) - 跨机架 → 跨机架任务(最差) --- ### 五、注意事项与最佳实践 1. **避免小文件**: 合并为SequenceFile或使用HBase存储。 2. **块大小与硬件匹配**: - HDD硬盘:适合较大(减少寻址时间) - SSD硬盘:可适当减小(随机读取性能高) 3. **监控元数据**: 定期检查NameNode内存使用,防止小文件导致内存溢出。 --- ### 六、示例场景分析 #### 场景:存储1个500 MB文件(Hadoop 3.x,块大小256MB) 1. **分**:$500 \text{MB} / 256 \text{MB} = 2 \text{}$(实际为2×256MB + 1×剩余244MB)。 2. **副本分布**:每个生成3个副本,共占用$(2+1)×3=9$个存储空间。 3. **读取优化**:并行从6个不同节点(2×3副本)读取数据。 --- 通过合理配置块大小和管理文件分布,可以最大化HDFS的存储效率与计算性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值