kiji快速理解

轉載自:http://blog.csdn.net/colorant/article/details/8197913shell

==是什麼 ==編程

 

目標Scope(解決什麼問題)服務器

 

官方定義架構

 

Kiji的核心模塊是KijiSchema,按照官方的說法:KijiSchema provides a simple Java API for storing andmanaging typed data in HBase using Avro serializationapp

 

我的理解ide

 

整體感受就是構建在hadoop/hbase上的一層Wrapper,使用Avro存儲系列化的對象在HBase表中,基本上目的是讓應用程序的編寫者能更容易的用Hbase管理結構化的數據,而不是做爲一個扁平的表使用。拋開HadoopHBase,其最核心的部分就是所謂的Kiji-Schema,基本上就是用Avro處理Schema,以及讀寫系列化數據。工具

 

==如何實現 ==oop

 

kiji基本概念和與HBase的映射關係性能

 

kijiHBase沒有作什麼改動,也沒有使用Coprocessor之類對HBase的功能進行拓展加強,因此基本上就是架構在HBase的公共API上,借用HBase既有的能力實現所需的功能,這一點和Hive On Hbase 有些相似。與Hive不一樣的是,kiji表的Metadata信息也是以HBase表的形式存在的。因此kiji的概念基本上均可以最終落實映射到HBaseui

 

Entity:我的理解由於kiji的出發點是企圖強化對象概念,因此HBase表中Row的概念被弱化,每一個對象都用一個Entity來表示,對象的全部信息都存儲在一個Entity內部。實際上,Entityid對應於HBase的實現就是Row key。不過在存儲的時候,Entity ID能夠以Hash或裸數據或混合的形式存儲。

 

Cellkiji中的數據單位劃分是Cell,是由 locality:family:key加上Timestamp來定位的,和HBaseCell是同一個層次,可是爲何在定位中比HBase多了一層呢,實際上locality對應的是HBaseFamily的概念,就是用來作同類數據的物理分組用途(改個名字難道是怕別人不理解HBase劃分Family的用意?)。而kiji中的family只是一個邏輯數據劃分的概念,並不對應HBase中的具體某個概念,能夠理解爲僅僅是把HBasequalifier在命名的邏輯上分爲兩部分而已。

 

Layout:此外Kiji中還有Table Layout的概念,基本就是用來描述表的結構,Layout並無存儲在HTableTableDescriptor中,而是在本身管理的meta表中存儲,在HBase上表現爲一個普通的HBaseTablee.g. kiji.default.meta)

 

SchemaKiji CellSchema對應的就是AvroSchema,用來將扁平的HBase表格數據對象化。由於kiji的核心之一就是Schema,因此在Cell Schema方面仍是作了一些功夫的,Cell的內容能夠是裸的AvroRecordSchema徹底由MetaTable決定,也能夠把Cell SchemaAvro Record合併存儲。而存儲的Schema爲了節省空間,能夠是SchemaHash,也能夠是SchemaID。對應的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的重點既然是在SchemaLayout,在Layout的動態調整中也花了很多功夫,好比Layout,就分爲Concrete layout descriptorsLayout update descriptors。前者是做爲基礎,後者做爲修改量用來修正基礎Layout。這樣作的目的號稱是爲了減小Layout更新過程的Racecondition。沒有深刻研究其Evolving的細節,有須要時再研究。

 

對官方Feature的理解

 

Kiji官方描述了Kiji的一些Feature和精妙之處,結合文檔和API閱讀,我的理解以下:

 

  • Set-up HBase layouts using user-friendly tools including a DDL

 

kiji提供了schemashell工具幫助建立Kiji Table,支持DDLJSON格式的輸入

 

  • Implement HBase best practices in table management :

 

所謂最佳實踐,我的理解以下:

  • Build in Row IDHash支持,這個一般是用來均衡負載HotSpot
  • Column name is shortened. KijiFamily Column的名字是在Layout中保存的,而存儲在Hbase Table中的都是映射事後的短名字,如 B:B:B,這能夠減少數據量,HBase中也能夠這麼作,不過用戶要麼接受無心義的短名字,要麼就須要本身構建映射關係。
  • 強化Family的物理分區概念

 

其它還真沒看出有哪些最佳實踐

 

  • Use evolving Avro schema management to serialize complex data

動態SchemaAvro序列化對象,這個是Kiji的出發點了

 

  • Perform both short-request and batch processing on data in Hbase

這個沒有什麼特殊的,我的理解就是支持Hbase clientGet Scan等操做,同時也提供了KijiTableInputFormatKijiTableOutputFormat這樣的類來支持MapReduce操做,此外號稱對HBase自己的HTableInputFormatHTableOutputFormat類做了Bug Fix

 

  • Import data from HDFS into structured HBase tables

結構化對象化,老生重談

 

Why Kiji at all

 

整體感受KijiDesign Goal如其所言,provides a simple Java API for storing and managing typed data inHBase using Avro serialization基本上就是對HBase應用模式的一個封裝,用Avro來承載對象化的數據,方便Schema的演化。從數據的角度增強面向對象編程的概念(相對Hbase Table)。面對的是但願能使用HBase存儲數據,快速上手開發應用的用戶。在性能或結構上沒有本質的革新。能夠作爲一種HBase應用模式的參考,是否適用,應該還要看最終程序的需求。

 

==相關文獻 ==

 

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/

相關文章
相關標籤/搜索