[TDW]Protobuf在腾讯数据仓库TDW的使用

Protobuf在腾讯数据仓库TDW的使用_ IT技术精华
http://it.taocms.org/11/5991.htm

马淑婧:TDW Protobuf存储格式功能介绍-CSDN.NET
http://www.csdn.net/article/a/2014-06-06/15818975

protobuf是google提供的一个开源序列化框架,类似于XML、JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。
protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。
protobuf****格式日志在tdw的支持
1、使用protobuf文件创建表
Tdw支持使用用户定义的proto文件来创建表,使用我们开发的编译器扩展对用的proto文件预处理后,通过proto文件自动抽取出表的结构,支持proto文件引用和message嵌套定义。例如:
message Person {required string name = 1;required int32 id = 2; // Unique ID number for this person.optional string email = 3;enum PhoneType {MOBILE = 0;HOME = 1;}message PhoneNumber {required string number = 1;optional PhoneType type = 2 [default = HOME];}repeated PhoneNumber phone = 4;}
创建的表结构为:
table person{name stringid intemail stringphone array<struct<number:string,type:int>>}
Protobuf中enum 类型转化为tdw的int类型,repeated类型转化为tdw的array,支持protobuf中message定义的嵌套,嵌套message类型转化为tdw的struct类型。
2、使用嵌套message protobuf文件的读写适配
提供HDFS与mapreduce层的适配支持protobuf record的input/output format,mapreduce层与hive层的读写适配Serde层支持嵌套类型的message读写和protobuf默认值的支持。


Protobuf表中的内容采用记录头+记录内容的方式存储,一条记录的头4个字节存储了该记录的数据长度,文件接口层以该长度为依据去读取相应的记录内容。各个记录内容之间用一个长度为4字节的长度字段分隔。
Protobuf

3、protobuf格式日志在tdw的使用
创建protobuf存储格式的表,创建表过程需要用户手工上传proto文件,生成jar包,最后执行建表语句。可通过以下几步完成protobuf表的创建:
上传Proto定义文件。将proto文件上传到$QE_HOME/protobuf/upload/${UserName}/中
准备Jar文件。用makejar脚本预处理proto文件,产生并上传对应表的读写接口jar包。示例:$QE_HOME/bin/makejar.sh pgurl user passwd dbname tablename username filename protoversion
创建protobuf格式的表。创建protobuf存储格式的TDW SQL语句是:CREATE TABLE <tableName> [partition_def] STORED AS PB。示例:

创建普通表(不包含分区)create table comp stored as pb
创建带分区的表,假设comp message中包含log_date的字段,以log_date字段建立分区的SQL为:create table comp partition by list(log_date) (partition default) stored as pb

注意事项
proto文件名一定要是小写,并且不能包含空格等特殊字符;
proto文件中用到import其他proto文件的,不要写路径,只指明文件名即可,例如import “text.proto”;
主proto文件的message名字一定要与表名相同,根据proto文件生成jar包的时候会进行检查,不相同会报错
自定义的类型名和变量名不能相同(支持区分大小写,即message A类型的变量名可以为a),否则生成jar包会失败
不能包含空的message,否则建表的时候会出错

protobuf格式的表入库tdw,直接用hadoop命令将pb文件上传到对应表或分区的目录下即可,支持gz压缩。
使用tdw SQL对protobuf表做日志分析,简单字段可以用通用SQL语法处理,以repeated类型为例描述如何用Lateral View + explode 的SQL处理pb表中的复杂字段。


举例:
假设广告展示表AdImpression的定义中每个广告展示的记录由一个页面的id和当前页面上展示的广告几个id的list组成,其proto定义为:
message AdImpression{ required string pageid = 1; repeated int adid_list =2; }
当前表中有如下数据:
data-1

对表做lateral view + explode 的SQL如下所示:
SELECT pageid, adid FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;
可以产生如下的输出:
data-2

4、Protobuf表在TDW中使用现状
当前TDW中有150张左右protobuf格式的表,主要存储广点通和推荐业务相关数据,解决了广点通日志模型中存储效率低,分析难度大等问题。
TDW中的pb表大部分为小时或天分区表,日均新增数据30T左右,与文本日志相比节省了大约50%的存储空间。在达到了简化业务逻辑的同时也达到了节约存储成本的效果。
5、protobuf和TDW数据类型对应关系表
当前protobuf中数据类型对应到TDW内置类型的关系如下:
protobuf-type

参考链接:http://www.csdn.net/article/a/2014-06-06/15818975

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容