✨博客主页: https://blog.csdn.net/m0_63815035?type=blog
💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨
一、简介
- 定义:一种轻便高效的结构化数据存储格式,用于结构化数据串行化(序列化),适用于数据存储或RPC数据交换。
- 特性:语言无关、平台无关、可扩展。
- 优势:相比XML,更小(310倍)、更快(20100倍)、更简单。
- 灵活性:可定义数据结构,用生成的源代码在多种语言中读写;更新数据结构不破坏旧程序。
二、安装步骤
- 上传并解压安装包
[root@node01 ~]# tar -zxvf protobuf-2.6.1.tar.gz [root@node01 ~]# rm protobuf-2.6.1.tar.gz -rf [root@node01 ~]# mkdir -p /opt/yjx/protobuf-2.6.1
- 配置、编译、安装
[root@node01 ~]# yum -y install gcc-c++ [root@node01 ~]# cd protobuf-2.6.1 [root@node01 protobuf-2.6.1]# ./configure --prefix=/opt/yjx/protobuf-2.6.1 [root@node01 protobuf-2.6.1]# make && make install
三、使用流程
3.1 编码(编写.proto文件)
创建/root/PhoneRecordProtos.proto
,定义数据结构:
package com.yjxxt.hbase.protobuf.util;
option java_outer_classname = "PhoneRecordProtos";
// 每条消息
message PhoneRecord {
required string otherphone = 1;
optional int32 time = 2;
optional int64 date = 3;
optional string type = 4;
}
// 每日消息
message PhoneRecordDay {
repeated PhoneRecord phoneRecord = 1;
}
// 每月消息
message PhoneRecordMonth {
repeated PhoneRecordDay phoneRecordDay = 1;
}
3.2 执行(编译生成Java文件)
cd /opt/yjx/protobuf-2.6.1/bin
./protoc --java_out=/root --proto_path=/root/ /root/PhoneRecordProtos.proto
将生成的Java文件拷贝至项目。
3.3 使用(结合HBase Java API)
- 初始化与资源释放:通过
HBaseConfiguration
创建连接,获取表对象,操作后关闭资源。 - 创建表:用
TableDescriptorBuilder
和ColumnFamilyDescriptorBuilder
构建表和列族并创建。 - 压缩数据插入:构建
PhoneRecord
和PhoneRecordDay
对象,序列化后通过Put
插入HBase。 - 查询数据解析:通过
Get
获取数据,用PhoneRecordDay.parseFrom
解析二进制数据。
四、优缺点
4.1 优点
- 更小、更快、更简单。
- 支持自定义数据结构,通过代码生成器读写。
- 可更新数据结构且不影响旧程序,向后兼容。
- 语义清晰,无需复杂解析器。
- 简单易学,文档和示例丰富。
4.2 缺点
- 功能简单,无法表示复杂概念。
- 通用性差,不如XML普及。
- 不适用于基于文本的标记文档建模。
- 二进制存储,需.proto定义才能解读,无自解释性。
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文