读书人

kiji 高速理解

发布时间: 2012-11-23 00:03:43 作者: rapoo

kiji 快速理解

作者:刘旭晖 Raymond 转载请注明出处

Email:colorant at 163.com

BLOG:http://blog.csdn.net/colorant/


快速阅读理解了一下kiji的文档和实现,个人初步的理解如下


Info Collection


http://www.kiji.org

User guide: http://docs.kiji.org/userguide/schema/1.0.0-rc1/kiji-schema-overview/

Kiji schema DDL : http://docs.kiji.org/userguide/schema/1.0.0-rc1/schema-shell-ddl-ref/

什么是 kiji :

个人总体感觉就是构建在hadoop/hbase上的一层Wrapper,使用Avro存储系列化的对象在HBase表中,基本上目的是让应用程序的编写者能更容易的用Hbase管理结构化的数据,而不是作为一个扁平的表使用。抛开Hadoop和HBase,其最核心的部分就是所谓的Kiji-Schema,基本上就是用Avro处理Schema,以及读写系列化数据。

kiji基本概念和与HBase的映射关系


kiji对HBase没有做什么改动,也没有使用Coprocessor之类对HBase的功能进行拓展增强,所以基本上就是架构在HBase的公共API上,借用HBase既有的能力实现所需的功能,这一点和Hive On Hbase 有些类似。与Hive不同的是,kiji表的Metadata信息也是以HBase表的形式存在的。所以kiji的概念基本上都可以最终落实映射到HBase上

Entity:个人理解因为kiji的出发点是企图强化对象概念,所以HBase表中Row的概念被弱化,每个对象都用一个Entity来表示,对象的所有信息都存储在一个Entity内部。实际上,Entityid对应于HBase的实现就是Row key。不过在存储的时候,Entity ID可以以Hash或裸数据或混合的形式存储。

Cell:kiji中的数据单位划分是Cell,是由 locality:family:key加上Timestamp来定位的,和HBase的Cell是同一个层次,但是为什么在定位中比HBase多了一层呢,实际上locality对应的是HBase的Family的概念,就是用来做同类数据的物理分组用途(改个名字难道是怕别人不理解HBase划分Family的用意?)。而kiji中的family只是一个逻辑数据划分的概念,并不对应HBase中的具体某个概念,可以理解为仅仅是把HBase的qualifier在命名的逻辑上分为两部分而已。

Layout:此外Kiji中还有Table Layout的概念,基本就是用来描述表的结构,Layout并没有存储在HTable的TableDescriptor中,而是在自己管理的meta表中存储,在HBase上表现为一个普通的HBaseTable(e.g. kiji.default.meta)

Schema:Kiji CellSchema对应的就是Avro的Schema,用来将扁平的HBase表格数据对象化。因为kiji的核心之一就是Schema,所以在Cell Schema方面还是做了一些功夫的,Cell的内容可以是裸的AvroRecord,Schema完全由MetaTable决定,也可以把Cell Schema和Avro Record合并存储。而存储的Schema为了节省空间,可以是Schema的Hash,也可以是Schema的ID。对应的Full Schema的映射关系存储在单独的表中(e.g. kiji.default.schema_hash kiji.default.schema_id)

Mapping of Kiji conception to Hbase summary:

Items

Kiji

HBase

Entity related

Entity

All KeyValues belong to the same row

EntityID

Row key

Column related

locality:family:key

Family:qualifier

locality

Family

Family:key

Qualifier

Schema related

Table Layout

KijiMetaTable on Hbase. e.g. kiji.default.meta

Cell Schema

Avro Schema saved together with Avro serialized data in KV

Cell Schema mapping

Schema Table on Hbase e.g. kiji.default.schema_hash, keji.default.schema_id

Table读写操作相关

kiji的基本操作包括KijiTable的创建修改,以及Entity数据的读写。其操作的流程步骤和HBase的比较相似,也有许多对应的概念对象如Configuration/Admin/Table等,个人理解是因为kiji对数据模型并没有本质的变革,只是封装了一层wrapper操作,所以不可能也不需要在操作流程上有太大的差异。

Entity读写

数据的读写以Entity为导向,实际上可以理解为就是以Row为导向。同样需要添加所操作的Family/column等。个人理解概念上的差异就是在对Entity的操作上时,Entity的所有完整内容都在一个对象内部,更接近面向对象的编程概念,也就是帮应用程序的作者做了一些封装的工作,简化开发者的工作量

Filter操作

Kiji提供了Row/column/value相关的几个Filter,这个可以说是Feature,也可以说是为了方便应用开发者的无奈之举,因为row/column都可能以Hash的形式存在,而cellvalue则是Avro编码过的,此外还可能附加有Schema,所以HBase相关的Filter无法简单的应用在Kiji table中工作。因此这些kiji Filter基本都是对HBase相关Filter的封装,对应的都会有一个toHBaseFilter方法,用来在服务器端创建对应的HBaseFilter。

其它

Layout evolving

Kiji的重点既然是在Schema和Layout,在Layout的动态调整中也花了不少功夫,比如Layout,就分为Concrete layout descriptors和Layout update descriptors。前者是作为基础,后者作为修改量用来修正基础Layout。这样做的目的号称是为了减少Layout更新过程的Racecondition。没有深入研究其Evolving的细节,有需要时再研究。

对官方Feature的理解

Kiji官方描述了Kiji的一些Feature和精妙之处,结合文档和API阅读,个人理解如下:

读书人网 >云计算

热点推荐