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

  • 相关阅读:
    tp5.1 order by limit 分页时会出现数据重复,丢数据
    使用composer 出现Could not find a matching version of package xxx
    tp5.1 使用 tcpdf库 生成pdf
    Java调用FTP
    Quartz的org.quartz.jobStore.misfireThreshold属性理解
    第3章:WinDbg 内核调试
    第38章: PE32+
    第37章: x64处理器
    第36章:64位计算
    django框架
  • 原文地址:https://www.cnblogs.com/lexus/p/2697328.html
Copyright © 2020-2023  润新知