HBase操作

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();

}

}

/**

* 创建表

*

* @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();

}

}

/**

* 往表里面添加数据

*

* @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;

}

/**

* 批量添加数据

*

* @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());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的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();

}

}

/**

* 批量删除数据

*

* @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();

}

}

/**

* 获取所有的数据

* @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;

}

/**

* 组合条件查询 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);

// 参数的格式: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;

}

/**

* 组合条件查询 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);

// 参数的额格式: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;

}

/**

* 组合条件查询 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);

// 参数的额格式: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);// 默认只有一个条件的时候

}

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;

}

/**

* 分页的复合条件查询

* @param nameSpace

*        命名空间

* @param name

*        表名

* @param hbaseConditions

*        复合条件

* @param pageSize

*        每页显示的数量

* @param lastRow

*        当前页的最后一行

* @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);// 默认只有一个条件的时候

}

filterList.addFilter(filter);

}

}

System.out.println(filterList +":filterList");

FilterList pageFilterList =newFilterList(Operator.MUST_PASS_ALL);// 默认只有一个条件的时候

Filter pageFilter =newPageFilter(pageSize);

pageFilterList.addFilter(pageFilter);

pageFilterList.addFilter(filterList);

if(lastRow !=null) {

// 注意这里添加了POSTFIX操作,不然死循环了

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;

}

/**

* 复合条件分页查询

* @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操作,不然死循环了

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操作,不然死循环了

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、获取结果 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 + "个花费时间" + 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 + "万条数据存入hbase花费时间" + time + "s" );

*

* } } long finishedTime = System.currentTimeMillis(); double smallTime

* = (finishedTime - startTime)/1000.0; System.out.println("组装数据花费时间" +

* smallTime + "s" );

*/

/*

* long beiginTime = System.currentTimeMillis();

* insertDataList(hbaseDatas); long endTime =

* System.currentTimeMillis(); double spentTime = (endTime -

* beiginTime)/1000.0; System.out.println("数据花费时间" + 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("数据花费时间" + 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("修改数据时间" +

* insertTime + "s" );

*

* long deleteTime1 = System.currentTimeMillis(); deleteDataList(datas);

* long deleteTime2 = System.currentTimeMillis(); double deleteTime =

* (deleteTime2 - deleteTime1)/1000.0; System.out.println("删除数据时间" +

* deleteTime + "s" ); } long time2 = System.currentTimeMillis(); double

* time = (time2 - time1)/1000.0; System.out.println("组装时间" + 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("修改数据时间" + insertTime + "s"

* );

*/

// 7、复合条件查询

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); //联合条件查询 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);

// 分页

/*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;

}

}*/

}

}

其中查询的结果以及查询的条件被我封装成了两个实体类:

1、查询结果实体类:

[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.查询条件实体类:

[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==========");

}

}

推荐阅读更多精彩内容