hadoop io Sequence, Map, Set, Array, BloomMap Files(译文)

翻译 2011年01月18日 19:06:00

原文: http://www.cloudera.com/blog/2011/01/hadoop-io-sequence-map-set-array-bloommap-files/

         hadoop sequenceFile 文件为二进制的 K-V 对提供了可持久的数据结构。与其他的数据结构,像 B 树索引是有区别的, sequenceFile 不支持对特定的 key 进行修改,插入,删除操作,仅仅支持 append 操作。

         SequenceFile 有三种格式:非压缩,行压缩,块压缩。他们都会共用一个文件头信息。这个文件头信息包括: k,v 类名字,版本号,格式化信息(是否压缩,是否是块压缩,如果是压缩格式,还包括压缩算法名字)。

         非压缩与记录压缩比较相似,每次调用 append 方法就会将记录增加到 sequence 文件中,内容有整个记录的大小 (key 的长度 +value 的长度 ) key 的长度, key,value 的原始数据。二者的不同点就是 value 的原始数据,一个是压缩的,一个是非压缩。

         而对于块压缩格式,当数据的大小达到某个阀值,比如数据块大小 64M ,这些才会将数据写入文件,而且此时到目前为止的所有 key 放在一起进行,所有 value 放在一起,然后再加上每个 k,v 所占的长度列表。

块记录 : 记录长度 + 所有 key 数据,所有 value 的数据,所有 key 的长度列表,所有 value 的长度列表,同时每个块之间会有写下 sync 标记。

基于 sequencefile 之上,还有一些其他文件格式,如 MapFile,SetFile,ArrayFile,BloomMapFile

MapFile 是由二个 sequenceFile 组成的 : 数据文件和索引文件。数据文件是有按从小到大的顺序插入,如果再 append 时,违反了这种关系,将会抛出异常。索引文件包括 key, 以及该条记录在数据文件的起始位置,索引文件不会包括所有的 key ,只是一部分 key 值。一般索引会全部读入内存,如果索引很大,可以设置每次读入内存的索引条数。

SetFile ArrayFile 是基于 MapFile 的, SetFile append(key) 来替换 append(key,value) 的,因为 value 总是 null ArrayFile 则是用 append(value) ,而 key 则是 long 类型,代表是每几条记录,一直递增的。

BloomMapFile 是在 MapFile 之上增加了一个文件,名叫 /bloom ,该文件将记录着新增记录后的布隆值,当 close() 操作时,就将布隆值写入到这个 bloom 文件中。

hadoop 之上,也还有其他的一些文件格式,如 tfile,hbase hfile 等,具体的实现见 :org.apache.hadoop.io 包中的相关类。  

另外,记录由于 maven 库无法访问而使得无法 build 的解决方法:

在编译 hadoop 时由于 maven 需要访问国外 maven 库网站,但由于该网站被墙,会抛出 socket.net 的异常错误,遇到此类问题,方法有二个:一是找一个能访问的 maven 库网站,如 : http://mirrors.ibiblio.org/pub/mirrors/maven2 。将 mavens 用到的 build.xml ivysetting.xml 二个文件中的 http://repo2.maven.org/maven2 都用上面的网站替换,另外一种方法是,对 ant 设置代理访问,在 ivy-download 任务前加上的一个 proxy 任务,然后先打开代理,如自由门,然后进行 build 工作。

<target name= "proxy" >  

           <property name= "proxy.host" value= "127.0.0.1" />  

            <property name= "proxy.port" value= "8580" />  

            <input message= "Please enter proxy username" addproperty= "proxy.user" />  

            <input message= "Please enter proxy password - NOTE: CLEAR TEXT" addproperty= "proxy.pass" />  

            <setproxy proxyhost= "${proxy.host}" proxyport= "${proxy.port}" proxyuser= "${proxy.user}" proxypassword= "${proxy.pass}" />  

    </target>

  <target name= "ivy-download" depends= "proxy" description= "To download ivy" unless= "offline" >

    <get src= "${ivy_repo_url}" dest= "${ivy.jar}" usetimestamp= "true" />

 

 

 

相关文章推荐

Array、List、Set、与Map

最近经历了几次面试,发现Java基础还是很重要的,所以好好弥补之前遗留的漏洞还是很有必要的。基础不牢固,就会越来越浮,无法走的深入。         这篇文章,主要总结了映射、集合等容器的相关联系与区...

Scala中的集合:Iterator、BitSet、Set、Map、Stack、Vector、List、Array

 5.   util包 5.1.     架构 http://www.scala-lang.org/docu/files/collections-api/collections.ht...

Java框架--IOC javabean注入(List/Map/Set/Properties/Array/Date)

基础类Teacher/Student package com.ioc; import java.util.Date; import java.util.HashMap; import java.ut...

Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等

Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等,它们的特点如下: 1) Set集合是Hibernate中基础的集合类型,元素数据一般使用外键同主表关联,Set集...

hibernate 集合(set, list, array,bag, map)

Hibernate中将集合分为四类: (1)元素:可以映射类型为java.util.Set接口的属性,它的元素存放没有顺序且不允许重复,也可以映射类型为java.util.SortSet接口...

※ Leetcode - Array - 380. Insert Delete GetRandom O(1)(vector+map实现set)

1. Problem Description Design a data structure that supports all following operations in average O(1...

ES6---for...of遍历‘类似’数组的数据结构,array set map string与iterator

let obj={a:1,b:2}; for(let i of obj){console.log(i)}//报错 let arr=[1,2,3]; for(let i of arr){console....

Java之数组array和集合list、set、map

世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合 有人想有可以自动扩展的数组,所以有了List 有的人想有没有重复的数组,所以有了set 有人想有自动排序的组数,所以有了...

集合映射(set, list, array,bag, map)详解

集合映射(set, list, array,bag, map) 一.在持久化类中,有时会使用到值类型的对象属性,如果持久化类中有一个值类型的集合,那么就需要一张额外的数据库表来保存这个值得类型集合数...

Scala 数组(Array),列表(List),元组(Tuple),集(Set),映射(Map),迭代器(Iterator)

1. 数组(Array)数组是编程中经常用到的数据结构,一般包括定长数组和变长数组。本教程旨在快速掌握最基础和常用的知识,因此,只介绍定长数组。定长数组,就是长度不变的数组,在Scala中使用Arra...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)