`
sungang_1120
  • 浏览: 310225 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

合并HDFS和本地文件系统中的小文件

阅读更多

 

众所周知,HDFS中过多的小文件,会给NameNode造成很大的压力,所谓的小文件,是指远远小于文件块大小的文件。

在使用HDFS的过程中,应尽量避免生成过多的小文件。

 

本文以TextFile为例,介绍一下从本地–>HDFS、HDFS–>本地、以及HDFS–>HDFS的文件上传下载移动过程中,对小文件的合并方法

将本地的小文件合并,上传到HDFS

假设存放在本地的数据由很多个小文件组成,需要上传到HDFS。一般的做法是在本地使用脚本、程序先把小文件合并后再上传。

其实没有必要,HDFS中提供了一个很有用的命令 appendToFile,就可以解决这个问题。

假设本地有两个小文件1.txt和2.txt,里面内容如下:

  1. [liuxiaowen@dev ~]$ cat 1.txt
  2. 111111
  3. 111111
  4. 111111
  5. 111111
  6. [liuxiaowen@dev ~]$ cat 2.txt
  7. 222222
  8. 222222
  9. 222222
  10. 222222

使用下面的命令,可以将1.txt和2.txt合并,并上传到HDFS:

 

  1. [liuxiaowen@dev ~]$ hadoop fs -appendToFile 1.txt2.txt hdfs://cdh5/tmp/lxw1234.txt
  2. [liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/lxw1234.txt
  3. 111111
  4. 111111
  5. 111111
  6. 111111
  7. 222222
  8. 222222
  9. 222222
  10. 222222

 

下载HDFS的小文件到本地,合并成一个大文件

假设在HDFS的/tmp/lxw1234/目录下,有两个小文件1.txt和2.txt

需要将它们下载到本地的一个文件中。

  1. [liuxiaowen@dev ~]$ hadoop fs -cat /tmp/lxw1234/1.txt
  2. 111111
  3. 111111
  4. 111111
  5. 111111
  6. [liuxiaowen@dev ~]$ hadoop fs -cat /tmp/lxw1234/2.txt
  7. 222222
  8. 222222
  9. 222222
  10. 222222

使用下面的命令:

 

  1. [liuxiaowen@dev ~]$ hadoop fs -getmerge hdfs://cdh5/tmp/lxw1234/*.txt local_largefile.txt
  2. [liuxiaowen@dev ~]$ cat local_largefile.txt
  3. 111111
  4. 111111
  5. 111111
  6. 111111
  7. 222222
  8. 222222
  9. 222222
  10. 222222

 

合并HDFS上的小文件

如果需要合并HDFS上的某个目录下有很多小文件,可以尝试使用下面的命令:

  1. [liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/lxw1234/*.txt | hadoop fs -appendToFile - hdfs://cdh5/tmp/hdfs_largefile.txt
  2. [liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/hdfs_largefile.txt
  3. 111111
  4. 111111
  5. 111111
  6. 111111
  7. 222222
  8. 222222
  9. 222222
  10. 222222

注意:这种处理方法在数据量非常大的情况下可能不太适合,最好使用MapReduce来合并。

 

本文转载:http://lxw1234.com/archives/2015/09/481.htm

分享到:
评论

相关推荐

    基于Hadoop的分布式文件系统,使用Java语言开发实现了一个本地文件管理系统+源代码+文档说明

    基于Hadoop的分布式文件系统,使用Java语言开发实现了一个本地文件管理系统,其中文件存在于HDFS集群中,通过Java开发的客户端软件进行管理,其功能包括:1、文件分块、加密并上传待HDFS文件系统 2、文件块下载、...

    云计算技术实验报告四HDFS文件的读写

    Linux,eclipse 要求编程实现GetMerger功能,实现从云端(HDFS)中下载一个包含多个文件的路径(文件夹),将所有文件合并后保存到本地(GetMerge)。

    基于NoSQL的海量航空物流小文件分布式多级存储方法

    充分考虑到数据的时效性、本地性、操作的并发性以及文件之间的相关性,先根据相关性将文件合并,然后采用分布式多级存储,使用内存式Redis数据库做缓存,HDFS做数据的持久化存储,其过程采用预取机制。实验结果表明...

    hadoop命令

    -getmerge <src> <localdst> //将源目录中的所有文件排序合并到一个文件中 -cat <src> //在终端显示文件内容 -text <src> //在终端显示文件内容 -copyToLocal [-ignoreCrc] <src> <localdst> //复制到本地 -...

    Hadoop从入门到上手企业开发

    021 Hadoop 五大服务与配置文件中的对应关系 022 分析Hadoop 三种启动停止方式的Shell 脚本 023 去除警告【Warning$HADOOP HOME is deprecated。】 024 Hadoop相关命令中的【–config configdir】作用 025 Hadoop ...

    Hive sql系统学习教程

    数据加载语句:可以将数据从本地文件系统或HDFS中导入到Hive表中。 数据查询语句:可以通过类似于SQL的语法查询Hive表中的数据,并支持聚合操作、过滤条件等操作。 数据转换语句:可以通过Hive SQL进行数据转换,...

    hdfs-gress:通用加载程序

    可以灵活满足项目可处理csv文件,自动忽略首行多线程传输传输后,把文件合并到大文件中可设置后台守护运行重要条件在使用本工具时请注意下面事项文件在移动到原目录时,最好先生成到同一文件系统的其他目录,然后再...

    大数据技术及应用教学课件第3章-大数据存储技术.pptx

    名称节点(NameNode) NameNode是HDFS系统中的管理者,负责管理文件系统的命名空间,记录了每个文件中各个块所在的数据节点的位置信息,维护文件系统的文件树及所有的文件和目录的元数据。这些信息以两种数据结构...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    2.3.1 将数据导入本地文件系统 技术点8 自动复制HDFS 中的文件 2.3.2 数据库 技术点9 使用Sqoop 将数据导入MySQL 2.3.3 Hbase 技术点10 将数据从HDFS 导入HBase 技术点11 使用HBase 作为MapReduce 的...

    大数据开发技术.pdf

    1.NameNode 它是 hadoop 中的主服务器,管理文件系统名称空间和 对 集 群 中 存 储 的 文 件 的 访 问 , 保 存 有 metadate 。 2.SecondaryNameNode 它不是 namenode 的冗余守护进程,而是 提供周期检查点和清理...

    Hadoop实战(第2版)

    2.2.4 HBase 技术点6 HBase 导入HDFS 技术点7 将HBase 作为MapReduce 的数据源2.3 将数据导出Hadoop 2.3.1 将数据导入本地文件系统技术点8 自动复制HDFS 中的文件2.3.2 数据库技术点9 使用Sqoop 将...

    基于大数据的数据分析系统架构.doc

    (二)Hadoop并行处理系统架构 在Hadoop体系的分布式大数据应用中,数据采集模块会将采集到的各种类型的 数据传送到Hadoop的并行处理系统架构中,然后信息数据被保存到HDFS中,传送的数据 会被Hadoop体系中的...

    Hadoop权威指南(中文版)2015上传.rar

    第3章 Hadoop分布式文件系统 HDFS的设计 HDFS的概念 数据块 namenode和datanode 命令行接口 基本文件系统操作 Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询...

    大数据开发笔试.docx

    map过程的输出是写入本地磁盘而不是HDFS,但是一开始数据并不是直接写入磁盘而是缓冲在内存中,缓存的好处就是减少磁盘I/O的开销,提高合并和排序的速度。默认的内存缓冲大小是100M(可以配置),所以在书写map函数...

    Hadoop权威指南 第二版(中文版)

    Hadoop分布式文件系统;Hadoop的I/O、MapReduce应用程序开发;MapReduce的工作机制;MapReduce的类型和格式;MapReduce的特性;如何构建Hadoop集群,如何管理Hadoop;Pig简介;Hbase简介;Hive简介;ZooKeeper简介;...

    coding_test:Dataeaze codin问题

    请在本地文件系统中下载这些文件。 消费者互联网文件startUpFile 将Spark中的这两个文件合并为一个实体,并回答以下问题。 注意:使用Spark SQL查询回答以下问题。 浦那市有几家初创公司? 浦那有多少家创业公司...

    Java版水果管理系统源码-hive-tools:蜂巢工具

    命令,可以把指定库表的数据和元数据导出到本地或者 HDFS 目录中,再通过 IMPORT 命令将元数据和数据文件导入新的 hive 仓库中,但是存在以下问题不符合我们的场景 我们不需要重现导入数据; 我们的每个 hive 中的表...

    大数据基础知识.docx

    当然了,目前对于开源的Kettle和Talend本身,也集成了大数据集成内容,可实现hdfs,hbase和主流Nosq数据库之间的数据同步和集成。 网络数据采集:一种借助网络爬虫或网站公开API,从网页获取非结构化或半结构化数据...

    大数据面试题-.docx

    HDfS 中的 block 默认保存几份? a)3 份 b)2 份 c)1 份 d)不确定 3. 下列哪个程序通常与 NameNode 在一个节点启动? a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker 4. Hadoop 作者 大数据面试题-全文共...

    Fourinone分布式并行计算四合一框架

     总的来说, 将集群看做一个操作系统,像操作本地文件一样操作远程文件。  但是fourinone并不提供一个分布式存储系统,比如文件数据的导入导出、拆分存储、负载均衡,备份容灾等存储功能,不过开发人员可以利用...

Global site tag (gtag.js) - Google Analytics