基于Hadoop的云盘系统客户端技术难点之三 小文件存储优化

简介: 作者:张子良 版权所有,转载请注明出处。 一、概述 首先明确概念,这里的小文件是指小于HDFS系统Block大小的文件(默认64M),如果使用HDFS存储大量的小文件,将会是一场灾难,这取决于HDFS的实现机制和框架结构,每一个存储在HDFS中的文件、目录和块映射为一个对象存储在NameNode服务器内存中,通常占用150个字节。

作者:张子良

版权所有,转载请注明出处。

一、概述

首先明确概念,这里的小文件是指小于HDFS系统Block大小的文件(默认64M),如果使用HDFS存储大量的小文件,将会是一场灾难,这取决于HDFS的实现机制和框架结构,每一个存储在HDFS中的文件、目录和块映射为一个对象存储在NameNode服务器内存中,通常占用150个字节。如果有1千万个文件,就需要消耗大约3G的内存空间。如果是10亿个文件呢,简直不可想象。这里需要特别说明的是,每一个小于Block大小的文件,存储是实际占用的存储空间仍然是实际的文件大小,而不是整个block大小

  为解决小文件的存储Hadoop自身提供了两种机制来解决相关的问题,包括HAR和SequeueFile,这两种方式在某些方面解决了本层面的问题,单仍然存在着各自的不足。下文讲详细说明。

二、Hadoop HAR

  Hadoop Archives (HAR files) ,这个特性从Hadoop 0.18.0版本就已经引入了,他可以将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-reduce进行操作,打包后的文件由索引和存储两大部分组成,索引部分记录了原有的目录结构和文件状态。其原理如下图所示:

 

 

  缺点:

  1. HAR 方式虽然能够实现NameNode内存空间的优化,但是他是一个人工干预的过程,同时他既不能够支持自动删除原小文件,也不支持追加操作,当有新文件进来以后,需要重新打包。
  2. HAR files一旦创建就不能修改,要做增加和修改文件必须重新打包。事实上,这对那些写后便不能改的文件来说不是问题,因为它们可以定期成批归档,比如每日或每周。
  3. HAR files目前还不支持文档压缩。

三、SequeuesFile

  Sequence file由一系列的二进制key/value组成,如果key为小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。Hadoop-0.21.0版本开始中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操作。该方案对于小文件的存取都比较自由,不限制用户和文件的多少,支持Append追加写入,支持三级文档压缩(不压缩、文件级、块级别)。其存储结构如下图所示:

示例代码如下所示:

  private static void writeTest(FileSystem fs, int count, int seed, Path file,
                                CompressionType compressionType, CompressionCodec codec)
    throws IOException {
    fs.delete(file, true);
    LOG.info("creating " + count + " records with " + compressionType +
             " compression");

  //指明压缩方式
    SequenceFile.Writer writer =
      SequenceFile.createWriter(fs, conf, file,
                                RandomDatum.class, RandomDatum.class, compressionType, codec);
    RandomDatum.Generator generator = new RandomDatum.Generator(seed);
    for (int i = 0; i < count; i++) {
      generator.next();

  //keyh
      RandomDatum key = generator.getKey();

  //value
      RandomDatum value = generator.getValue();
  //追加写入
      writer.append(key, value);
    }
    writer.close();
  }

  缺点:

  目前为止只发现其Java版本API支持,未在其他开发接口中发现相关版本的实现,尤其是LibHDFS和thrift接口中,可能真是C++阵营狂热支持者的一个悲剧。

四、Hbase

  如果你需要处理大量的小文件,并且依赖于特定的访问模式,可以采用其他的方式,比如Hbase。Hbase以MapFiles存储文件,并支持Map/Reduce格式流数据分析。对于大量小文件的处理,也不失为一种好的选择。

 

 

 


作者:张子良
出处:http://www.cnblogs.com/hadoopdev
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
存储 分布式计算 Hadoop
基于Hadoop的云盘系统客户端技术难点之一 上传和下载效率优化
作者:张子良  声明:版权所有,转载请注明出处 一、概述   基于任何平台实现的云盘系统,面临的首要的技术问题就是客户端上传和下载效率优化问题。基于Hadoop实现的云盘系统,受到Hadoop文件读写机制的影响,采用Hadoop提供的API进行HDFS文件系统访问,文件读取时默认是顺序、逐block读取;写入时是顺序写入。
1007 0
|
分布式计算 安全 Hadoop
基于Hadoop的云盘系统客户端技术难点之二 HDFS文件访问控制
作者:张子良 版权所有,转载请注明出处 一、概述     Hadoop开源技术框架在实际业务应用中,其早期的安全机制饱受诟病,具体到HDFS应用方面的问题,主要包括以下几个方面:   1.用户到服务器的认证问题   (1)Namenode上没有用户认证:用户只要知道NameNode服务地址和端口信息,就可以访问HDFS,并获取文件namespace信息。
983 0
|
21天前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
100 6
|
21天前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
49 2
|
17天前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
32 1
|
23天前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
64 5
|
23天前
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
30 4
|
23天前
|
大数据 网络安全 数据安全/隐私保护
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
79 5
|
23天前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
110 5
|
23天前
|
XML 大数据 网络安全
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(一)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(一)
38 4