zoukankan      html  css  js  c++  java
  • <Hadoop><SequenceFile><Hadoop小文件>

    Origin

    • 我们首先理解一下SequenceFile试图解决什么问题,然后看SeqFile怎么解决这些问题。

    In HDFS

    • 序列文件是解决Hadoop小文件问题的一个方法
    • 小文件是显著小于HDFS块(128M)的文件;
    • 在HDFS中,每个文件、目录、块都被表示成一个对象,占用150bytes;
    • 10million文件,会占用NameNode 3gb内存;

    In MapReduce

    • map task通常一次处理一个input block(使用default FileInputFormat);
    • 文件数量越多,就需要越多的map task,并且job时间会变慢

    Small file scenarios

    • 这些小文件是一个大的logical file的pieces;   ---->     可以通过写一个程序来连接这些小文件
    • 这些小文件是inherently small,比如,images     ----->    需要某种容器按某种方式来group这些文件。

    Solutions in Hadoop

    HAR

    • HAR(Hadoop Archives)是用来减轻大量文件给NameNode内存带来的压力的;
    • HAR are probably best used purely for archival purposes.
    • HAR可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件,并且可以做为mapreduce任务的输入。
    • About HAR:
      • Hadoop Archives是特殊的档案格式。
      • 一个HAR对应一个文件系统目录。
      • HAR包含原数据(_index和_masterinx)和数据文件(part-*)文件

    SequenceFile

    • SeqFile的概念就是将每个小文件放到一个更大的single file中;
    • 比如,有10,000,100KB文件,那么可以写一个程序将他们放到一个单一的SeqFile中,其中你可以使用filename作为key,内容作为value。
    • 这样做的好处:
      • NameNode中占用更少的内存
      • SeqFile是可分割的(splittable),因此很适合与MapReduce;
      • SeqFile支持压缩

    Summary

    • SequenceFile是Hadoop API提供的一种二进制文件,它的数据以<key, value>形式序列化到文件中
    • 这种二进制文件内部使用Hadoop的标准Writable接口实现序列化和反序列化。

    FYI

    满地都是六便士,她却抬头看见了月亮。
  • 相关阅读:
    C#对ListView控件的几个操作技巧
    C#用代码创建控件,以及它的鼠标事件
    C#使用ListView控件对数据进行频繁更新时,出现闪烁问题的解决办法
    C#判断某个键值是否存在于字典中
    FreeMASTER 2.0的安装与使用
    C和C++中获取二维数组的行列数
    Python中类的定义和使用
    Python创建字典和添加键值
    C#用鼠标滚轮控制控件大小,实现滚轮缩放效果
    C#中对Excel文件执行写数据操作
  • 原文地址:https://www.cnblogs.com/wttttt/p/6844038.html
Copyright © 2011-2022 走看看