http://blog.csdn.net/fengzheku/article/details/48447791
packagecom.infobird.test1;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.hbase.Cell;
importorg.apache.hadoop.hbase.HBaseConfiguration;
importorg.apache.hadoop.hbase.HColumnDescriptor;
importorg.apache.hadoop.hbase.HTableDescriptor;
importorg.apache.hadoop.hbase.MasterNotRunningException;
importorg.apache.hadoop.hbase.TableName;
importorg.apache.hadoop.hbase.ZooKeeperConnectionException;
importorg.apache.hadoop.hbase.client.Admin;
importorg.apache.hadoop.hbase.client.Connection;
importorg.apache.hadoop.hbase.client.ConnectionFactory;
importorg.apache.hadoop.hbase.client.Delete;
importorg.apache.hadoop.hbase.client.Put;
importorg.apache.hadoop.hbase.client.Result;
importorg.apache.hadoop.hbase.client.ResultScanner;
importorg.apache.hadoop.hbase.client.Scan;
importorg.apache.hadoop.hbase.client.Table;
importorg.apache.hadoop.hbase.filter.Filter;
importorg.apache.hadoop.hbase.filter.FilterList;
importorg.apache.hadoop.hbase.filter.FilterList.Operator;
importorg.apache.hadoop.hbase.filter.PageFilter;
importorg.apache.hadoop.hbase.filter.SingleColumnValueFilter;
importorg.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
importorg.apache.hadoop.hbase.util.Bytes;
publicclassHbaseDemo1?{
privatestaticConfiguration?configuration;
privatestaticConnection?connection;
static{
configuration?=?HBaseConfiguration.create();
configuration.set("hbase.zookeeper.property.clientPort","2181");
configuration.set("hbase.zookeeper.quorum","hostIp");
configuration.set("hbase.master","hostIp:8020");
try{
connection?=?ConnectionFactory.createConnection(configuration);
}catch(IOException?e)?{
e.printStackTrace();
}
}
/**
*?創(chuàng)建表
*
*?@param?tableName
*?@param?familyColumnName
*/
publicstaticvoidcreateTable(String?name,?List?familyColumnName)?{
try{
TableName?tableName?=?TableName.valueOf(name);
Admin?hAdmin?=?connection.getAdmin();
HTableDescriptor?descripter?=newHTableDescriptor(tableName);
for(String?familyName?:?familyColumnName)?{
descripter.addFamily(newHColumnDescriptor(familyName));
}
if(hAdmin.tableExists(tableName))?{
hAdmin.disableTable(tableName);
hAdmin.deleteTable(tableName);
System.out.println(tableName?+"is?exists...");
}
hAdmin.createTable(descripter);
hAdmin.close();
}catch(MasterNotRunningException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}catch(ZooKeeperConnectionException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}catch(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
/**
*?往表里面添加數(shù)據(jù)
*
*?@param?tableName
*?@param?rowkey
*?@param?columnValues
*?@return
*/
publicstaticintaddDataForTable(String?name,?String?rowkey,
Map>?columnValues)?{
try{
Put?put?=newPut(Bytes.toBytes(rowkey));
TableName?tableName?=?TableName.valueOf(name);
Table?htable?=?connection.getTable(tableName);
HColumnDescriptor[]?columnFamilies?=?htable.getTableDescriptor()
.getColumnFamilies();//?獲取所有的列名
for(HColumnDescriptor?hColumnDescriptor?:?columnFamilies)?{
String?familyName?=?hColumnDescriptor.getNameAsString();
Map?columnNameValueMap?=?columnValues
.get(familyName);
if(columnNameValueMap?!=null)?{
for(String?columnName?:?columnNameValueMap.keySet())?{
put.addColumn(Bytes.toBytes(familyName),?Bytes
.toBytes(columnName),?Bytes
.toBytes(columnNameValueMap.get(columnName)));
}
}
}
htable.put(put);
htable.close();
returnput.size();
}catch(IOException?e)?{
e.printStackTrace();
}
return0;
}
/**
*?批量添加數(shù)據(jù)
*
*?@param?list
*/
publicstaticvoidinsertDataList(List?list)?{
List?puts?=newArrayList();
Table?table?=null;
Put?put;
try{
for(HbaseDataEntity?entity?:?list)?{
TableName?tableName?=?TableName.valueOf(entity.getTableName());
table?=?connection.getTable(tableName);
put?=newPut(entity.getMobileKey().getBytes());//?一個(gè)PUT代表一行數(shù)據(jù)赦肃,再NEW一個(gè)PUT表示第二行數(shù)據(jù),每行一個(gè)唯一的ROWKEY
for(String?columnfamily?:?entity.getColumns().keySet())?{
for(String?column?:?entity.getColumns().get(columnfamily)
.keySet())?{
put.addColumn(
columnfamily.getBytes(),
column.getBytes(),
entity.getColumns().get(columnfamily)
.get(column).getBytes());
}
}
puts.add(put);
}
table.put(puts);
table.close();
}catch(Exception?e)?{
e.printStackTrace();
}finally{
}
}
/**
*?更新表中的一列
*
*?@param?tableName
*?@param?rowKey
*?@param?familyName
*?@param?columnName
*?@param?value
*/
publicstaticvoidupdateTable(String?name,?String?rowKey,
String?familyName,?String?columnName,?String?value)?{
try{
TableName?tableName?=?TableName.valueOf(name);
Table?table?=?connection.getTable(tableName);
Put?put?=newPut(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(familyName),?Bytes.toBytes(columnName),
Bytes.toBytes(value));
table.put(put);
table.close();
}catch(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
/**
*?批量刪除數(shù)據(jù)
*
*?@param?list
*/
publicstaticvoiddeleteDataList(List?list)?{
Table?table?=null;
List?deletes?=newArrayList();
try{
for(HbaseDataEntity?entity?:?list)?{
TableName?tableName?=?TableName.valueOf(entity.getTableName());
table?=?connection.getTable(tableName);
Delete?delete?=newDelete(Bytes.toBytes(entity.getMobileKey()));
for(String?columnfamily?:?entity.getColumns().keySet())?{
for(String?column?:?entity.getColumns().get(columnfamily)
.keySet())?{
delete.addColumn(columnfamily.getBytes(),
column.getBytes());
}
}
deletes.add(delete);
}
table.delete(deletes);
table.close();
}catch(Exception?e)?{
e.printStackTrace();
}finally{
}
}
/**
*?刪除指定的列
*
*?@param?tableName
*?@param?rowKey
*?@param?familyName
*?@param?columnName
*/
publicstaticvoiddeleteColumn(String?name,?String?rowKey,
String?familyName,?String?columnName)?{
try{
TableName?tableName?=?TableName.valueOf(name);
Table?table?=?connection.getTable(tableName);
Delete?delete?=newDelete(Bytes.toBytes(rowKey));
delete.addColumn(Bytes.toBytes(familyName),
Bytes.toBytes(columnName));
table.delete(delete);
System.out.println(familyName?+":"+?columnName?+"is?delete");
table.close();
}catch(IOException?e)?{
e.printStackTrace();
}
}
/**
*?刪除所有列
*
*?@param?tableName
*?@param?rowKey
*/
publicstaticvoiddeleteAllColumns(String?name,?String?rowKey)?{
try{
TableName?tableName?=?TableName.valueOf(name);
Table?table?=?connection.getTable(tableName);
Delete?delete?=newDelete(Bytes.toBytes(rowKey));
table.delete(delete);
System.out.println("all?columns?are?deleted!");
table.close();
}catch(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
/**
*?獲取所有的數(shù)據(jù)
*?@param?name
*?@param?size
*?@return
*/
publicstaticList?getResultScans(String?name,intsize)?{
Scan?scan?=newScan();
ResultScanner?resultScanner?=null;
List?list?=newArrayList();
try{
TableName?tableName?=?TableName.valueOf(name);
Table?table?=?connection.getTable(tableName);
longbeiginTime?=?System.currentTimeMillis();
resultScanner?=?table.getScanner(scan);
longendTime?=?System.currentTimeMillis();
doublespentTime?=?(endTime?-?beiginTime)?/1000.0;
System.out.println("cost:==="+?spentTime?+"s");
for(Result?result?:?resultScanner)?{
//?System.out.println("獲得到rowkey:"?+?new
//?String(result.getRow()));
HbaseDataEntity?entity?=newHbaseDataEntity();
entity.setTableName(name);
entity.setMobileKey(newString(result.getRow()));
Map>?familyMap?=newHashMap>();
for(Cell?cell?:?result.rawCells())?{
if(familyMap.get(newString(cell.getFamilyArray()))?==null)?{
Map?columnsMap?=newHashMap();
columnsMap.put(
newString(cell.getQualifierArray(),?cell
.getQualifierOffset(),?cell
.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
familyMap.put(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength()),?columnsMap);
}else{
familyMap.get(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength())).put(
newString(cell.getQualifierArray(),
cell.getQualifierOffset(),
cell.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
}
//?System.out.println("列:"?+?new
//?String(cell.getFamilyArray(),?cell.getFamilyOffset(),
//?cell.getFamilyLength())
//?+?"====值:"?+?new
//?String(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength()));
}
entity.setColumns(familyMap);
list.add(entity);
if(size?==?list.size())?{
break;
}
}
table.close();
returnlist;
}catch(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}finally{
resultScanner.close();
}
returnnull;
}
/**
*?組合條件查詢(xún)?and
*
*?@param?nameSpace
*????????????命名空間
*?@param?tableName
*????????????表名
*?@param?parameters
*????????????格式是:columnFamily,columnName,columnValue
*/
publicstaticList?QueryDataByConditionsAnd(
String?nameSpace,?String?name,?List?parameters)?{
ResultScanner?rs?=null;
Table?table?=null;
List?list?=newArrayList();
try{
TableName?tableName?=?TableName.valueOf(name);
table?=?connection.getTable(tableName);
//?參數(shù)的格式:columnFamily,columnName,columnValue
List?filters?=newArrayList();
for(String?parameter?:?parameters)?{
String[]?columns?=?parameter.split(",");
SingleColumnValueFilter?filter?=newSingleColumnValueFilter(
Bytes.toBytes(columns[0]),?Bytes.toBytes(columns[1]),
CompareOp.valueOf(columns[2]),
Bytes.toBytes(columns[3]));
filter.setFilterIfMissing(true);
filters.add(filter);
}
FilterList?filterList?=newFilterList(filters);
Scan?scan?=newScan();
scan.setFilter(filterList);
rs?=?table.getScanner(scan);
for(Result?r?:?rs)?{
System.out.println("獲得到rowkey:"+newString(r.getRow()));
HbaseDataEntity?entity?=newHbaseDataEntity();
entity.setNameSpace(nameSpace);
entity.setTableName(name);
entity.setMobileKey(newString(r.getRow()));
Map>?familyMap?=newHashMap>();
for(Cell?cell?:?r.rawCells())?{
if(familyMap.get(newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell.getFamilyLength()))?==null)?{
Map?columnsMap?=newHashMap();
columnsMap.put(
newString(cell.getQualifierArray(),?cell
.getQualifierOffset(),?cell
.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
familyMap.put(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength()),?columnsMap);
}else{
familyMap.get(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength())).put(
newString(cell.getQualifierArray(),
cell.getQualifierOffset(),
cell.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
}
}
entity.setColumns(familyMap);
list.add(entity);
}
rs.close();
table.close();
returnlist;
}catch(Exception?e)?{
e.printStackTrace();
}
returnnull;
}
/**
*?組合條件查詢(xún)?or
*
*?@param?nameSpace
*????????????命名空間
*?@param?tableName
*????????????表名
*?@param?parameters
*????????????格式是:columnFamily,columnName,columnValue
*?@return
*/
publicstaticList?QueryDataByConditionsOr(
String?nameSpace,?String?name,?List?parameters)?{
ResultScanner?rs?=null;
List?list?=newArrayList();
try{
TableName?tableName?=?TableName.valueOf(name);
Table?table?=?connection.getTable(tableName);
//?參數(shù)的額格式:columnFamily,columnName,columnValue
List?filters?=newArrayList();
Scan?scan?=newScan();
byte[]?columnFamily?=null;
byte[]?columnName?=null;
for(String?parameter?:?parameters)?{
String[]?columns?=?parameter.split(",");
columnFamily?=?Bytes.toBytes(columns[0]);
columnName?=?Bytes.toBytes(columns[1]);
SingleColumnValueFilter?filter?=newSingleColumnValueFilter(
Bytes.toBytes(columns[0]),?Bytes.toBytes(columns[1]),
CompareOp.valueOf(columns[2]),
Bytes.toBytes(columns[3]));
filter.setFilterIfMissing(true);
filters.add(filter);
}
FilterList?filterList?=newFilterList(
FilterList.Operator.MUST_PASS_ONE,?filters);
scan.setFilter(filterList);
rs?=?table.getScanner(scan);
for(Result?r?:?rs)?{
if(r.containsColumn(columnFamily,?columnName))?{
System.out.println("獲得到rowkey:"+newString(r.getRow()));
HbaseDataEntity?entity?=newHbaseDataEntity();
entity.setNameSpace(nameSpace);
entity.setTableName(name);
entity.setMobileKey(newString(r.getRow()));
Map>?familyMap?=newHashMap>();
for(Cell?cell?:?r.rawCells())?{
if(familyMap
.get(newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength()))?==null)?{
Map?columnsMap?=newHashMap();
columnsMap.put(
newString(cell.getQualifierArray(),?cell
.getQualifierOffset(),?cell
.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
familyMap.put(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength()),?columnsMap);
}else{
familyMap.get(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength())).put(
newString(cell.getQualifierArray(),
cell.getQualifierOffset(),
cell.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
}
}
entity.setColumns(familyMap);
list.add(entity);
}
}
table.close();
rs.close();
returnlist;
}catch(Exception?e)?{
e.printStackTrace();
}
returnnull;
}
/**
*?組合條件查詢(xún)?or
*
*?@param?nameSpace
*????????????命名空間
*?@param?tableName
*????????????表名
*?@param?parameters
*????????????格式是:columnFamily,columnName,columnValue
*?@return
*/
publicstaticList?QueryDataByConditions(String?nameSpace,
String?name,?List?hbaseConditions)?{
ResultScanner?rs?=null;
List?list?=newArrayList();
try{
TableName?tableName?=?TableName.valueOf(name);
Table?table?=?connection.getTable(tableName);
//?參數(shù)的額格式:columnFamily,columnName,columnValue
//?List?filters?=?new?ArrayList();
Scan?scan?=newScan();
FilterList?filterList?=null;
Operator?operator?=null;
for(HbaseConditionEntity?hbaseCondition?:?hbaseConditions)?{
SingleColumnValueFilter?filter?=newSingleColumnValueFilter(
hbaseCondition.getFamilyColumn(),
hbaseCondition.getColumn(),
hbaseCondition.getCompareOp(),
hbaseCondition.getValue());
filter.setFilterIfMissing(true);
if(hbaseCondition.getOperator()?!=null)?{
if(operator?==null)?{
operator?=?hbaseCondition.getOperator();
filterList?=newFilterList(
hbaseCondition.getOperator());
filterList.addFilter(filter);
System.out.println("filterList==1"+?filterList);
}elseif(operator.equals(hbaseCondition.getOperator()))?{
filterList.addFilter(filter);
}else{
filterList.addFilter(filter);
System.out.println("filterList==2"+?filterList);
FilterList?addFilterList?=newFilterList(
hbaseCondition.getOperator());
addFilterList.addFilter(filterList);
System.out.println("addFilterList==1"+?addFilterList);
filterList?=?addFilterList;
System.out.println("filterList==3"+?filterList);
}
}else{
if(filterList?==null)?{
filterList?=newFilterList(Operator.MUST_PASS_ALL);//?默認(rèn)只有一個(gè)條件的時(shí)候
}
filterList.addFilter(filter);
}
}
System.out.println(filterList?+":filterList");
scan.setFilter(filterList);
rs?=?table.getScanner(scan);
for(Result?r?:?rs)?{
System.out.println("獲得到rowkey:"+newString(r.getRow()));
HbaseDataEntity?entity?=newHbaseDataEntity();
entity.setNameSpace(nameSpace);
entity.setTableName(name);
entity.setMobileKey(newString(r.getRow()));
Map>?familyMap?=newHashMap>();
for(Cell?cell?:?r.rawCells())?{
if(familyMap.get(newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell.getFamilyLength()))?==null)?{
Map?columnsMap?=newHashMap();
columnsMap.put(
newString(cell.getQualifierArray(),?cell
.getQualifierOffset(),?cell
.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
familyMap.put(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength()),?columnsMap);
}else{
familyMap.get(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength())).put(
newString(cell.getQualifierArray(),
cell.getQualifierOffset(),
cell.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
}
}
entity.setColumns(familyMap);
list.add(entity);
}
table.close();
rs.close();
returnlist;
}catch(Exception?e)?{
e.printStackTrace();
}
returnnull;
}
/**
*?分頁(yè)的復(fù)合條件查詢(xún)
*?@param?nameSpace
*????????命名空間
*?@param?name
*????????表名
*?@param?hbaseConditions
*????????復(fù)合條件
*?@param?pageSize
*????????每頁(yè)顯示的數(shù)量
*?@param?lastRow
*????????當(dāng)前頁(yè)的最后一行
*?@return
*/
publicstaticList?QueryDataByConditionsAndPage(
String?nameSpace,?String?name,
List?hbaseConditions,intpageSize,
byte[]?lastRow)?{
finalbyte[]?POSTFIX?=newbyte[]?{0x00};
ResultScanner?rs?=null;
List?list?=newArrayList();
try{
TableName?tableName?=?TableName.valueOf(name);
Table?table?=?connection.getTable(tableName);
Scan?scan?=newScan();
FilterList?filterList?=null;
Operator?operator?=null;
for(HbaseConditionEntity?hbaseCondition?:?hbaseConditions)?{
SingleColumnValueFilter?filter?=newSingleColumnValueFilter(
hbaseCondition.getFamilyColumn(),
hbaseCondition.getColumn(),
hbaseCondition.getCompareOp(),
hbaseCondition.getValue());
filter.setFilterIfMissing(true);
if(hbaseCondition.getOperator()?!=null)?{
if(operator?==null)?{
operator?=?hbaseCondition.getOperator();
filterList?=newFilterList(
hbaseCondition.getOperator());
filterList.addFilter(filter);
System.out.println("filterList==1"+?filterList);
}elseif(operator.equals(hbaseCondition.getOperator()))?{
filterList.addFilter(filter);
}else{
filterList.addFilter(filter);
System.out.println("filterList==2"+?filterList);
FilterList?addFilterList?=newFilterList(
hbaseCondition.getOperator());
addFilterList.addFilter(filterList);
System.out.println("addFilterList==1"+?addFilterList);
filterList?=?addFilterList;
System.out.println("filterList==3"+?filterList);
}
}else{
if(filterList?==null)?{
filterList?=newFilterList(Operator.MUST_PASS_ALL);//?默認(rèn)只有一個(gè)條件的時(shí)候
}
filterList.addFilter(filter);
}
}
System.out.println(filterList?+":filterList");
FilterList?pageFilterList?=newFilterList(Operator.MUST_PASS_ALL);//?默認(rèn)只有一個(gè)條件的時(shí)候
Filter?pageFilter?=newPageFilter(pageSize);
pageFilterList.addFilter(pageFilter);
pageFilterList.addFilter(filterList);
if(lastRow?!=null)?{
//?注意這里添加了POSTFIX操作誓军,不然死循環(huán)了
byte[]?startRow?=?Bytes.add(lastRow,?POSTFIX);
scan.setStartRow(startRow);
}
System.out.println(pageFilterList?+":pageFilterList");
scan.setFilter(pageFilterList);
rs?=?table.getScanner(scan);
for(Result?r?:?rs)?{
System.out.println("獲得到rowkey:"+newString(r.getRow()));
HbaseDataEntity?entity?=newHbaseDataEntity();
entity.setNameSpace(nameSpace);
entity.setTableName(name);
entity.setMobileKey(newString(r.getRow()));
Map>?familyMap?=newHashMap>();
for(Cell?cell?:?r.rawCells())?{
if(familyMap.get(newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell.getFamilyLength()))?==null)?{
Map?columnsMap?=newHashMap();
columnsMap.put(
newString(cell.getQualifierArray(),?cell
.getQualifierOffset(),?cell
.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
familyMap.put(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength()),?columnsMap);
}else{
familyMap.get(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength())).put(
newString(cell.getQualifierArray(),
cell.getQualifierOffset(),
cell.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
}
}
entity.setColumns(familyMap);
list.add(entity);
}
table.close();
rs.close();
returnlist;
}catch(Exception?e)?{
e.printStackTrace();
}
returnnull;
}
/**
*?復(fù)合條件分頁(yè)查詢(xún)
*?@param?name
*?@param?pageSize
*?@param?lastRow
*?@return
*/
publicstaticList?getHbaseDatasByPage(String?name,
intpageSize,byte[]?lastRow)?{
finalbyte[]?POSTFIX?=newbyte[]?{0x00};
Scan?scan?=newScan();
ResultScanner?resultScanner?=null;
Table?table?=null;
List?list?=newArrayList();
try{
TableName?tableName?=?TableName.valueOf(name);
table?=?connection.getTable(tableName);
Filter?filter?=newPageFilter(pageSize);
scan.setFilter(filter);
if(lastRow?!=null)?{
//?注意這里添加了POSTFIX操作,不然死循環(huán)了
byte[]?startRow?=?Bytes.add(lastRow,?POSTFIX);
scan.setStartRow(startRow);
}
resultScanner?=?table.getScanner(scan);
for(Result?result?:?resultScanner)?{
HbaseDataEntity?entity?=newHbaseDataEntity();
entity.setTableName(name);
entity.setMobileKey(newString(result.getRow()));
Map>?familyMap?=newHashMap>();
for(Cell?cell?:?result.rawCells())?{
if(familyMap.get(newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell.getFamilyLength()))?==null)?{
Map?columnsMap?=newHashMap();
columnsMap.put(
newString(cell.getQualifierArray(),?cell
.getQualifierOffset(),?cell
.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
familyMap.put(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength()),?columnsMap);
}else{
familyMap.get(
newString(cell.getFamilyArray(),?cell
.getFamilyOffset(),?cell
.getFamilyLength())).put(
newString(cell.getQualifierArray(),
cell.getQualifierOffset(),
cell.getQualifierLength()),
newString(cell.getValueArray(),?cell
.getValueOffset(),?cell
.getValueLength()));
}
}
entity.setColumns(familyMap);
list.add(entity);
}
table.close();
returnlist;
}catch(IOException?e)?{
e.printStackTrace();
}finally{
resultScanner.close();
}
returnnull;
}
publicstaticintgetDataByPage(String?name,intpageSize)?{
finalbyte[]?POSTFIX?=newbyte[]?{0x00};
TableName?tableName?=?TableName.valueOf(name);
Table?table;
inttotalRows?=0;
try{
table?=?connection.getTable(tableName);
Filter?filter?=newPageFilter(pageSize);
byte[]?lastRow?=null;
while(true)?{
Scan?scan?=newScan();
scan.setFilter(filter);
if(lastRow?!=null)?{
//?注意這里添加了POSTFIX操作,不然死循環(huán)了
byte[]?startRow?=?Bytes.add(lastRow,?POSTFIX);
scan.setStartRow(startRow);
}
ResultScanner?scanner?=?table.getScanner(scan);
intlocalRows?=0;
Result?result;
while((result?=?scanner.next())?!=null)?{
System.out.println(localRows++?+":"+?result);
totalRows++;
lastRow?=?result.getRow();
}
scanner.close();
if(localRows?==0)
break;
}
}catch(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
System.out.println("total?rows:"+?totalRows);
returntotalRows;
}
publicstaticvoidmain(String[]?args)?{
//?1袁梗、Create?table
//?/String?tableName?=?"caoShuaiTest09";
/*
*?List?columnFamilyName?=?new?ArrayList();
*?columnFamilyName.add("info");?columnFamilyName.add("address");
*?columnFamilyName.add("score");
*
*?createTable(tableName,?columnFamilyName);
*/
//?2、Insert?data?into?table
/*
*?String?roeKey01?=?"LiMing";?Map>
*?familyColumnMap01?=?new?HashMap>();
*?Map?columnMap01?=?new?HashMap();
*?columnMap01.put("age",?"23");?columnMap01.put("phone",
*?"13854285991");?familyColumnMap01.put("info",?columnMap01);
*
*?Map?columnMap02?=?new?HashMap();
*?columnMap02.put("province",?"shandong");?columnMap02.put("city",
*?"beijing");?familyColumnMap01.put("address",?columnMap02);
*
*?Map?columnMap03?=?new?HashMap();
*?columnMap03.put("english",?"80");?columnMap03.put("chinese",?"100");
*?familyColumnMap01.put("score",?columnMap03);?int?result01?=
*?addDataForTable(tableName,?roeKey01,?familyColumnMap01);
*?System.out.println("==result01==:"?+?result01);
*/
//?3筹麸、獲取結(jié)果?getResult(tableName,?roeKey01);
/*
*?String?roeKey02?=?"WangNing";?Map>
*?familyColumnMap01?=?new?HashMap>();
*?Map?columnMap01?=?new?HashMap();
*?columnMap01.put("age",?"50");?columnMap01.put("phone",
*?"13854285991");?familyColumnMap01.put("info",?columnMap01);
*
*?Map?columnMap02?=?new?HashMap();
*?columnMap02.put("province",?"shandong");
*?columnMap02.put("city","beijing");?familyColumnMap01.put("address",
*?columnMap02);
*
*?Map?columnMap03?=?new?HashMap();
*?columnMap03.put("english",?"40");?columnMap03.put("chinese","70");
*?familyColumnMap01.put("score",?columnMap03);?int?result01?=
*?addDataForTable(tableName,?roeKey02,?familyColumnMap01);
*?System.out.println("==result01==:"?+?result01);
*/
//?4
//?getResultScan(tableName);
/*
*?List?parameters?=?new?ArrayList();
*?parameters.add("info,age,EQUAL,23");
*?parameters.add("score,english,GREATER_OR_EQUAL,40");
*?QueryDataByConditionsAnd(null,?tableName,?parameters);
*/
//?5
/*
*?String?newTableName?=?"caoShuaiTest04";
*
*?List?hbaseDatas?=?getResultScans(newTableName);
*
*?System.out.println("hbaseDatas==="?+?hbaseDatas);?for
*?(HbaseDataEntity?hbaseData?:?hbaseDatas)?{
*
*?String?rowKey?=?hbaseData.getMobileKey();
*
*?Map>?maps?=?hbaseData.getColumns();
*
*?for?(String?key?:?maps.keySet())?{
*
*?System.out.println("key==="?+?key);?Map?columnsMap?=
*?maps.get(key);
*
*?for?(String?columnsKey?:?columnsMap.keySet())?{
*?System.out.println("columnsKey==="?+?columnsKey);
*
*?//updateTable("caoShuaiTest01",?rowKey,?key,?columnsKey,columnsKey);
*?//deleteColumn("caoShuaiTest04",?rowKey,?key,?columnsKey);?}
*
*?}?}
*/
/*
*?long?beginTime?=?System.currentTimeMillis();
*?System.out.println("begin:"?+?beginTime);
*
*?for?(int?i?=?0;?i?<?100000000;?i++)?{
*
*?long?startTime?=?System.currentTimeMillis();
*
*?String?tableName?=?"caoShuaiTest06";
*
*?String?roeKey01?=?"LiMing"?+?i;?Map>
*?familyColumnMap01?=?new?HashMap>();
*?Map
*
*?columnMap01?=?new?HashMap();?int?age?=?i?%?100?+?1;
*?columnMap01.put("age",?String.valueOf(age));?columnMap01.put("phone",
*?"13854285991");?columnMap01.put("province",?"shandong");
*?columnMap01.put("city",?"beijing");?columnMap01.put("chinese",
*?"100");?familyColumnMap01.put("info",?columnMap01);
*
*?int?result01?=?addDataForTable(tableName,?roeKey01,
*?familyColumnMap01);?long?finishedTime?=?System.currentTimeMillis();
*
*?double?smallTime?=?(finishedTime?-?startTime)/1000.0;
*?System.out.println("第"?+?i?+?"個(gè)花費(fèi)時(shí)間"?+?smallTime?+?"s"?);?}
*
*?long?endTime?=?System.currentTimeMillis();
*
*?System.out.println("end:"?+?endTime);
*
*?double?time?=?(endTime?-?beginTime)/1000.0;
*
*?System.out.println("all?spent?time:"?+?time?+?"s");
*/
/*
*?String?tableName?=?"caoShuaiTest10";?List?hbaseDatas
*?=?new?ArrayList();?long?startTime?=
*?System.currentTimeMillis();?int?k?=?0;?for?(int?i?=?1;?i?<=
*?100000000;?i++)?{?HbaseDataEntity?hbaseData?=?new?HbaseDataEntity();
*?hbaseData.setTableName(tableName);
*?hbaseData.setMobileKey(String.valueOf(i));?Map
*?String>>?familyMaps?=?new?HashMap>();
*?Map?columnMaps?=?new?HashMap<>();?int?age?=?i?%?100?+
*?1;?columnMaps.put("age",?String.valueOf(age));
*?columnMaps.put("phone",?"13854285991");?columnMaps.put("province",
*?"shandong");?columnMaps.put("city",?"beijing");
*?columnMaps.put("chinese",?"100");?familyMaps.put("info",?columnMaps);
*?hbaseData.setColumns(familyMaps);
*
*?hbaseDatas.add(hbaseData);
*
*?if(i%10000?==?0)?{?k?++;?long?time1?=?System.currentTimeMillis();
*?insertDataList(hbaseDatas);?hbaseDatas.clear();?long?time2?=
*?System.currentTimeMillis();?double?time?=?(time2?-?time1)/1000.0;
*?System.out.println(k?+?"萬(wàn)條數(shù)據(jù)存入hbase花費(fèi)時(shí)間"?+?time?+?"s"?);
*
*?}?}?long?finishedTime?=?System.currentTimeMillis();?double?smallTime
*?=?(finishedTime?-?startTime)/1000.0;?System.out.println("組裝數(shù)據(jù)花費(fèi)時(shí)間"?+
*?smallTime?+?"s"?);
*/
/*
*?long?beiginTime?=?System.currentTimeMillis();
*?insertDataList(hbaseDatas);?long?endTime?=
*?System.currentTimeMillis();?double?spentTime?=?(endTime?-
*?beiginTime)/1000.0;?System.out.println("數(shù)據(jù)花費(fèi)時(shí)間"?+?spentTime?+?"s"?);
*/
/*
*?long?beiginTime?=?System.currentTimeMillis();?String?tableName?=
*?"caoShuaiTest04";?String?hbaseTableName?=
*?"customer_portrait_library";?List?datas?=
*?getResultScans(tableName,?10000);?//System.out.println(datas);?long
*?endTime?=?System.currentTimeMillis();?double?spentTime?=?(endTime?-
*?beiginTime)/1000.0;?System.out.println("數(shù)據(jù)花費(fèi)時(shí)間"?+?spentTime?+?"s"?);
*
*?//System.out.println("hbaseDatas==="?+?datas);
*
*?List?newDatas?=?new?ArrayList();
*
*?long?time1?=?System.currentTimeMillis();?for?(HbaseDataEntity
*?hbaseData?:?datas)?{
*
*?String?rowKey?=?hbaseData.getMobileKey();
*
*
*?HbaseDataEntity?newData?=?new?HbaseDataEntity();
*?newData.setMobileKey(rowKey);?newData.setTableName(hbaseTableName);
*
*?Map>?maps?=?hbaseData.getColumns();
*?Map>?newMaps?=?new?HashMap
*?Map>();
*
*?for?(String?key?:?maps.keySet())?{
*
*?Map?columnsMap?=?maps.get(key);?Map
*?newColumnsMap?=?new?HashMap();?for?(String?columnsKey
*?:?columnsMap.keySet())?{
*
*?newColumnsMap.put(columnsKey,?columnsKey);
*?updateTable(hbaseTableName,?rowKey,?key,?columnsKey,?columnsKey);
*?deleteColumn(tableName,?rowKey,?key,?columnsKey);?}?newMaps.put(key,
*?newColumnsMap);
*
*?}?newData.setColumns(newMaps);?newDatas.add(newData);
*
*?}
*
*?if(newDatas?!=?null?&&?newDatas.size()?>?0)?{?long?insertTime1?=
*?System.currentTimeMillis();?insertDataList(newDatas);?long
*?insertTime2?=?System.currentTimeMillis();?double?insertTime?=
*?(insertTime2?-?insertTime1)/1000.0;?System.out.println("修改數(shù)據(jù)時(shí)間"?+
*?insertTime?+?"s"?);
*
*?long?deleteTime1?=?System.currentTimeMillis();?deleteDataList(datas);
*?long?deleteTime2?=?System.currentTimeMillis();?double?deleteTime?=
*?(deleteTime2?-?deleteTime1)/1000.0;?System.out.println("刪除數(shù)據(jù)時(shí)間"?+
*?deleteTime?+?"s"?);?}?long?time2?=?System.currentTimeMillis();?double
*?time?=?(time2?-?time1)/1000.0;?System.out.println("組裝時(shí)間"?+?time?+?"s"
*?);
*/
/*
*?List?list?=?new?ArrayList();?long?insertTime1?=
*?System.currentTimeMillis();?for(int?i=0;?i<100000000;?i++)?{
*?list.add("abcdef"?+?i);?}?long?insertTime2?=
*?System.currentTimeMillis();?double?insertTime?=?(insertTime2?-
*?insertTime1)/1000.0;?System.out.println("修改數(shù)據(jù)時(shí)間"?+?insertTime?+?"s"
*?);
*/
//?7砰蠢、復(fù)合條件查詢(xún)
String?tableName?="caoShuaiTest01";
List?hbaseConditions?=newArrayList();
hbaseConditions.add(newHbaseConditionEntity(?Bytes.toBytes("info"),
Bytes.toBytes("age"),?Bytes.toBytes("23"),
Operator.valueOf("MUST_PASS_ALL"),?CompareOp.valueOf("EQUAL")));
hbaseConditions.add(newHbaseConditionEntity(?Bytes.toBytes("score"),
Bytes.toBytes("english"),?Bytes.toBytes("80"),
Operator.valueOf("MUST_PASS_ALL"),?CompareOp.valueOf("EQUAL")));
hbaseConditions.add(newHbaseConditionEntity(?Bytes.toBytes("score"),
Bytes.toBytes("english"),?Bytes.toBytes("80"),
Operator.valueOf("MUST_PASS_ONE"),?CompareOp.valueOf("EQUAL")));
hbaseConditions.add(newHbaseConditionEntity(
Bytes.toBytes("address"),?Bytes.toBytes("city"),
Bytes.toBytes("beijing"),null,?CompareOp.valueOf("EQUAL")));
hbaseConditions.add(newHbaseConditionEntity(?Bytes.toBytes("score"),
Bytes.toBytes("english"),?Bytes.toBytes("70"),null,
CompareOp.valueOf("EQUAL")));
List?datas?=?QueryDataByConditionsAndPage(null,?tableName,?hbaseConditions,2,null);
//List?datas?=?QueryDataByConditions(null,?tableName,?hbaseConditions);?//聯(lián)合條件查詢(xún)?String?tableName?=?"caoShuaiTest01";
/*??List?parameters?=?new?ArrayList();
parameters.add("info,age,EQUAL,23");
parameters.add("score,english,EQUAL,80");
parameters.add("address,city,EQUAL,beijing");?String?pm?=
"score,english,EQUAL,78";
List?datas?=?QueryDataByConditions(null,?tableName,?parameters,?pm);*/
System.out.println(datas);
//?分頁(yè)
/*int?pageSize?=?1;
String?key?=?null;
int?dataCount?=?pageSize;
String?tableName?=?"caoShuaiTest01";
while?(dataCount?==?pageSize)?{
byte[]?mobileKey?=?null;
if?(key?!=?null)?{
mobileKey?=?key.getBytes();
}
List?hbaseDatas?=?getHbaseDatasByPage(tableName,
pageSize,?mobileKey);
if?(hbaseDatas?!=?null?&&?hbaseDatas.size()?>?0)?{
System.out.println(hbaseDatas);
dataCount?=?hbaseDatas.size();
key?=?hbaseDatas.get(dataCount?-?1).getMobileKey();
System.out.println("Key:"?+?key);
}?else?{
break;
}
}*/
}
}
其中查詢(xún)的結(jié)果以及查詢(xún)的條件被我封裝成了兩個(gè)實(shí)體類(lèi):
1、查詢(xún)結(jié)果實(shí)體類(lèi):
[java]view plaincopy
packagecom.infobird.test1;
importjava.util.Map;
publicclassHbaseDataEntity?{
privateString?tableName;
privateString?nameSpace;
privateString?mobileKey;
privateMap>?columns;//map>
publicHbaseDataEntity()?{
super();
}
publicHbaseDataEntity(String?tableName,?String?nameSpace,
String?mobileKey,?Map>?columns)?{
super();
this.tableName?=?tableName;
this.nameSpace?=?nameSpace;
this.mobileKey?=?mobileKey;
this.columns?=?columns;
}
publicString?getTableName()?{
returntableName;
}
publicvoidsetTableName(String?tableName)?{
this.tableName?=?tableName;
}
publicString?getNameSpace()?{
returnnameSpace;
}
publicvoidsetNameSpace(String?nameSpace)?{
this.nameSpace?=?nameSpace;
}
publicString?getMobileKey()?{
returnmobileKey;
}
publicvoidsetMobileKey(String?mobileKey)?{
this.mobileKey?=?mobileKey;
}
publicMap>?getColumns()?{
returncolumns;
}
publicvoidsetColumns(Map>?columns)?{
this.columns?=?columns;
}
@Override
publicString?toString()?{
return"HbaseDataEntity?[tableName="+?tableName?+",?nameSpace="
+?nameSpace?+",?mobileKey="+?mobileKey?+",?columns="
+?columns?+"]";
}
}
2.查詢(xún)條件實(shí)體類(lèi):
[java]view plaincopy
packagecom.infobird.test1;
importjava.io.UnsupportedEncodingException;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
importorg.apache.hadoop.hbase.filter.FilterList.Operator;
importorg.apache.hadoop.hbase.util.Bytes;
publicclassHbaseConditionEntity?{
privatebyte[]?familyColumn;
privatebyte[]?column;
privatebyte[]?value;
privateOperator?operator;
privateCompareOp?compareOp;
publicbyte[]?getFamilyColumn()?{
returnfamilyColumn;
}
publicvoidsetFamilyColumn(byte[]?familyColumn)?{
this.familyColumn?=?familyColumn;
}
publicbyte[]?getColumn()?{
returncolumn;
}
publicvoidsetColumn(byte[]?column)?{
this.column?=?column;
}
publicbyte[]?getValue()?{
returnvalue;
}
publicvoidsetValue(byte[]?value)?{
this.value?=?value;
}
publicOperator?getOperator()?{
returnoperator;
}
publicvoidsetOperator(Operator?operator)?{
this.operator?=?operator;
}
publicCompareOp?getCompareOp()?{
returncompareOp;
}
publicvoidsetCompareOp(CompareOp?compareOp)?{
this.compareOp?=?compareOp;
}
publicHbaseConditionEntity(byte[]?familyColumn,byte[]?column,
byte[]?value,?Operator?operator,?CompareOp?compareOp)?{
super();
this.familyColumn?=?familyColumn;
this.column?=?column;
this.value?=?value;
this.operator?=?operator;
this.compareOp?=?compareOp;
}
publicHbaseConditionEntity()?{
super();
//?TODO?Auto-generated?constructor?stub
}
publicstaticList?toHbaseConditions(String?labels)?{
List?hbaseConditions?=newArrayList();
String[]?labelArray?=?labels.split(";");
for(String?labelWithCompares?:?labelArray)?{
String[]?labelWithComparesArray?=?labelWithCompares.split("?");
String?label?=?labelWithComparesArray[0];
Operator?compare?=null;
if(labelWithComparesArray.length?>1)?{
if("and".equals(labelWithComparesArray[1]))?{
compare?=?Operator.MUST_PASS_ALL;
}else{
compare?=?Operator.MUST_PASS_ONE;
}
}
byte[]?familyColumn?=?Bytes.toBytes("label");
byte[]?column?=?Bytes.toBytes(label);
byte[]?value?=?Bytes.toBytes(label);
HbaseConditionEntity?hbaseCondition?=newHbaseConditionEntity(
familyColumn,?column,?value,?compare,?CompareOp.EQUAL);
hbaseConditions.add(hbaseCondition);
}
returnhbaseConditions;
}
publicstaticvoidmain(String[]?args)throwsUnsupportedEncodingException?{
String?labels?="label1?and;label2?or;label3";
List?conditions?=?toHbaseConditions(labels);
System.out.println("==========begin==========");
for(HbaseConditionEntity?hbaseConditionEntity?:?conditions)?{
System.out.println("[familyColumn:?"+newString(hbaseConditionEntity.getFamilyColumn(),"UTF-8")
+"]?[column:?"+newString(hbaseConditionEntity.getColumn(),"UTF-8")
+"]?[value:?"+newString(hbaseConditionEntity.getValue(),"UTF-8")
+"]?[operator:?"+?hbaseConditionEntity.getOperator()
+"]?[compare:?"+?hbaseConditionEntity.getCompareOp()?+"]");
}
System.out.println("==========end==========");
}
}