本博客属原创文章转载请注明出处: 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
更多技术文章、感悟、分享、勾搭,请用微信扫描:
相关推荐
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
AudioStream 1.5.unitypackage
在现代工业自动化和电动汽车领域,永磁同步电机(PMSM)因其高效率、高性能和紧凑设计而备受青睐。本文将详细介绍如何在Simulink中实现PMSM的控制,包括矢量控制(FOC)策略的实现,以及必要的代码示例,旨在为工程师和研究者提供实用的指导。 一、PMSM控制概述 永磁同步电机(PMSM)以其高功率密度、高效率和优异的动态响应而广泛应用于工业和汽车领域。在Simulink中实现PMSM控制,通常采用矢量控制(Field-Oriented Control, FOC)策略,该策略通过磁场定向控制实现电机转矩和速度的精确控制。 二、PMSM数学模型与Simulink实现 PMSM的数学模型包括电压方程、磁链方程和转矩方程。在Simulink中,我们可以通过构建相应的模块来实现这些方程。 1. PMSM数学模型 电压方程: u d = R s i d − ω e L q i q + L d d i d d t + ω e ψ f u d =Rsid−ω e L q iq+
Jupyter-Notebook
合成控制法与收敛性分析资料最新集.zip
Gartner发布将漏洞管理发展为暴露管理指南:模拟实时攻击场景的对抗性暴露验证将替代传统渗透测试.pdf
装库 pip install python-office
Jupyter-Notebook
《中国房地产统计年鉴》面板数据资源-精心整理.zip
【基于Python的大麦网自动抢票工具的设计与实现】 随着互联网技术的发展,网络购票已经成为人们生活中不可或缺的一部分。尤其是在文化娱乐领域,如音乐会、演唱会、戏剧等活动中,热门演出的门票往往在开售后瞬间就被抢购一空。为了解决这个问题,本论文探讨了一种基于Python的自动抢票工具的设计与实现,旨在提高购票的成功率,减轻用户手动抢票的压力。 Python作为一种高级编程语言,因其简洁明了的语法和丰富的第三方库,成为了开发自动化工具的理想选择。Python的特性使得开发过程高效且易于维护。本论文深入介绍了Python语言的基础知识,包括数据类型、控制结构、函数以及模块化编程思想,这些都是构建抢票工具的基础。 自动化工具在现代社会中广泛应用,尤其在网络爬虫、自动化测试等领域。在抢票工具的设计中,主要利用了自动化工具的模拟用户行为、数据解析和定时任务等功能。本论文详细阐述了如何使用Python中的Selenium库来模拟浏览器操作,通过识别网页元素、触发事件,实现对大麦网购票流程的自动化控制。同时,还讨论了BeautifulSoup和requests库在抓取和解析网页数据中的应用。 大麦网作为国内知名的票务平台,其网站结构和购票流程对于抢票工具的实现至关重要。论文中介绍了大麦网的基本情况,包括其业务模式、用户界面特点以及购票流程,为工具的设计提供了实际背景。 在系统需求分析部分,功能需求主要集中在自动登录、监控余票、自动下单和异常处理等方面。抢票工具需要能够自动填充用户信息,实时监控目标演出的票务状态,并在有票时立即下单。此外,为了应对可能出现的网络延迟或服务器错误,工具还需要具备一定的错误恢复能力。性能需求则关注工具的响应速度和稳定性,要求在大量用户同时使用时仍能保持高效运行。 在系统设计阶段,论文详细描述了整体架构,包括前端用户界面、后端逻辑处理以及与大麦网交互的部分。在实现过程中,采用了多线程技术以提高并发性,确保在抢票关键环节的快速响应。此外,还引入了异常处理机制,以应对网络故障或程序错误。 测试与优化是确保抢票工具质量的关键步骤。论文中提到了不同场景下的测试策略,如压力测试、功能测试和性能测试,以验证工具的有效性和稳定性。同时,通过对抢票算法的不断优化,提高工具的成功率。 论文讨论了该工具可能带来的社会影响,包括对消费者体验的改善、对黄牛现象的抑制以及可能引发的公平性问题。此外,还提出了未来的研究方向,如增加多平台支持、优化抢票策略以及考虑云服务的集成,以进一步提升抢票工具的实用性。 本论文全面介绍了基于Python的大麦网自动抢票工具的设计与实现,从理论到实践,从需求分析到系统优化,为读者提供了一个完整的开发案例,对于学习Python编程、自动化工具设计以及理解网络购票市场的运作具有重要的参考价值。
学生考勤管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
ODrive FOC BLDC伺服控制方案,KEIL版本
数字经济资源大合集(7类)-最新.zip
1950-2021年中国统计年鉴(分省年度)面板数据-全新发布.zip
lstm Summary Framework: z = U>x, x u Uz Criteria for choosing U: • PCA: maximize projected variance • CCA: maximize projected correlation • FDA: maximize projected intraclass variance
我国《县域统计年鉴-人口教育医疗》面板数据-已更至最新.zip
分省数字经济发展指标数据集-最新.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
Jupyter-Notebook
空间计量Stata一键运行工具-最新发布.zip