美文网首页
本地打包Har文件实现

本地打包Har文件实现

作者: 2016晓 | 来源:发表于2016-12-01 15:53 被阅读0次

    HDFS需要为每个文件分片的副本维护元数据,当文件的体积过小,文件数目过多的情况下,会因元数据过多,给master节点带来大量内存开销。然而将小文件存储到hdfs的需求又常常有,hdfs本身也提供了一种解决方案,har打包。下文将会介绍这一方式的原理,并实现一个不使用mapreduce的本地打包程序。

    1.HAR打包文件介绍

    Har文件是一种HDFS可支持的打包方式,将小文件合并,并可以像普通hdfs文件一样作为MapReduce输入。

    Har文件结构:是一个以”.har”结尾命名的目录,其中有至少三个文件”_index”、”_masterindex”、”part-0”、……。其中”part-X”文件中直接拼接了原始文件内容,无压缩处理,每个map操作的节点生成一个”part-X”文件。”_index”文件中存储包内目录、文件的元数据信息,并按路径java字符串hashCode()运算的哈希值排序。”_masterindex”记录”_index”文件中每1000条信息的起止哈希值、在”_index”文件中起止位置。

    Har文件的访问:在使用Hadoop命令行工具时,只有使用带有har的schema文件路径,就可以像普通hdfs文件一样的使用。例如:./hadoopfs -cat

    har:///pack1.har/Noname1.txt。

    2.本地文件系统中打包Har文件实现

    1、遍历指定目录下的所有目录、文件,并将所有目录、文件路径java字符串hashCode()运算的哈希值作为key,元数据作为value,存储到一个TreeMap中。同时将文件内容连接写入同个文件”part-0”。

    2、将排序的元数据信息,写入”_index”文件,每1000条信息的起止哈希值、在”_index”文件中起止位置,记录到”_masterindex”文件。

    以上代码,已经没有源码了,请反编译查看:http://pan.baidu.com/s/1geTiwKj

    相关文章

      网友评论

          本文标题:本地打包Har文件实现

          本文链接:https://www.haomeiwen.com/subject/wubxmttx.html