Hbase-protobuf、优化、MR整合
一、Hbase_protobufuffer
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。
protobuffer优化存储步骤:
1 创建文件
vi phone.proto
2 在文件中写相关数据
—java项目包名、本类名、列的v顺序
—整合相同字段/去重
package com.bjsxt.hbase;
message PhoneDetail
{
required string dnum = 1;
required string length = 2;
required string type = 3;
required string date = 4;
}
message dayPhoneDetail
{
repeated PhoneDetail dayPhoneDetail = 1;
}
3 以 .java 文件导出 .proto 文件
/usr/local/bin/protoc --java_out=/root/data/ phone.proto
4 将 .java文件导出后放入项目中
com导出phone.java放入eclipse项目下
5 将导入的文件中的类与eclipse类连接(具体代码项目是hbase01)
—将文件的phone.java类PhoneDetail与原eclipse相关类(建表,加数据等等方法的类)进行连接(builder)
6 重写方法
加载新数据的方法,例如添加方法insert3() 集合形式
数据解析的方法,get2() 集合形式
/**
* proto插入方法 集合
* 10个用户,每天产生1000条记录,每一天的所有数据放到一个集合中进行存储
* @throws Exception
*/
@Test
public void insert3() throws Exception{
List<Put> puts = new ArrayList<Put>();
for(int i = 0;i<10;i++){
String phoneNumber = getPhone("133");
String rowkey = phoneNumber+"_"+(Long.MAX_VALUE-sdf.parse(getDate2("20180529")).getTime());
Phone.dayPhoneDetail.Builder dayOfPhone = Phone.dayPhoneDetail.newBuilder();
for(int j=0;j<100;j++){
String dnum = getPhone("177");
String length = r.nextInt(99) + "";
String type =r.nextInt(2) + "";
String date = getDate("2018");
Phone.PhoneDetail.Builder ph