因为公司业务需要,我们使用了Fluentd收集日志,但是现在hbase的thrift接口中关于批量插入hbase的记录中不能设置每条记录的timestamp,满足不了业务的需要,所以和同事东杰合作,将thrift接口修改了,记录以备忘。同时,如果需要扩展thrift,也是一个很好的开始。
首先,找到org.apache.haddop.hbase.thrift.generated.Mutation.java添加变量timestamp 类型为Long,里面有一个类型的设置,需要设置成I64;
private static final org.apache.thrift.protocol.TField TIMESTAMP_FIELD_DESC = new org.apache.thrift.protocol.TField(
"timestamp", org.apache.thrift.protocol.TType.I64, (short) 4);
//还有其他很多的timestamp代码新增。
然后,找到org.apache.haddop.hbase.thrift.ThriftServer.java,在put.add()方法中增加变量timestamp,取值为m.timestamp。
put.add(famAndQf[0], HConstants.EMPTY_BYTE_ARRAY,m.timestamp,
m.value != null ? m.value.array()
: HConstants.EMPTY_BYTE_ARRAY);
下一步,备份hbase.jar包,将上述两个文件的编译文件替换。
重启hbase。
启动thrift服务:
$ hbase thrift start
从网上下载thrift的jar包:thrift-0.9.0.tar.gz ,解压,并编译。
在hbase的下载目录中找到Hbase.thrift文件,拷贝到一个目录下,修改该文件,添加timestamp及i64类型保存。
struct Mutation {
1:bool isDelete = 0,
2:Text column,
3:Text value,
4:i64 timestamp
}
执行命令:
$ thrift --gen py/rb/php Hbase.thrift
会生成一个gen-py/rb/php的目录。
接下来,你就可以使用mutation的
mutations.append(Hbase.Mutation(column="f1:%s"%ii, value=self.columnvalue, timestamp=20130101005959))
替换
mutations.append(Hbase.Mutation(column="f1:%s"%ii, value=self.columnvalue))
。