小文件是指文件size小于HDFS上block大小的文件。这样的文件会给Hadoop的扩展性和性能带来严重问题。首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1000 0000个小文件,每个文件占用一个block,则namenode大约需要2G空间。如果存储1亿个文件,则namenode需要20G空间。这样namenode内存容量严重制约了集群的扩展。其次,访问大量小文件速度远远小于访问几个大文件。HDFS最初是为流式访问大文件开发的,如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。最后,处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。
二、Hadoop自带的解决方案
对于小文件问题,Hadoop本身也提供了几个解决方案,分别为:Hadoop Archive,Sequence file和CombineFileInputFormat。
(1) Hadoop Archive
Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。
使用HAR时需要两点,第一,对小文件进行存档后,原文件并不会自动被删除,需要用户自己删除;第二,创建HAR文件的过程实际上是在运行一个mapreduce作业,因而需要有一个hadoop集群运行此命令。
该方案需人工进行维护,适用管理人员的操作,而且har文件一旦创建,Archives便不可改变,不能应用于多用户的互联网操作。
(2) Sequence file
sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。
Hadoop-0.21.0中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操作。如果hadoop版本低于0.21.0的版本,实现方法可参见[3]。
该方案对于小文件的存取都比较自由,不限制用户和文件的多少,但是SequenceFile文件不能追加写入,适用于一次性写入大量小文件的操作。
(3)CombineFileInputFormat
CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。
该方案版本比较老,网上资料甚少,从资料来看应该没有第二种方案好。
三、小文件问题解决方案
在原有HDFS基础上添加一个小文件处理模块,具体操作流程如下:
1. 当用户上传文件时,判断该文件是否属于小文件,如果是,则交给小文件处理模块处理,否则,交给通用文件处 理模块处理。
2. 在小文件模块中开启一定时任务,其主要功能是当模块中文件总size大于HDFS上block大小的文件时,则通 过SequenceFile组件以文件名做key,相应的文件内容为value将这些小文件一次性写入hdfs模块。
3. 同时删除已处理的文件,并将结果写入数据库。
4. 当用户进行读取操作时,可根据数据库中的结果标志来读取文件。
相关推荐
Hadoop是Apache基金会下的开源项目,旨在提供大规模数据存储和处理解决方案。Hadoop的主要特点是分布式计算、可扩展性和高可用性,它可以处理大量数据,支持PB级别的数据存储和处理。 Hadoop能做什么 Hadoop能够对...
- 使用特定的技术手段如SequenceFile或CombineFile等,将多个小文件打包成一个较大的文件进行存储。 #### 四、Hadoop学习路径 - **知识点概述**:针对初学者,推荐从实践中学习Hadoop技术,包括搭建Hadoop环境、...
4. Hive:基于Hadoop的数据仓库工具,提供SQL-like查询接口,简化了大数据分析。 5. Pig:高级数据流语言,简化Hadoop上的数据分析。 6. HBase:分布式、列式存储的NoSQL数据库,适用于实时查询。 三、Hadoop高级...
Hadoop、HBase和Hive的集成使用是现代企业大数据解决方案中的常见实践,因此学习Hadoop对于进入大数据行业至关重要。 课程内容包括以下几个主要部分: 1. **初识Hadoop**:讨论为何学习Hadoop,Hadoop与云计算和...
Hadoop I/O是Hadoop处理数据的核心,包括数据压缩、序列化框架、自定义Writable实现以及基于文件的数据结构如SequenceFile和MapFile。数据压缩可以减少存储空间和网络传输的数据量,提高Hadoop处理数据的效率。序列...
**Hadoop Hive** 是一个基于 **Hadoop** 的数据仓库工具,它提供了类 SQL 的查询语言(称为 HiveQL)来处理存储在 Hadoop 文件系统(HDFS)中的大量数据集。Hive 的目标是简化数据提取、转换和加载(ETL)过程,并为...
- **数据存储与分析**:介绍了Hadoop如何提供解决方案来应对大规模数据的存储与分析需求。 - **与其他系统的比较**: - **RDBMS**:讨论了关系数据库管理系统与Hadoop之间的区别。 - **网格计算**:解释了网格...
- **Accumulo**:一个分布式键值存储系统,基于Hadoop,提供安全的多用户访问和细粒度的访问控制。 - **Dremel**、**Drill**、**Tez**、**Impala**、**Tajo**:这些都是大数据查询和分析引擎,用于快速处理复杂...
- **Hadoop发展历史**:从Google的MapReduce和GFS论文出发,Hadoop逐渐发展为开源社区的核心项目,为大数据处理提供解决方案。 - **Apache Hadoop项目**:包括Hadoop Distributed File System(HDFS)和MapReduce...
HBase是一个基于Hadoop的分布式数据库,其数据文件HFile中的KeyValue格式包含Key、Value、Timestamp和Key Type这四个关键信息。 在FusionInsight HG集群规划设计时,网络配置至关重要。例如,管理平面的管理节点应...
Hive提供了基于Hadoop的数据仓库解决方案,适合大数据的存储和分析;而Kettle则是一个强大的ETL工具,用于数据的提取、转换和加载。两者结合使用,能够构建完整的数据处理和分析平台,满足企业级的大数据应用场景。
Hadoop技术是大数据处理领域的重要框架,而Hive则是Hadoop生态系统中的一个核心组件,它为大规模数据集提供了数据仓库解决方案。这篇名为“Hadoop技术Hive简介共9页”的资料,很显然会涵盖Hive的基本概念、架构、...
Hive是一款基于Hadoop的数据仓库工具,可以用来进行数据提取、转换和加载(ETL)。 1. **Hive基本使用** - Hive简介:理解Hive的基本概念和作用。 - Hive基本数据类型:掌握Hive支持的各种数据类型。 - Hive DDL...
Hive是基于Hadoop的数据仓库工具,主要设计用来处理大规模的结构化数据。它由Facebook开发,最初是为了应对快速增长的商务智能数据处理需求,因为传统的数据仓库解决方案在面对海量数据时成本过高。Hadoop作为流行的...
10. **Hive 与其它大数据组件的整合**:Hive 可以与 Pig、MapReduce、Spark、Impala 等大数据处理框架协同工作,提供更全面的数据处理解决方案。 在"hive-0.7.1-cdh3u6"这个压缩包中,可能包含了 Cloudera Hive ...
Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户使用SQL-like语言(称为HQL,Hive Query Language)来查询、管理和处理大数据集。在大数据领域,Hive扮演着重要的角色,因为它为非结构化和半结构化数据提供...