eclipse_java_hbase操作
程序员文章站
2022-05-30 15:12:56
...
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class testhbase{
static Configuration conf = null;
static Connection conn = null;
public static void main(String[] args) throws Exception {
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "localhost");
conf.set("hbase.zookeeper.property.clientPort", "2081");
try {
conn = ConnectionFactory.createConnection(conf);
HBaseAdmin.available(conf);
System.out.println("ok");
} catch (IOException e) {
e.printStackTrace();
}
//查询*部门
singColumnFilter("depts:dp","depart_info","f_dp","null");
//找到某个部门的所有子部门
// 创建表(包含多个列簇)
TableName tableName = TableName.valueOf("test");
String[] columnFamilys = { "article", "author" };
// createTable(tableName, columnFamilys);
//添加数据
List<Map<String,Object>> listMap=new ArrayList<Map<String, Object>>();
Map<String,Object> map1=new HashMap<String,Object>();
map1.put("rowKey","ce_shi1");
map1.put("columnFamily","article");
map1.put("columnName","title");
map1.put("columnValue","Head First HBase");
listMap.add(map1);
Map<String,Object> map2=new HashMap<String,Object>();
map2.put("rowKey","ce_shi1");
map2.put("columnFamily","article");
map2.put("columnName","content");
map2.put("columnValue","HBase is the Hadoop database");
listMap.add(map2);
Map<String,Object> map3=new HashMap<String,Object>();
map3.put("rowKey","ce_shi1");
map3.put("columnFamily","article");
map3.put("columnName","tag");
map3.put("columnValue","Hadoop,HBase,NoSQL");
listMap.add(map3);
Map<String,Object> map4=new HashMap<String,Object>();
map4.put("rowKey","ce_shi1");
map4.put("columnFamily","author");
map4.put("columnName","name");
map4.put("columnValue","nicholas");
listMap.add(map4);
Map<String,Object> map5=new HashMap<String,Object>();
map5.put("rowKey","ce_shi1");
map5.put("columnFamily","author");
map5.put("columnName","nickname");
map5.put("columnValue","lee");
listMap.add(map5);
Map<String,Object> map6=new HashMap<String,Object>();
map6.put("rowKey","ce_shi2");
map6.put("columnFamily","author");
map6.put("columnName","name");
map6.put("columnValue","spark");
listMap.add(map6);
Map<String,Object> map7=new HashMap<String,Object>();
map7.put("rowKey","ce_shi2");
map7.put("columnFamily","author");
map7.put("columnName","nickname");
map7.put("columnValue","hadoop");
listMap.add(map7);
// insertMany(tableName,listMap);
//根据RowKey,列簇,列名修改值
String rowKey="ce_shi2";
String columnFamily="author";
String columnName="name";
String columnValue="hbase";
// updateData(tableName,rowKey,columnFamily,columnName,columnValue);
String rowKey1="ce_shi1";
String columnFamily1="article";
String columnName1="name";
List<String> columnNames=new ArrayList<String>();
columnNames.add("content");
columnNames.add("title");
//删除某行某个列簇的某个列
// deleteData(tableName,rowKey1,columnFamily1,columnName1);
//删除某行某个列簇
// deleteData(tableName,rowKey1,columnFamily1);
//删除某行某个列簇的多个列
// deleteData(tableName,rowKey1,columnFamily1,columnNames);
//删除某行
// deleteData(tableName,rowKey1);
//根据rowKey查询数据
// getResult(tableName,"rowKey1");
//全表扫描
//scanTable(tableName);
//rowKey过滤器
// rowkeyFilter(tableName);
//列值过滤器
// singColumnFilter(tableName);
//列名前缀过滤器
// columnPrefixFilter(tableName);
//过滤器集合
// filterSet(tableName);
}
/**
* 创建只有一个列簇的表
* @throws IOException
*/
public static void createTable() throws IOException {
Admin admin = conn.getAdmin();
//表不存在
if(!admin.tableExists(TableName.valueOf("test"))) {
TableName tableName = TableName.valueOf("test");
//表描述器构造器
TableDescriptorBuilder tdb =TableDescriptorBuilder.newBuilder(tableName) ;
//列族描述起构造器
ColumnFamilyDescriptorBuilder cdb = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("user"));
//获得列描述起
ColumnFamilyDescriptor cfd = cdb.build();
//添加列族
tdb.setColumnFamily(cfd);
//获得表描述器
TableDescriptor td = tdb.build();
//创建表
//admin.addColumnFamily(tableName, cfd); //给标添加列族
admin.createTable(td);
}else {
System.out.println("表已存在");
}
//关闭链接
}
/**
* 创建表(包含多个列簇)
*
* @tableName 表名
*
* @family 列族列表
*/
public static void createTable(String tn, String[] columnFamilys) throws IOException {
TableName tablename = TableName.valueOf(tn);
Admin admin = conn.getAdmin();
if(!admin.tableExists(tablename)) {
//表描述器构造器
TableDescriptorBuilder tdb =TableDescriptorBuilder.newBuilder(tablename) ;
//列族描述器构造器
ColumnFamilyDescriptorBuilder cdb ;
//获得列描述器
ColumnFamilyDescriptor cfd ;
for (String columnFamily:columnFamilys) {
cdb = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));
cfd = cdb.build();
//添加列族
tdb.setColumnFamily(cfd);
}
//获得表描述器
TableDescriptor td = tdb.build();
//创建表
admin.createTable(td);
}else {
System.out.println("表已存在!");
}
//关闭链接
}
/**
* 添加数据(多个rowKey,多个列簇,适合由固定结构的数据)
* @param tableName
* @param list
* @throws IOException
*/
public static void insertMany(String tn,List<Map<String,Object>> list)
throws IOException {
List<Put> puts = new ArrayList<Put>();
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);// Tabel负责跟记录相关的操作如增删改查等//
if(list!=null&&list.size()>0){
for(Map<String,Object> map:list){
Put put=new Put(Bytes.toBytes(map.get("rowKey").toString()));
put.addColumn(Bytes.toBytes(map.get("columnFamily").toString()),
Bytes.toBytes(map.get("columnName").toString()),
Bytes.toBytes(map.get("columnValue").toString()));
puts.add(put);
}
}
table.put(puts);
table.close();
System.out.println("add data Success!");
}
/**
* 添加数据(多个rowKey,多个列簇)
* @throws IOException
*/
public static void insertMany() throws IOException {
Table table = conn.getTable(TableName.valueOf("test"));
List<Put> puts = new ArrayList<Put>();
Put put1 = new Put(Bytes.toBytes("rowKey1"));
put1.addColumn(Bytes.toBytes("user"),Bytes.toBytes("name") , Bytes.toBytes("wd"));
Put put2 = new Put(Bytes.toBytes("rowKey2"));
put2.addColumn(Bytes.toBytes("user"),Bytes.toBytes("age") , Bytes.toBytes("25"));
Put put3 = new Put(Bytes.toBytes("rowKey3"));
put3.addColumn(Bytes.toBytes("user"),Bytes.toBytes("weight") , Bytes.toBytes("60kg"));
Put put4 = new Put(Bytes.toBytes("rowKey4"));
put4.addColumn(Bytes.toBytes("user"),Bytes.toBytes("sex") , Bytes.toBytes("男"));
puts.add(put1);
puts.add(put2);
puts.add(put3);
puts.add(put4);
table.put(puts);
table.close();
}
/**
* 添加数据(一个rowKey,一个列簇)
* @throws IOException
*/
public void insertSingle() throws IOException {
Table table = conn.getTable(TableName.valueOf("test"));
Put put1 = new Put(Bytes.toBytes("rowKey5"));
put1.addColumn(Bytes.toBytes("user"),Bytes.toBytes("name") , Bytes.toBytes("cm"));
put1.addColumn(Bytes.toBytes("user"),Bytes.toBytes("age") , Bytes.toBytes("22"));
put1.addColumn(Bytes.toBytes("user"),Bytes.toBytes("weight") , Bytes.toBytes("88kg"));
put1.addColumn(Bytes.toBytes("user"),Bytes.toBytes("sex") , Bytes.toBytes("男"));
table.put(put1);
table.close();
}
/**
* 根据RowKey,列簇,列名修改值
* @param tableName
* @param rowKey
* @param columnFamily
* @param columnName
* @param columnValue
* @throws IOException
*/
public static void updateData(String tn,String rowKey,String columnFamily,String columnName,String columnValue) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Put put1 = new Put(Bytes.toBytes(rowKey));
put1.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName) , Bytes.toBytes(columnValue));
table.put(put1);
table.close();
}
/**
* 根据rowKey删除一行数据
* @param tableName
* @param rowKey
* @throws IOException
*/
public static void deleteData(String tn,String rowKey) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Delete delete = new Delete(Bytes.toBytes(rowKey));
table.delete(delete);
table.close();
}
/**
* 删除某一行的某一个列簇内容
* @param tableName
* @param rowKey
* @param columnFamily
* @throws IOException
*/
public static void deleteData(String tn,String rowKey,String columnFamily) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Delete delete = new Delete(Bytes.toBytes(rowKey));
delete.addFamily(Bytes.toBytes(columnFamily));
table.delete(delete);
table.close();
}
/**
* 删除某一行某个列簇某列的值
* @param tableName
* @param rowKey
* @param columnFamily
* @param columnName
* @throws IOException
*/
public static void deleteData(String tn,String rowKey,String columnFamily,String columnName) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Delete delete = new Delete(Bytes.toBytes(rowKey));
delete.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnName));
table.delete(delete);
table.close();
}
/**
* 删除某一行某个列簇多个列的值
* @param tableName
* @param rowKey
* @param columnFamily
* @param columnNames
* @throws IOException
*/
public static void deleteData(String tn,String rowKey,String columnFamily,List<String> columnNames) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Delete delete = new Delete(Bytes.toBytes(rowKey));
for(String columnName:columnNames){
delete.addColumns(Bytes.toBytes(columnFamily), Bytes.toBytes(columnName));
}
table.delete(delete);
table.close();
}
/**
*根据rowKey查询数据
* @throws IOException
*/
public static void getResult(String tn, String rowKey) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
//获得一行
Get get = new Get(Bytes.toBytes(rowKey));
Result set = table.get(get);
Cell[] cells = set.rawCells();
for(Cell cell : cells) {
System.out.println(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"::"+
Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
}
table.close();
}
/**
* 全表扫描
* @param tableName(string)
* @throws IOException
*/
public static void scanTable(String tn) throws IOException {
TableName tablename = TableName.valueOf(tn);
//获取表名
Table table = conn.getTable(tablename);
//根据表名获取表
Scan scan = new Scan();
//新建扫描器
ResultScanner rsacn = table.getScanner(scan);
//结果扫描器
for(Result rs:rsacn) {
String rowkey = Bytes.toString(rs.getRow());
//获取行键
System.out.println("row key :"+rowkey);
//打印行键
Cell[] cells = rs.rawCells();
for(Cell cell : cells) {
System.out.println(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength())+"::"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"::"+
Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
}
System.out.println("-----------------------------------------");
}
}
//过滤器 LESS < LESS_OR_EQUAL <= EQUAL = NOT_EQUAL <> GREATER_OR_EQUAL >= GREATER > NO_OP 排除所有
/**
* rowKey过滤器
* @param tableName
* @throws IOException
*/
public static void rowkeyFilter(String tn) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Scan scan = new Scan();
RowFilter filter = new RowFilter(CompareOperator.EQUAL,new RegexStringComparator("Key1$"));//str$ 末尾匹配,相当于sql中的 %str ^str开头匹配,相当于sql中的str%
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);
for(Result rs:scanner) {
String rowkey = Bytes.toString(rs.getRow());
System.out.println("row key :"+rowkey);
Cell[] cells = rs.rawCells();
for(Cell cell : cells) {
System.out.println(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength())+"::"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"::"+
Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
}
System.out.println("-----------------------------------------");
}
}
/**
* 列值过滤器
* @throws IOException
*/
public static void singColumnFilter(String tn,String ColumnFamily,String Column,String target) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Scan scan = new Scan();
//下列参数分别为,列族,列名,比较符号,值
SingleColumnValueFilter filter = new SingleColumnValueFilter( Bytes.toBytes(ColumnFamily), Bytes.toBytes(Column),
CompareOperator.EQUAL, Bytes.toBytes(target)) ;
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);
for(Result rs:scanner) {
String rowkey = Bytes.toString(rs.getRow());
System.out.println("row key :"+rowkey);
Cell[] cells = rs.rawCells();
for(Cell cell : cells) {
System.out.println(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength())+"::"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"::"+
Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
}
System.out.println("-----------------------------------------");
}
}
/**
* 列名前缀过滤器
* @throws IOException
*/
public static void columnPrefixFilter(String tn) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Scan scan = new Scan();
ColumnPrefixFilter filter = new ColumnPrefixFilter(Bytes.toBytes("name"));
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);
for(Result rs:scanner) {
String rowkey = Bytes.toString(rs.getRow());
System.out.println("row key :"+rowkey);
Cell[] cells = rs.rawCells();
for(Cell cell : cells) {
System.out.println(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength())+"::"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"::"+
Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
}
System.out.println("-----------------------------------------");
}
}
/**
* 过滤器集合
* @throws IOException
*/
public static void filterSet(String tn) throws IOException {
TableName tablename = TableName.valueOf(tn);
Table table = conn.getTable(tablename);
Scan scan = new Scan();
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);
SingleColumnValueFilter filter1 = new SingleColumnValueFilter( Bytes.toBytes("author"), Bytes.toBytes("name"),
CompareOperator.EQUAL, Bytes.toBytes("spark")) ;
ColumnPrefixFilter filter2 = new ColumnPrefixFilter(Bytes.toBytes("name"));
list.addFilter(filter1);
list.addFilter(filter2);
scan.setFilter(list);
ResultScanner scanner = table.getScanner(scan);
for(Result rs:scanner) {
String rowkey = Bytes.toString(rs.getRow());
System.out.println("row key :"+rowkey);
Cell[] cells = rs.rawCells();
for(Cell cell : cells) {
System.out.println(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength())+"::"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"::"+
Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
}
System.out.println("-----------------------------------------");
}
}
}