zoukankan      html  css  js  c++  java
  • thrift在hive中的应用

    thrift在hive中的应用 » ORATEA

    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的话,那么产生的各种文件会有些差距。

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/lexus/p/2697328.html
Copyright © 2011-2022 走看看