首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

ProtocolBuffer 组合 LZO在 Hadoop中的使用(三)

2012-11-12 
ProtocolBuffer 结合 LZO在 Hadoop中的使用(三)ProtocolBuffer 结合 LZO在 Hadoop中的使用(三) 1.自动生成

ProtocolBuffer 结合 LZO在 Hadoop中的使用(三)
ProtocolBuffer 结合 LZO在 Hadoop中的使用(三) 1.自动生成Protocol buffer对象

1、把protoc.exe文件复制到 c:\windows 目录中(呵呵,这样最省事),window7放在windows/system32下

下载地址


2、使用 protocol buffer 编译器编译 logFormat.proto 文件。打开命令行窗口,并定位到logFormat.proto文件目录中,运行命令 protoc --java_out=.logFormat.proto(注意.后面有空格,否则会有错误),执行这个命令后会在当前目录下生成一个java类com.searchlog.LogFormat.java。

下载 protobuf-java-2.4.1.jar

SearchLog.Builder builder = SearchLog.newBuilder()builder.setLastVisitTime(value.get(0));SearchLog msg = builder.build();



对于任意类型的成员var, 都可以通过 have_var() 来判断成员变量是否已经赋值;通过clear_var() 来清除变量内容;对于对象,可以通过 IsInitialized()函数判断required类型成员是否全部初始化;使用clear()清理对象的所有成员。对于repeated成员b,b_size()函数可以用来获取b成员的个数。

 

对于string成员S,使用mutable_S()函数将使得你得到直接指向该成员的指针(direct pointer),而无论该成员是否已经初始化。

 

message 成员的类型可以是基础类型boolint32floatdoublestring也可以是复杂的自定义类型,自定义类型可以嵌套。更详细的类型支持列表:http://code.google.com/apis/protocolbuffers/docs/proto.html



3.将生成的ProtoBufferPractice.java文件引入eclipse

4.把下载的protobuf-java-2.4.1.jar也引入工程

option java_package = “com.example.foo”;
我认为比较重要的文件级选项有
java_package ——指定生成的java代码的packge。
java_outer_classname ——protoc会为每个.proto文件一个java类,其中每个message都做作为该java类的内部类,这个选项就用于指定外围类的类名。
optimize_for ——用于优化protoc产生的代码,有三种模式:
SPEED –产生的代码将具有最好的序列化/反序列化执行速度。
CODE_SIZE –产生的代码将具有更少的代码行数。
LITE_RUNTIME –protocol buffer有一个简化版的runtime库,比如要生成用于手机平台的代码,可以使用这个选项。
另外,packed是一个字段级选项,在上面字段修改符repeated中提到了。



分析:
   个人认为pb之所以快和省流量除了本省字节少以外,序列化过程减少的字节数是主要因素
具体可参考http://kangsg219.iteye.com/blog/904762

其他参考:http://www.searchtb.com/2010/11/protocol-buffers%E7%9A%84%E5%BA%94%E7%94%A8%E4%B8%8E%E5%88%86%E6%9E%90.html

在实践中具体选择什么还需要依情况而定:
http://www.oschina.net/question/12_10307


热点排行