elephant-bird的安装和使用

2023-12-10 18:38
文章标签 安装 使用 bird elephant

本文主要是介绍elephant-bird的安装和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://guoyunsky.iteye.com/blog/1780165 

elephant-bird使用还是比较简单,毕竟只是一个生成代码的工具.我一开始以为elephant-bird也跟Protcol Buffer或Thrift一样,有自己的脚本,传入参数和参数值,通过脚本去生成代码.后来才发现,根本无需如此.
       毕竟elephant-bird基于Protocol Buffer和Thrift,而Protocol Buffer跟Thrift(Thrift我还没去测试过)又支持调用外部命令,也就是shell脚本.而这个shell脚本可以是elephant-bird生成代码的地方.具体看使用吧.
       1.依赖环境: 

                 1)Ant 

                 2)Protocol Buffer
       2.下载   

               下载相对简单,我这里通过git:   

                git clone https://github.com/kevinweil/elephant-bird.git 

                这里下载的elephant-bird路径我在下面简称为$ELEPHANT_BIRD_HOME
       3.安装 

              安装也相对简单,通过ant即可.如: ant install-local ant compile 

              运行这两个ant之后,会发现在$ELEPHANT_BIRD_HOME/build目录下发现elephant-bird-xxx.jar以及lib/compile目录,等下需要用到.
       4.使用 

             1)所需要的proto文件

               我这里直接拷贝Protocol Buffer的样例:address_book.proto,代码如下:    

 

Proto代码   收藏代码
  1.  package com.twitter.data.proto.tutorial;  
  2. // The sample protocol buffer file that Google uses in their examples at   
  3. // http://code.google.com/p/protobuf.   
  4. // Used in this project for tests and examples.  
  5. option java_outer_classname = "AddressBookProtos";  
  6. message Person {  
  7.     required string name = 1;   
  8.     required int32 id = 2;   
  9.     optional string email = 3;  
  10.   
  11.    enum PhoneType {   
  12.              MOBILE = 0;   
  13.              HOME = 1;   
  14.              WORK = 2;  
  15.     }  
  16.   
  17.      message PhoneNumber {   
  18.              required string number = 1;   
  19.              optional PhoneType type = 2 [default = HOME];   
  20.      }  
  21.      repeated PhoneNumber phone = 4;   
  22. }  
  23.   
  24. message AddressBook {  
  25.      repeated Person person = 1;   
  26. }   

      也可以从$ELEPHANT_BIRD_HOME/examples/src/proto/下获取address_book.proto


    2)新建build.xml,代码如下:  

     

Xml代码   收藏代码
  1. <project name="elephant-bird-study" basedir"." default="generate-protobuf" >  
  2.       <property name="src.dir" location="src" />   
  3.       <property name="src.java.dir" location="${src.dir}/java" />   
  4.       <property name="src.proto.dir" location="${src.dir}/proto" />   
  5.       <property name="src.gen.java.dir" location="${src.dir}/gen-java" />  
  6.   
  7.      <target name="generate-protobuf" >   
  8.            <delete dir="${src.gen.java.dir}"/>   
  9.            <mkdir dir="${src.gen.java.dir}"/>   
  10.            <apply executable="protoc" failonerror="true" skipemptyfilesets="true" verbose="true">                                      
  11.            <arg value="--proto_path=${src.proto.dir}" />      
  12.             <arg value="--java_out=${src.gen.java.dir}" />     
  13.             <arg value="--test_out=${src.gen.java.dir}" />      
  14.             <fileset dir="${src.proto.dir}" includes="**/*.proto" />   
  15.          </apply>  
  16.     </target>  
  17. </project>  

  
        3)通过ant脚本生成address_book.proto对应的代码:

 

           ant generate-protobuf    

           如果不出意外,可以在你工程目录下的src/gen-java看到生成的代码:com.twitter.data.proto.tutorial.AddressBookProtos.java.

 

        4)以上只是通过Protocol Buffer生成了Java,但对应Hadoop的Writable,Pig的LoadFunc还没生成,这里还要使用protoc命令,由protoc去调用一个脚本去生成这些代码.具体如下: 

           i.需要的东西:    

             a)各种jar:

                     elephant-bird-2.1.8.jar,guava-10.0.1.jar,hadoop-core-0.20.2-cdh3u0.jar,hadoop-lzo-0.4.15.jar,protobuf-java-2.3.0.jar,yamlbeans-0.9.3.jar,这些自己下载获取从$ELEPHANT_BIRD_HOME/build/lib/compile或$ELEPHANT_BIRD_HOME/lib下获取 

            b)需要运行elephant-bird脚本,我这里放在$YOUR_PROJECT_HOME/script目录下 

        ii.步骤: 

             a)将以上需要的jar放到你的工程目录下的lib目录中    

             b)更改build.xml,如下:      

Xml代码   收藏代码
  1. <project name="elephant-bird-study" basedir"." default="generate-protobuf" >  
  2.          <property name="src.dir" location="src" />  
  3.          <property name="src.java.dir" location="${src.dir}/java" />   
  4.          <property name="src.proto.dir" location="${src.dir}/proto" />   
  5.          <property name="src.gen.java.dir" location="${src.dir}/gen-java" />  
  6.   
  7.          <target name="generate-protobuf" >   
  8.                <delete dir="${src.gen.java.dir}"/>   
  9.                <mkdir dir="${src.gen.java.dir}"/>   
  10.                <apply executable="protoc" failonerror="true" skipemptyfilesets="true" verbose="true">                                          <env key="PATH" path="${env.PATH}:${basedir}/script" />    
  11.                    <arg value="--proto_path=${src.proto.dir}" />    
  12.                    <arg value="--java_out=${src.gen.java.dir}" />   
  13.                    <arg value="--twadoop_out=${src.gen.java.dir}" />   
  14.                    <fileset dir="${src.proto.dir}" includes="**/*.proto" />   
  15.               </apply>   
  16.        </target>  
  17. </project>  

 

           增加了<env key="PATH" path="${env.PATH}:${basedir}/script" />,表示将刚才新建的$YOUR_PROJECT_HOME/script下的文件放入path中     

         增加了参数<arg value="--twadoop_out=${src.gen.java.dir}" />,这里elephant-bird有个奇怪的规则,参数名为--twadoop_out,其中twadoop存在规则,他将跟protoc-gen-组成protoc-gen-twadoop做为Protocol Buffer调用elephant-bird的脚本文件名.   

           c)在$YOUR_PROJECT_HOME/script目录下新建脚本protoc-gen-twadoop,内容如下:    

Shell代码   收藏代码
  1. #!/bin/bash  
  2. bindir=`/usr/bin/dirname "$0"`   
  3. /usr/bin/java -cp $bindir/../lib/*: com.twitter.elephantbird.proto.HadoopProtoCodeGenerator $bindir/config-twadoop.yml -  

         以上会将刚拷贝到$YOUR_PROJECT_HOME/lib下的所有jar由java执行,然后会调用com.twitter.elephantbird.proto.HadoopProtoCodeGenerator类去生成所需要的各种代码.想要什么代码,则由config-twadoop.yml配置 

 

       d)注意protoc-gen-twadoop中有config-twadoop.yml,该文件配置elephant-bird想生成代码.文件内容如下:    

Txt代码   收藏代码
  1. address_book:    
  2. - com.twitter.elephantbird.proto.codegen.DeprecatedLzoProtobufBlockInputFormatGenerator    
  3. - com.twitter.elephantbird.proto.codegen.LzoProtobufB64LineInputFormatGenerator    
  4. - com.twitter.elephantbird.proto.codegen.LzoProtobufB64LineOutputFormatGenerator  
  5. #  - com.twitter.elephantbird.proto.codegen.LzoProtobufB64LinePigLoaderGenerator    
  6. - com.twitter.elephantbird.proto.codegen.LzoProtobufBlockInputFormatGenerator    
  7. - com.twitter.elephantbird.proto.codegen.LzoProtobufBlockOutputFormatGenerator  
  8. #  - com.twitter.elephantbird.proto.codegen.LzoProtobufBlockPigLoaderGenerator  
  9. # - com.twitter.elephantbird.proto.codegen.LzoProtobufHiveSerdeGenerator      
  10. - com.twitter.elephantbird.proto.codegen.ProtobufWritableGenerator  
  11. # - com.twitter.elephantbird.proto.codegen.ProtobufBytesToPigTupleGenerator   

     我这里不想生成pig和hive的代码,所以在前面加了个#注释了.


    e)生成代码,再次运行ant generate-protobuf,不出意外的话,YOUR_PROJECT_HOME/src/gen-java就会生成所需要的代码.

 

     注:本博客基于Elephantbird2.1.8

    在github上建了一个开源工程,可以运行ant命令基于elephantbird直接生成代码.地址:

       https://github.com/guoyunsky/elephant-bird-simple


这篇关于elephant-bird的安装和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/477972

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma