本博客属原创文章转载请注明出处: http://guoyunsky.iteye.com/blog/1780165
本人新浪微博:http://weibo.com/guoyunwb
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,代码如下:
package com.twitter.data.proto.tutorial; // The sample protocol buffer file that Google uses in their examples at // http://code.google.com/p/protobuf. // Used in this project for tests and examples. option java_outer_classname = "AddressBookProtos"; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; }
也可以从$ELEPHANT_BIRD_HOME/examples/src/proto/下获取address_book.proto
2)新建build.xml,代码如下:
<project name="elephant-bird-study" basedir= "." default="generate-protobuf" > <property name="src.dir" location="src" /> <property name="src.java.dir" location="${src.dir}/java" /> <property name="src.proto.dir" location="${src.dir}/proto" /> <property name="src.gen.java.dir" location="${src.dir}/gen-java" /> <target name="generate-protobuf" > <delete dir="${src.gen.java.dir}"/> <mkdir dir="${src.gen.java.dir}"/> <apply executable="protoc" failonerror="true" skipemptyfilesets="true" verbose="true"> <arg value="--proto_path=${src.proto.dir}" /> <arg value="--java_out=${src.gen.java.dir}" /> <arg value="--test_out=${src.gen.java.dir}" /> <fileset dir="${src.proto.dir}" includes="**/*.proto" /> </apply> </target> </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,如下:
<project name="elephant-bird-study" basedir= "." default="generate-protobuf" > <property name="src.dir" location="src" /> <property name="src.java.dir" location="${src.dir}/java" /> <property name="src.proto.dir" location="${src.dir}/proto" /> <property name="src.gen.java.dir" location="${src.dir}/gen-java" /> <target name="generate-protobuf" > <delete dir="${src.gen.java.dir}"/> <mkdir dir="${src.gen.java.dir}"/> <apply executable="protoc" failonerror="true" skipemptyfilesets="true" verbose="true"> <env key="PATH" path="${env.PATH}:${basedir}/script" /> <arg value="--proto_path=${src.proto.dir}" /> <arg value="--java_out=${src.gen.java.dir}" /> <arg value="--twadoop_out=${src.gen.java.dir}" /> <fileset dir="${src.proto.dir}" includes="**/*.proto" /> </apply> </target> </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,内容如下:
#!/bin/bash bindir=`/usr/bin/dirname "$0"` /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想生成代码.文件内容如下:
address_book: - com.twitter.elephantbird.proto.codegen.DeprecatedLzoProtobufBlockInputFormatGenerator - com.twitter.elephantbird.proto.codegen.LzoProtobufB64LineInputFormatGenerator - com.twitter.elephantbird.proto.codegen.LzoProtobufB64LineOutputFormatGenerator # - com.twitter.elephantbird.proto.codegen.LzoProtobufB64LinePigLoaderGenerator - com.twitter.elephantbird.proto.codegen.LzoProtobufBlockInputFormatGenerator - com.twitter.elephantbird.proto.codegen.LzoProtobufBlockOutputFormatGenerator # - com.twitter.elephantbird.proto.codegen.LzoProtobufBlockPigLoaderGenerator # - com.twitter.elephantbird.proto.codegen.LzoProtobufHiveSerdeGenerator - com.twitter.elephantbird.proto.codegen.ProtobufWritableGenerator # - 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
更多技术文章、感悟、分享、勾搭,请用微信扫描:
相关推荐
VS集成C#开发ABB机器人二次开发:实时变量刷新与程序修改上位机系统,vs对ABB机器人二次开发C#集成PC SDK开发ABB机器人上位机开发 变量实时刷新,实时修改 io刷新修改, 在线程序修改实时刷新 上位机移动机械手 ,vs;ABB机器人二次开发;C#集成PC SDK;实时刷新;实时修改;io刷新修改;在线程序修改;上位机移动机械手,C#集成PC SDK开发ABB机器人上位机系统:实时刷新与修改功能
分布式系统与SCADA系统
,电机控制资料-- 注:本驱动器适合于直流有感无刷电机 功能特点 支持电压9V~36V,额定输出电流5A 支持电位器、开关、0~3.3V模拟信号范围、0 3.3 5 24V逻辑电平、PWM 频率 脉冲信号、RS485多种输入信号 支持占空比调速(调压)、速度闭环控制(稳速)、电流控制(稳流)多种调速方式 支持按键控制正反转速度,启停 特色功能 1. 霍尔自学习 电机的三相线和三霍尔信号线可不按顺序连接,驱动器可自动对电机霍尔顺序进行学习。 2. 稳速控制响应时间短 稳速控制时电机由正转2000RPM切为反转2000RPM,用时约1.0s,电机切过程平稳 3. 极低速稳速控制 电机进行极低速稳速控制,电机稳速控制均匀,无忽快忽慢现象。
欧姆龙CX-Programmer CP系列PLC功能块详解:伺服、步进、气缸及普通电机控制应用解析,欧姆龙cx-programmer CP系列PLC做的功能块,包括伺服,步进,气缸普通电机的控制。 ,欧姆龙CX-Programmer; CP系列PLC; 伺服控制; 步进控制; 电机控制; 气缸控制,欧姆龙CX-Programmer PLC:CP系列功能块与多种电机控制
基于comsol电弧与熔池热物理交互现象的研究,comsol电弧熔池耦合 ,comsol; 电弧熔池; 耦合,COMSOL电弧与熔池的耦合技术
,自动泊车APA开发,超声波算法开发
nodejs010-nodejs-config-chain-1.1.8-2.el6.centos.alt.noarch.rpm
FLAC3D蠕变命令流详解:博格斯本构模型的时间步长自动调整实践与应用,附图一至图三竖向位移云图变化及图四拱顶沉降趋势分析。,flac3d蠕变命令流,蠕变本构模型采用博格斯本构,时间步长自动调整,5.0和6.0命令均有,配有文字和视频解释。 图一至图三为不同蠕变时间下的竖向位移云图,图四为拱顶沉降随时间的变化趋势。 ,flac3d;蠕变命令流;博格斯本构;时间步长自动调整;5.0和6.0命令;文字解释;视频解释;竖向位移云图;拱顶沉降随时间变化趋势。,FLAC3D蠕变命令流:博格斯本构自动调整时间步长解释
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
超导电机性能及波形特征分析,某超导电机性能及其波形 ,超导电机性能; 波形; 性能指标; 波形分析,超导电机性能与波形分析
逆磁致伸缩效应:应变与磁导率互变之效应解析,逆磁致伸缩效应,应变造成磁导率改变 ,逆磁致伸缩效应; 磁导率变化; 应变影响; 磁性材料响应,逆磁致伸缩效应:磁导率随应变变化
基于VS2015+Qt5.9+Halcon20的多个相机缺陷检测源码,可稳定运行并支持多种相机缺陷检测功能,多个相机缺陷检测源码 vs2015+qt5.9+halcon20 可正常运行 ,多个相机;缺陷检测;源码;VS2015;Qt5.9;Halcon20;可正常运行,"Halcon源码检测系统,基于VS2015与Qt5.9,相机缺陷检测"
内容概要:本文旨在作为GitHub平台针对初学者的实用教程,涵盖从GitHub账号注册、仓库创建、代码管理、提交以及团队协作等全过程。文章详述了GitHub的基础使用方法,包括如何创建和配置代码仓库、使用Git命令进行代码的上传和变更处理、参与到开源项目的步骤,以及创建团队和管理权限的方式。还介绍了几个重要的Git命令及其作用,有助于用户理解版本控制系统的核心思想。通过这些指导,能够使开发者更快地适应这一流行工具,从而提升编码效率,提高协作效能。此外,也推荐使用者多多练习并投身实际操作,以此来累积更多的使用技巧。 适用人群:面向所有初次接触或正在初步探索GitHub使用方法的新用户,无论是独立工作者还是软件工程专业的学生均能从中受益。 使用场景及目标:主要目的是为了让新手能迅速熟悉并掌握GitHub的各项基本技能,以便更好地应用于日常的代码开发过程中。无论你是想要将自己的作品分享出来获取反馈,或是加入某个开源社区贡献自己的一份力量,本文都能提供完整的路径指引。 其他说明:虽然本指南涵盖了GitHub最常用的特性介绍,但对于高级设置及更复杂的用例则有所省略,若想深入了解相关进阶知识点,请参阅官方文档或者进一步研究其他权威资料。
deepseek部署教程.md
"Comsol电力变压器内部热源计算与热流耦合分析模型:温度场与流体场数值计算方法研究",comsol电力变压器温度场和流体场数值计算模型,通过变压器电磁场计算得到热源大小,最后通过热流耦合计算得到变压器内部温度场和流体场分布, ,核心关键词:Comsol模型; 电力变压器; 温度场; 流体场; 数值计算; 电磁场计算; 热流耦合计算; 内部温度场分布; 流体场分布。,"电力变压器温度场与流体场数值计算模型研究"
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:publican-redhat-2.7-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/publican-redhat-2.7-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
S7-200 Smart V3.0 固件升级包_测试版2025.02
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
基于深度强化学习的微电网能量管理策略优化——双深度期望Q网络算法的应用与实践,python代码-基于深度期望Q网络算法的微电网能量管理策略-002 关键词:光伏发电、微电网能量管理、深度强化学习、双深度期望 Q 网络 内容:随着光伏发电在微电网中的渗透率不断提高,其发电出力的不确定性和时变性为微电网的经济运行带来了挑战。 在构建经济调度模型时,就需要适当模拟不确定变量并相应地发展高效求解算法。 在此背景下,文中提出能够有效计及不确定性因素的深度强化学习算法,以实时求解微电网的优化运行问题。 为此,提出双深度期望Q网络算法,通过考虑状态转移的随机性,优化一般深度Q网络算法的Q迭代规则,显著提高算法的收敛速度。 ,关键词:光伏发电; 微电网能量管理; 深度强化学习; 双深度期望Q网络; 优化运行; 随机性; 收敛速度,基于双深度期望Q网络的微电网能量管理策略研究