/**
*每次读取Hbase数据库Page_Size条
* @param entity
*/
public static void getContentFromHbase(HbaseExportEntity entity) {
StringBuffer buffer = new StringBuffer();
ResultScanner scanner = null;
String startRow = entity.getStartRow();
String endRow = entity.getStopRow();
String tableName = entity.getTableName();
//Filter filter = getHbaseExportFilter(entity.getCellList()); //过滤器
String cellNameStr = getCellNameStr(entity.getCellList(),entity.getFieldSplit()); //列名
String fileName = HbaseExportUtil.getFileName(entity); //获取文件名
//文件存储路径(配置)+ tableName + 文件名(程序自动生成)+文件扩展名(配置)
String fileURL = entity.getSavePath()+ File.separator + entity.getTableName()
+ File.separator + fileName; //保存绝对文件路径
if(entity.getShowFieldTitle()) { //首行显示字段
buffer.append(cellNameStr);
}
if(entity.getShowRowkey()) {
buffer.append(entity.getFieldSplit());
buffer.append(ROW_KEY);
}
buffer.append(FILE_NEWLINE);
logger.info("读hbase数据库--"+ tableName+"--表数据写入--"+ fileName +"--处理开始");
int recordSize = 0;
int totalSize = 0;
String rowKey = null;
do {
scanner = HBaseScan.hbaseScan(tableName, ExportConstant.PAGE_SIZE, startRow, endRow, null);
recordSize = 0;
for (Result result : scanner) {
for (KeyValue kv : result.raw()) {
int rowlength = Bytes.toShort(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET);
rowKey = Bytes.toStringBinary(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET + Bytes.SIZEOF_SHORT, rowlength);
if(!StringUtils.isBlank(rowKey)) {
break;
}
}
recordSize++;
startRow = HBaseUtil.bytesToStr(result.getRow()) + "0";
String columnValueStr = getColumnValue(result,entity,rowKey);
buffer.append(columnValueStr);
buffer.append(FILE_NEWLINE);
}
totalSize += recordSize;
if(totalSize % ExportConstant.PAGE_SIZE==0) { //每次写入PAGE_SIZE条
HbaseExportUtil.WriteContentToFile(buffer.toString(), fileURL);
buffer = new StringBuffer();
}
} while (recordSize != 0);
//写入内容到文件中
HbaseExportUtil.WriteContentToFile(buffer.toString(), fileURL);
logger.info("读hbase数据库--"+ tableName+"--表数据写入--"+ fileName +"--处理结束...共写入记录总数:"+totalSize+"条");
}
获取rowkey方法
for (Result result : scanner) {
for (KeyValue kv : result.raw()) {
int rowlength = Bytes.toShort(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET);
rowKey = Bytes.toStringBinary(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET + Bytes.SIZEOF_SHORT, rowlength);
if(!StringUtils.isBlank(rowKey)) {
break;
}
}