文档章节

kiji快速理解

j
 jmppok
发布于 2015/03/25 10:15
字数 1802
阅读 10
收藏 0

转载自:http://blog.csdn.net/colorant/article/details/8197913

==是什么 ==

 

目标Scope(解决什么问题)

 

官方定义

 

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

 

个人理解

 

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

 

==如何实现 ==

 

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

 

kijiHBase没有做什么改动,也没有使用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或裸数据或混合的形式存储。

 

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/


本文转载自:http://blog.csdn.net/jmppok/article/details/17262753

j

jmppok

粉丝 10
博文 138
码字总数 0
作品 2
海淀
高级程序员
私信 提问
编程语言的对决!

你们老是吵哪个语言更强有意思吗,有本事来干一场! PHP队 Java队 C队 Perl队 Go队 JavaScript队 Python队 Ruby队 开战了…… 最终,还是Go最强啊 原文地址:http://portal.nifty.com/kiji/...

烈冰
2015/02/06
659
5
推荐系统必读的10篇精选技术文章

https://blog.csdn.net/shijing_0214/article/details/50996434 推荐系统近几年来一直十分火热,目前几乎所有的电子商务系统、社交网络,广告推荐,搜索引擎等等,都不同程度的使用了各种形式...

Terminator2050
2018/08/17
0
0
视频下载和转换工具--DamnVid

網上有不少像YouTube的視頻分享網站,我們不一定有時間馬上看完,但留待以後再看也不行,不是忘記了網址,就是影片被刪除了。這時我們需要的是視頻下載和轉換工具,這次介紹的DamnVid便是其中...

匿名
2011/02/03
993
0
从0开始搭建自己的数据运营指标体系——业务理解

同样的问题,有的人分析的偏僻入里,有的人只能轻轻点水。造成问题分析深浅的主要原因在于人们对问题业务的理解程度。那么数据运营者如何快速理解业务呢?本篇主要从三方面介绍业务理解。 1)...

数据007
2017/06/13
0
0
什么是Docker

对Docker的理解,有以下几点: .Docker是基于GO语言实现的开源容器项目 .它的构想是要实现"Build, Ship and Run Any App,Anywhere",即通过对应用的封装(packaging) 分发(distribution) 部署(de...

二郎神六号
2017/07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot初探---spring-boot-starter-web究竟干了啥

上一篇已经简单介绍了启动类的部分,这一篇主要讨论一下springboot引入的哪些依赖 我们都知道想用springboot做一个web应用,首先要做的是引入相关依赖,两步操作: 1、添加spring-boot-start...

计算机狼
52分钟前
6
0
基于Rocket.chat搭建内网聊天系统(使用docker,本机不需要安装meteor)

您可能不希望使用标准的Docker命令,而是希望对部署进行更多的自动化管理。这就是使用Docker-compose可能会派上用场的地方。 确保您已安装Docker和Docker-compose并且可以正常运行。 docker...

吴伟祥
54分钟前
8
0
conda 更新源

更新conda 源为阿里源 conda config --add channels http://mirrors.aliyun.com/pypi/simple conda config --set show_channel_urls yes 阿里云: http://mirrors.aliyun.com/pypi/simple/ 豆......

Mr_Tea伯奕
54分钟前
5
0
java 泛型使用

每次写泛型方法都翻下百度,还是自己记录下把。 1、定义一个泛型方法,使用传入参数类型来传递泛型。这种用法在封装json序列化工具类应该会用到。 List<xxx> aa = getList(xxx.class);pr...

朝如青丝暮成雪
58分钟前
7
0
深入了解Java模板引擎Freemarker

前言 常用的Java模板引擎包括:JSP、Freemarker、Thymeleaf、Velocity,从Github上查阅到这几款主流的模板引擎的性能的对比,总体上看,JSP、Freemarker、Thymeleaf、Velocity在性能上差别不...

code-ortaerc
59分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部