package com.sheng.cuid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
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.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionConfiguration;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
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.client.Table;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.util.Bytes;
public class TestHbase {
static Configuration cfg = HBaseConfiguration.create();
public static void main(String[] args) {
try {
// listTables();
//create("emp");
// get();
// findAll();
//findFilter();
//listTables();
putRows();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void listTables() throws IOException {
Connection conn = ConnectionFactory.createConnection(cfg);
Admin admin = conn.getAdmin();
TableName[] tableNames = admin.listTableNames(); // Alt+shift+L
for (TableName name : tableNames) {
System.out.println(name.getNameAsString());
}
conn.close();
}
// 创建表
public static void create(String tableName) throws IOException {
// String tableName = "emp";
Connection conn = ConnectionFactory.createConnection(cfg);
Admin admin = conn.getAdmin();
TableName tn = TableName.valueOf(tableName); // 构建了一个HBase的表名对像
if (admin.tableExists(tn)) // 判断表是否成在
{
admin.disableTable(tn); // 禁用表
admin.deleteTable(tn); // 删除表
}
// create 'tableName','cf1'
HTableDescriptor tableDesc = new HTableDescriptor(tn); // 构建一个HBase表结构信息
HColumnDescriptor columnDesc1 = new HColumnDescriptor("cf1"); // 构建一个列族
columnDesc1.setVersions(1, 5); // 版本数
HColumnDescriptor columnDesc2 = new HColumnDescriptor("cf2"); // 构建一个列族
columnDesc2.setVersions(1, 5);
tableDesc.addFamily(columnDesc1);// 添加到描述中
tableDesc.addFamily(columnDesc2);// 添加到描述中
admin.createTable(tableDesc); // 创建一个表指定描述的表
conn.close();
System.out.println("创建表成功!!");
}
// 查询指定rowkey的一条记录
public static void get() throws IOException {
// Admin admin = conn.getAdmin();
Connection conn = ConnectionFactory.createConnection(cfg);
TableName tn = TableName.valueOf("students2"); // 构建了一个HBase的表对像
Table table = conn.getTable(tn);// 从集群中拿到该表
Get get = new Get("00002".getBytes()); // 查找指定的RowKey
Result resulst = table.get(get);
List<Cell> cells = resulst.listCells(); // 得到所有单元格
for (Cell c : cells) {
// 得到RowKey
System.out.print(new String(c.getRowArray(), c.getRowOffset(), c.getRowLength()) + "\t");
// 得到列族名
System.out.print(new String(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength()) + "\t");
// 得到列名
System.out.print(new String(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength()) + "\t");
// 得到值
System.out.println(new String(c.getValueArray(), c.getValueOffset(), c.getValueLength()));
}
}
// 查找整个表
public static void findAll() throws IOException {
TableName tableName = TableName.valueOf("students2");// 指定表名
Connection conn = ConnectionFactory.createConnection(cfg);
Table table = conn.getTable(tableName); // 得到表
Scan scan = new Scan();
// Scan scan = new Scan(Bytes.toBytes("r"), Bytes.toBytes("00005"));// 扫描从里开始到那里结束
ResultScanner rs = table.getScanner(scan);
Iterator<Result> iter = rs.iterator();
while (iter.hasNext()) {
Result resulst = iter.next();// 取一条记录
List<Cell> cells = resulst.listCells(); // 得到所有单元格
for (Cell c : cells) {
// 得到RowKey
System.out.print(new String(c.getRowArray(), c.getRowOffset(), c.getRowLength()) + "\t");
// 得到列族名
System.out.print(new String(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength()) + "\t");
// 得到列名
System.out.print(
new String(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength()) + "\t");
// 得到值
System.out.println(new String(c.getValueArray(), c.getValueOffset(), c.getValueLength()));
}
}
}
//指定查询
public static void findFilter() throws IOException {
TableName tableName = TableName.valueOf("students2");// 指定表名
Connection conn = ConnectionFactory.createConnection(cfg);
Table table = conn.getTable(tableName); // 得到表
RowFilter rowFilter = new RowFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("00002")));// 小于等于00005
// RowFilter rowFilter2 = new RowFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("00005")));// 小于等于00005
Scan scan = new Scan();
scan.setFilter(rowFilter);// 设置行过滤条件
// scan.setFilter(new FilterList(rowFilter,rowFilter2));//设置多个过滤器操作
ResultScanner rs = table.getScanner(scan);
Iterator<Result> iter = rs.iterator();
while (iter.hasNext()) {
Result resulst = iter.next();
List<Cell> cells = resulst.listCells(); // 得到所有单元格
for (Cell c : cells) {
// 得到RowKey
System.out.print(new String(c.getRowArray(), c.getRowOffset(), c.getRowLength()) + "\t");
// 得到列族名
System.out.print(new String(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength()) + "\t");
// 得到列名
System.out.print(
new String(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength()) + "\t");
// 得到值
System.out.println(new String(c.getValueArray(), c.getValueOffset(), c.getValueLength()));
}
}
}
// 批量添加记录
public static void putRows() throws IOException {
String rowinfos[] = { "rowkey=row000001 name=李刚1 sex=MAN age=20 oracle=95.4",
"rowkey=row000002 name=李刚2 sex=MAN age=20 oracle=95.4",
"rowkey=row000003 name=李刚3 sex=MAN age=20 oracle=95.4",
"rowkey=row000004 name=李刚4 sex=MAN age=20 oracle=95.4",
"rowkey=row000005 name=李刚5 sex=MAN age=20 oracle=95.4",
"rowkey=row000006 name=李刚6 sex=MAN age=20 oracle=95.4",
"rowkey=row000007 name=李刚7 sex=MAN age=20 oracle=95.4" };
Connection conn = ConnectionFactory.createConnection(cfg);
TableName tn = TableName.valueOf("teacher"); // 构建了一个HBase的表对像
Table table = conn.getTable(tn);// 从集群中拿到该表
List<Put> puts = new ArrayList<Put>();
for (String rowinfo : rowinfos) {
String[] rows = rowinfo.split("\t");
Put put = new Put(rows[0].split("=")[1].getBytes()); // 以RowKey来构造一个Put对像
for (int i = 1; i < rows.length; i++) {
String[] column = rows[i].split("=");
// put.addColumn("列族名", "列名(字段名)", "值");
if (i > 2) {
put.addColumn("soures".getBytes(), column[0].getBytes(), column[1].getBytes()); // 给put对像添加列信息数据
} else {
put.addColumn("info".getBytes(), column[0].getBytes(), column[1].getBytes()); // 给put对像添加列信息数据
}
}
puts.add(put);// 把封装好一个put添加到List
}
table.put(puts); // 批量添加
System.out.println("添加数据成功");
}
}
HBASE API操作(增删改查一)
猜你喜欢
转载自blog.csdn.net/weixin_43599377/article/details/103588645
今日推荐
周排行