thrift在hive中的应用

hadoop
添加评论
272011

thrift是一种可伸缩的跨语言服务的发展软件框架。

它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Java,Python和PHP和Ruby结合。

thrift是facebook开发的,我们现在把它作为开源软件使用。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。

以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。

对于thrift的详细介绍见:http://thrift.apache.org/

thrift在hive中有好几处应用,目的都是为了实现跨语言的服务。

最近详细的看了在metadata模块中的thrift应用。

metadata中thrift定义文件为\hive-0.6.0\src\metastore\if\hive_metastore.thrift,

该文件详细定义了hive元数据的各个结构,以及相应的方法。

还是拿database来举例,对于database的结构定义如:

struct Database {

1: string name,

2: string description,

3: string locationUri,

}

对database的方法定义在service ThriftHiveMetastore extends fb303.FacebookService中,主要有以下几个:

void create_database(1:Database database) throws(1:AlreadyExistsException o1, 2:InvalidObjectException o2, 3:MetaException o3)

Database get_database(1:string name) throws(1:NoSuchObjectException o1, 2:MetaException o2)

void drop_database(1:string name, 2:bool deleteData) throws(1:NoSuchObjectException o1, 2:InvalidOperationException o2, 3:MetaException o3)

list<string> get_databases(1:string pattern) throws(1:MetaException o1)

list<string> get_all_databases() throws(1:MetaException o1)

定义好了metadata的thrift文件后,就可以通过thrift产生相应的脚本文件,

在build.xml中对于该编译命令为:

<target name=”thriftif”>

<echo>Executing thrift (which needs to be in your path) to build java metastore APIs…. </echo>

<exec executable=”thrift” failonerror=”true” dir=”.”>

<arg line=”–gen java:beans –gen cpp –gen php –gen py -I ${basedir}/../service/include/ -o ${src.dir} if/hive_metastore.thrift ” />

</exec>

</target>

当然我们也可以手工进行:

thrift –gen java:beans –gen cpp –gen php –gen py -I ${basedir}/../service/include/ -o ${src.dir} if/hive_metastore.thrift

执行后就会产生

drwxr-xr-x 2 hjl hjl 4096 May 27 08:25 gen-cpp

drwxrwxr-x 3 hjl hjl 4096 May 27 08:27 gen-javabean

drwxr-xr-x 3 hjl hjl 4096 May 27 08:25 gen-php

drwxr-xr-x 3 hjl hjl 4096 May 27 08:25 gen-py

下面几个脚本,对应着c++,java,php和python。

hive-0.6.0中使用的thrift版本为r790732,如果使用相同的thrift版本会产生和官方hive版本相同的文件,

而采用不同版本的thrfit的话,那么产生的各种文件会有些差距。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。