众所周知,HDFS中过多的小文件,会给NameNode造成很大的压力,所谓的小文件,是指远远小于文件块大小的文件。
在使用HDFS的过程中,应尽量避免生成过多的小文件。
本文以TextFile为例,介绍一下从本地–>HDFS、HDFS–>本地、以及HDFS–>HDFS的文件上传下载移动过程中,对小文件的合并方法
将本地的小文件合并,上传到HDFS
假设存放在本地的数据由很多个小文件组成,需要上传到HDFS。一般的做法是在本地使用脚本、程序先把小文件合并后再上传。
其实没有必要,HDFS中提供了一个很有用的命令 appendToFile,就可以解决这个问题。
假设本地有两个小文件1.txt和2.txt,里面内容如下:
- [liuxiaowen@dev ~]$ cat 1.txt
- 111111
- 111111
- 111111
- 111111
- [liuxiaowen@dev ~]$ cat 2.txt
- 222222
- 222222
- 222222
- 222222
使用下面的命令,可以将1.txt和2.txt合并,并上传到HDFS:
- [liuxiaowen@dev ~]$ hadoop fs -appendToFile 1.txt2.txt hdfs://cdh5/tmp/lxw1234.txt
- [liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/lxw1234.txt
- 111111
- 111111
- 111111
- 111111
- 222222
- 222222
- 222222
- 222222
下载HDFS的小文件到本地,合并成一个大文件
假设在HDFS的/tmp/lxw1234/目录下,有两个小文件1.txt和2.txt
需要将它们下载到本地的一个文件中。
- [liuxiaowen@dev ~]$ hadoop fs -cat /tmp/lxw1234/1.txt
- 111111
- 111111
- 111111
- 111111
- [liuxiaowen@dev ~]$ hadoop fs -cat /tmp/lxw1234/2.txt
- 222222
- 222222
- 222222
- 222222
使用下面的命令:
- [liuxiaowen@dev ~]$ hadoop fs -getmerge hdfs://cdh5/tmp/lxw1234/*.txt local_largefile.txt
- [liuxiaowen@dev ~]$ cat local_largefile.txt
- 111111
- 111111
- 111111
- 111111
- 222222
- 222222
- 222222
- 222222
合并HDFS上的小文件
如果需要合并HDFS上的某个目录下有很多小文件,可以尝试使用下面的命令:
- [liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/lxw1234/*.txt | hadoop fs -appendToFile - hdfs://cdh5/tmp/hdfs_largefile.txt
- [liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/hdfs_largefile.txt
- 111111
- 111111
- 111111
- 111111
- 222222
- 222222
- 222222
- 222222
注意:这种处理方法在数据量非常大的情况下可能不太适合,最好使用MapReduce来合并。
本文转载:http://lxw1234.com/archives/2015/09/481.htm
相关推荐
本节课程主要介绍 HDFS 的概念、HDFS 存储架构和数据读写流程、HDFS 的 Shell 命令、Java 程序操作 HDFS、Hadoop 序列化、Hadoop 小文件处理、通信机制 RPC 等知识点。 HDFS 概念 HDFS(Hadoop Distributed File ...
DataNode在启动时会遍历本地文件系统,产生一份HDFS数据块和本地文件的对应关系列表(blockreport),然后汇报给NameNode。 客户端读取HDFS中的数据文件时,首先会从NameNode获得组成文件的数据块位置列表,然后...
【HDFS 分布式文件系统】是大数据处理的基础,它为Hive、MapReduce、Spark等组件提供了...了解和熟练运用HDFS的shell客户端,可以有效地管理和操作存储在HDFS中的大数据,从而提升整个大数据处理系统的效率和可靠性。
根据给定文件内容,以下是对该篇文档中提及知识点的详细阐述: 分布式系统与Hadoop分布式文件系统...以上内容充分展示了分布式系统中HDFS的优化存储方法,对于大型分布式系统设计和大数据存储管理具有重要的参考价值。
该命令可以将HDFS中的多个文件合并到本地文件系统。使用方法:hadoop fs -getmerge <hdfs_dir> 。 -put命令 -put命令用于从本地文件系统将文件拷贝到HDFS中。该命令可以将本地文件拷贝到HDFS中的指定目录。使用...
【标题】基于Hadoop的分布式文件系统通过Java实现的本地文件管理系统,将文件存储在HDFS集群中,展示了Hadoop的高效数据处理能力和Java在大数据领域的应用。 【内容详解】 Hadoop是Apache软件基金会开发的一个开源...
实验报告“云计算技术实验报告四HDFS文件的读写”主要涵盖了如何在Hadoop的分布式文件系统(HDFS)上进行文件操作,包括文件的上传和下载,以及文件的合并。该实验是针对计算机科学专业的《云计算技术》课程设计,...
(1)hadoop fs:适用于任何不同的文件系统,比如本地文件系统和 HDFS 文件系统。 (2)hadoop dfs:只能适用于 HDFS 文件系统。 (3)hdfs dfs:跟 hadoop dfs 的命令作用一样,只能适用于 HDFS 文件系统。 一些...
基于Hadoop的分布式文件系统,使用Java语言开发实现了一个本地文件管理系统,其中文件存在于HDFS集群中,通过Java开发的客户端软件进行管理,其功能包括:1、文件分块、加密并上传待HDFS文件系统 2、文件块下载、...
而传统文件系统更适用于随机访问和小文件的处理。 #### 3.1 传统文件系统与HDFS的对比特性 | 特性 | 传统文件系统 | HDFS | |---------------|-------------|----------------| | 数据块大小 | 小 | 大(默认128MB...
1. **归档和合并**:通过将小文件打包成大文件(如Hadoop的Har Archive格式),减少NameNode的元数据负担。这样不仅减少了文件的数量,还使得文件读取更加高效。 2. **元数据服务优化**:如使用HDFS Federation或...
- `-appendToFile`用于追加本地文件到HDFS文件末尾。 - `-cat`用于查看HDFS文件内容。 - `-count`统计HDFS路径下文件和目录的数量。 - `-cp`复制HDFS上的文件或目录。 - `-get`将HDFS上的文件或目录下载到本地...
- **-appendToFile <localsrc> **:将本地文件追加到 HDFS 文件的末尾。 - **-cat [-ignoreCrc] **:显示 HDFS 文件的内容。忽略 CRC 校验。 - **-checksum **:显示文件的校验和。 - **-chgrp [-R] GROUP PATH**:...
- `bin/hadoop fs -put`:将本地文件上传到HDFS。 - `bin/hadoop fs -get`:从HDFS下载文件到本地。 - `bin/hadoop fs -cat`:查看HDFS上的文件内容。 - `bin/hadoop fs -mv`:重命名或移动HDFS上的文件或目录。 - `...
这些元数据被存储在一个称为fsimage的磁盘文件中,同时,所有的修改操作则记录在一个edits日志中。SecondNameNode并非备用的NameNode,而是帮助NameNode定期合并fsimage和edits,生成新的检查点,减轻NameNode的压力...
9. 高级特性:HDFS支持文件的追加操作,以及在文件系统内的文件移动和重命名。HDFS还引入了快照功能,允许用户在特定时间点创建文件系统的快照,用于备份和恢复。 10. 实战应用:HDFS广泛应用于互联网公司,如...
NameNode的元数据包括文件系统命名空间和目录树结构,这些信息被存储在本地磁盘上的两个主要文件中,一个是命名空间镜像文件,另一个是文件改动日志文件。NameNode还负责跟踪所有DataNode节点的状态,以及管理数据...
分布式文件系统-HDFS1是Hadoop的核心组成部分,用于提供大规模数据存储和处理的能力。Hadoop是一种开源框架,它使得用户可以在普通硬件上构建和运行处理大量数据的应用程序。HDFS,全称Hadoop Distributed File ...