众所周知,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
相关推荐
基于Hadoop的分布式文件系统,使用Java语言开发实现了一个本地文件管理系统,其中文件存在于HDFS集群中,通过Java开发的客户端软件进行管理,其功能包括:1、文件分块、加密并上传待HDFS文件系统 2、文件块下载、...
Linux,eclipse 要求编程实现GetMerger功能,实现从云端(HDFS)中下载一个包含多个文件的路径(文件夹),将所有文件合并后保存到本地(GetMerge)。
充分考虑到数据的时效性、本地性、操作的并发性以及文件之间的相关性,先根据相关性将文件合并,然后采用分布式多级存储,使用内存式Redis数据库做缓存,HDFS做数据的持久化存储,其过程采用预取机制。实验结果表明...
-getmerge <src> <localdst> //将源目录中的所有文件排序合并到一个文件中 -cat <src> //在终端显示文件内容 -text <src> //在终端显示文件内容 -copyToLocal [-ignoreCrc] <src> <localdst> //复制到本地 -...
021 Hadoop 五大服务与配置文件中的对应关系 022 分析Hadoop 三种启动停止方式的Shell 脚本 023 去除警告【Warning$HADOOP HOME is deprecated。】 024 Hadoop相关命令中的【–config configdir】作用 025 Hadoop ...
数据加载语句:可以将数据从本地文件系统或HDFS中导入到Hive表中。 数据查询语句:可以通过类似于SQL的语法查询Hive表中的数据,并支持聚合操作、过滤条件等操作。 数据转换语句:可以通过Hive SQL进行数据转换,...
可以灵活满足项目可处理csv文件,自动忽略首行多线程传输传输后,把文件合并到大文件中可设置后台守护运行重要条件在使用本工具时请注意下面事项文件在移动到原目录时,最好先生成到同一文件系统的其他目录,然后再...
名称节点(NameNode) NameNode是HDFS系统中的管理者,负责管理文件系统的命名空间,记录了每个文件中各个块所在的数据节点的位置信息,维护文件系统的文件树及所有的文件和目录的元数据。这些信息以两种数据结构...
2.3.1 将数据导入本地文件系统 技术点8 自动复制HDFS 中的文件 2.3.2 数据库 技术点9 使用Sqoop 将数据导入MySQL 2.3.3 Hbase 技术点10 将数据从HDFS 导入HBase 技术点11 使用HBase 作为MapReduce 的...
1.NameNode 它是 hadoop 中的主服务器,管理文件系统名称空间和 对 集 群 中 存 储 的 文 件 的 访 问 , 保 存 有 metadate 。 2.SecondaryNameNode 它不是 namenode 的冗余守护进程,而是 提供周期检查点和清理...
2.2.4 HBase 技术点6 HBase 导入HDFS 技术点7 将HBase 作为MapReduce 的数据源2.3 将数据导出Hadoop 2.3.1 将数据导入本地文件系统技术点8 自动复制HDFS 中的文件2.3.2 数据库技术点9 使用Sqoop 将...
(二)Hadoop并行处理系统架构 在Hadoop体系的分布式大数据应用中,数据采集模块会将采集到的各种类型的 数据传送到Hadoop的并行处理系统架构中,然后信息数据被保存到HDFS中,传送的数据 会被Hadoop体系中的...
第3章 Hadoop分布式文件系统 HDFS的设计 HDFS的概念 数据块 namenode和datanode 命令行接口 基本文件系统操作 Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询...
map过程的输出是写入本地磁盘而不是HDFS,但是一开始数据并不是直接写入磁盘而是缓冲在内存中,缓存的好处就是减少磁盘I/O的开销,提高合并和排序的速度。默认的内存缓冲大小是100M(可以配置),所以在书写map函数...
Hadoop分布式文件系统;Hadoop的I/O、MapReduce应用程序开发;MapReduce的工作机制;MapReduce的类型和格式;MapReduce的特性;如何构建Hadoop集群,如何管理Hadoop;Pig简介;Hbase简介;Hive简介;ZooKeeper简介;...
请在本地文件系统中下载这些文件。 消费者互联网文件startUpFile 将Spark中的这两个文件合并为一个实体,并回答以下问题。 注意:使用Spark SQL查询回答以下问题。 浦那市有几家初创公司? 浦那有多少家创业公司...
命令,可以把指定库表的数据和元数据导出到本地或者 HDFS 目录中,再通过 IMPORT 命令将元数据和数据文件导入新的 hive 仓库中,但是存在以下问题不符合我们的场景 我们不需要重现导入数据; 我们的每个 hive 中的表...
当然了,目前对于开源的Kettle和Talend本身,也集成了大数据集成内容,可实现hdfs,hbase和主流Nosq数据库之间的数据同步和集成。 网络数据采集:一种借助网络爬虫或网站公开API,从网页获取非结构化或半结构化数据...
HDfS 中的 block 默认保存几份? a)3 份 b)2 份 c)1 份 d)不确定 3. 下列哪个程序通常与 NameNode 在一个节点启动? a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker 4. Hadoop 作者 大数据面试题-全文共...
总的来说, 将集群看做一个操作系统,像操作本地文件一样操作远程文件。 但是fourinone并不提供一个分布式存储系统,比如文件数据的导入导出、拆分存储、负载均衡,备份容灾等存储功能,不过开发人员可以利用...