需要引入的jar包(这里的jar包括hbase,hive的UDF,hive的jdbc连接)
java源码
package com.hbase.jdbc;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseOperate {
public static Configuration conf;
static{
conf = HBaseConfiguration.create();
conf.set("hbase.master", "192.168.1.100:600000");
conf.set("hbase.zookeeper.quorum", "192.168.192.137");
}
public static void main(String args[]) throws Exception{
String[] cols = {"age","sex","address"};
String tableName = "userInfo3";
// new HBaseOperate().createTable(tableName, cols);
String[] columnValue = {"北京","1","16",};
String[] column = {"baseAddress","baseSex","baseAge"};
// new HBaseOperate().listTable();
// new HBaseOperate().insertData(tableName,"doubi", column, columnValue);
// new HBaseOperate().dropTable(tableName);
// new HBaseOperate().getRow(tableName, "wj");
// new HBaseOperate().deleteRow(tableName, "wj");
// new HBaseOperate().getAllRow(tableName);
// new HBaseOperate().getRowByCondition(tableName);
new HBaseOperate().getRowByManyCondition(tableName);
}
public void createTable(String tableName,String cols[]) throws Exception{
HBaseAdmin ha = new HBaseAdmin(conf);
if(ha.tableExists(tableName)){
System.out.println("表已经存在");
}else{
HTableDescriptor table = new HTableDescriptor(TableName.valueOf(tableName));
for(String c: cols){
HColumnDescriptor col=new HColumnDescriptor(c);//列簇名
table.addFamily(col);
}
ha.createTable(table);
ha.close();
System.out.println("创建表成功!");
}
}
public void dropTable(String tableName) throws Exception{
System.out.println("start drop table!");
HBaseAdmin ha = new HBaseAdmin(conf);
ha.disableTable(tableName);
ha.deleteTable(tableName);
System.out.println("drop table success!");
}
public void listTable() throws Exception{
HBaseAdmin ha = new HBaseAdmin(conf);
TableName[] tableNames = ha.listTableNames();
for(int i = 0; i < tableNames.length; i ++){
System.out.println(tableNames[i].getNameAsString());
}
}
public void insertData(String tableName, String rowKey, String[] column,
String[] columnValue) throws Exception{
System.out.println("start insert table!");
HTable table = new HTable(conf, tableName);
HTableDescriptor hd = table.getTableDescriptor();
HColumnDescriptor[] hcds = hd.getColumnFamilies();//最后一列开始
Put put = new Put(rowKey.getBytes());
for(int i = 0; i < hcds.length; i ++){
HColumnDescriptor hcd = hcds[i];
put.add(hcd.getName(), column[i].getBytes(), columnValue[i].getBytes());
//family column value
}
table.put(put);
System.out.println("end insert table!");
}
public void getRow(String tableName, String key) throws Exception{
System.out.println("start get row!");
HTable table = new HTable(conf, tableName);
Get get = new Get(key.getBytes());
Result result = table.get(get);
for(Cell cell : result.rawCells()){
System.out.println("row family++++++ " +
new String(CellUtil.cloneFamily(cell)) +
" row column++++++ " + new String(CellUtil.cloneQualifier(cell)) +
" row value ++++++" + new String(CellUtil.cloneValue(cell)));
}
System.out.println("get row end!");
}
public void deleteRow(String tableName, String key) throws Exception{
System.out.println("delete row start!");
HTable table =new HTable(conf, tableName);
Delete d1 = new Delete(key.getBytes());
table.delete(d1);
System.out.println("delete row end!");
}
public void getAllRow(String tableName) throws Exception{
System.out.println("get all row start!");
HTable table = new HTable(conf, tableName);
Scan s = new Scan();
ResultScanner rs = table.getScanner(s);
for(Result result : rs){
for(Cell cell : result.rawCells()){
System.out.println("row key++++++" + new String(CellUtil.cloneRow(cell)) +
" row family++++++ " + new String(CellUtil.cloneFamily(cell)) +
" row column++++++ " + new String(CellUtil.cloneQualifier(cell)) +
" row value ++++++" + new String(CellUtil.cloneValue(cell)));
}
}
System.out.println("get all row end");
}
public void getRowByCondition(String tableName) throws Exception{
System.out.println("begin query!");
HTable table = new HTable(conf, tableName);
Filter filter = new SingleColumnValueFilter(Bytes.toBytes("sex"), Bytes.toBytes("baseAge"), CompareOp.EQUAL, Bytes.toBytes("100")); //family column 比较符号 比较值
Scan s = new Scan();
s.setFilter(filter);
ResultScanner rs = table.getScanner(s);
for(Result result : rs){
for(Cell cell : result.rawCells()){
System.out.println("row key++++++" + new String(CellUtil.cloneRow(cell)) +
" row family++++++ " + new String(CellUtil.cloneFamily(cell)) +
" row column++++++ " + new String(CellUtil.cloneQualifier(cell)) +
" row value ++++++" + new String(CellUtil.cloneValue(cell)));
}
}
System.out.println("end query!");
}
public void getRowByManyCondition(String tableName) throws Exception{
System.out.println("begin query!");
HTable table = new HTable(conf, tableName);
Filter filterSex = new SingleColumnValueFilter(Bytes.toBytes("sex"),
Bytes.toBytes("baseAge"), CompareOp.EQUAL, Bytes.toBytes("16"));
//family column 比较符号 比较值
Filter filterAge = new SingleColumnValueFilter(Bytes.toBytes("age"),
Bytes.toBytes("baseSex"), CompareOp.EQUAL, Bytes.toBytes("1"));
//family column 比较符号 比较值
List<Filter> filterList = new ArrayList<Filter>();
filterList.add(filterAge);
filterList.add(filterSex);
Scan s = new Scan();
FilterList filterListS = new FilterList(filterList);
s.setFilter(filterListS);
//可以设置查询结果的开始 和 结束位置(针对的是key值)
s.setStartRow("wj".getBytes());
s.setStopRow("wj".getBytes());
ResultScanner rs = table.getScanner(s);
for(Result result : rs){
for(Cell cell : result.rawCells()){
System.out.println("row key++++++" + new String(CellUtil.cloneRow(cell)) +
" row family++++++ " + new String(CellUtil.cloneFamily(cell)) +
" row column++++++ " + new String(CellUtil.cloneQualifier(cell)) +
" row value ++++++" + new String(CellUtil.cloneValue(cell)));
}
}
System.out.println("end query!");
}
}