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

    满地都是六便士,她却抬头看见了月亮。
  • 相关阅读:
    停止Java线程,小心interrupt()方法
    SLG手游Java服务器的设计与开发——架构分析
    大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
    【转】阿里云主机购买使用教程
    使用 Apache MINA 开发高性能网络应用程序
    浅谈Java的Mina框架传递对象
    解析Mina代码三部曲
    java 子类继承父类 -- 重写、覆盖
    经度之战
    [USACO1.3]虫洞wormhole
  • 原文地址:https://www.cnblogs.com/wttttt/p/6844038.html
Copyright © 2011-2022 走看看