public class TestHbaseConnect {
static HBaseAdmin admin = null;
static Connection conn = null;
public static void create_namespace() throws IOException {
//
Builder ns = NamespaceDescriptor.create("test_api_1901");
NamespaceDescriptor build = ns.build();
admin.createNamespace(build);
}
public static void main(String[] args) throws IOException {
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// DDL操作
// 获取ddl的句柄
admin = (HBaseAdmin) conn.getAdmin();
// create_namespace();
admin.deleteNamespace("test_api");
NamespaceDescriptor[] lists = admin.listNamespaceDescriptors();
for (NamespaceDescriptor namespaceDescriptor : lists) {
String name = namespaceDescriptor.getName();
System.out.println(name);
}
}
@Test
public void test1() throws IOException {
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// DDL操作
// 获取ddl的句柄
admin = (HBaseAdmin) conn.getAdmin();
TableName[] listTableNames = admin.listTableNames();
for (TableName tableName : listTableNames) {
String nameWithNamespaceInclAsString = tableName.getNameWithNamespaceInclAsString();
System.out.println(nameWithNamespaceInclAsString+"*");
}
NamespaceDescriptor[] lists = admin.listNamespaceDescriptors();
for (NamespaceDescriptor namespaceDescriptor : lists) {
String name = namespaceDescriptor.getName();
System.out.println(name);
}
}
// 创建表
@Test
public void test2() throws IOException {
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// DDL操作
// 获取ddl的句柄
admin = (HBaseAdmin) conn.getAdmin();
// 创建表 先封装表名 再封装表名描述
TableName name = TableName.valueOf("test_api");
// 判断锁创建的表是否存在
if (admin.tableExists(name)) {
System.out.println("表名已经存在请更换名字");
} else {
HTableDescriptor hd = new HTableDescriptor(name);
// 创建列簇 并和表的描述器进行关联
HColumnDescriptor family = new HColumnDescriptor("info01");
hd.addFamily(family);
// 创建表
admin.createTable(hd);
}
}
// 查看表列表
@Test
public void test3() throws IOException {
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// DDL操作
// 获取ddl的句柄
admin = (HBaseAdmin) conn.getAdmin();
TableName[] tnames = admin.listTableNames();
System.out.println(Arrays.toString(tnames));
}
// 删除表
@Test
public void test4() throws IOException {
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// DDL操作
// 获取ddl的句柄
admin = (HBaseAdmin) conn.getAdmin();
if (admin.tableExists("test2")) {
// 先进行禁用再删除
admin.disableTable("test2");
admin.deleteTable("test2");
} else {
System.out.println("表不存在呀");
}
}
// DML操作
@Test
public void test5() throws IOException {
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
// 数据导入 重点****************
// 插入单条数据 Put对象是封装需要插入的数据,每一条数据都要封装一个普通对象
Put put = new Put("rk001".getBytes());
// 参数1是列簇 参数2 是列 参数3 是值
put.addColumn("info1".getBytes(), "age".getBytes(), "100".getBytes());
table.put(put);
}
// 批量数据导入 list
// 先将插入的数据放在list集合(也就是放在内存中)并没有提交,等放置完成之后一起提交,这种情况有可能出现内存溢出,因为list集合太大的话就Juin占满内存
@Test
public void test6() throws IOException {
long start = System.currentTimeMillis();
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
// 创建list
List<Put> list = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
Put put = new Put(("rk" + i).getBytes());
put.addColumn("info1".getBytes(), "age".getBytes(), ("" + i).getBytes());
list.add(put);
}
table.put(list);
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start));
}
// 利用本地缓存批量数据导入,本地缓存是基于磁盘的,不会占用太多的内存,但是这种方式是没有list集合的方法速度快
@Test
public void test7() throws IOException {
long start = System.currentTimeMillis();
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
// 设置是否需要自动刷新自动提交put对象,默认true,默认一条数据就会提交一次
// 将参数改为false 不会立即提交,达到我们设定的值才会提交
table.setAutoFlushTo(false);
for (int i = 0; i < 10000; i++) {
Put put = new Put(("rk" + i).getBytes());
put.addColumn("info1".getBytes(), "age".getBytes(), ("" + i).getBytes());
// 这时候不会自动提交到hbase了 提交到本地缓存了
table.put(put);
// 如果设置缓存的大小一般就不用设置指定条数提交了,但是这两种方式注意最后提交一次
table.setWriteBufferSize(10 * 1024 * 1024);// 这是设置缓存的大小,
if (i % 3000 == 0) {
table.flushCommits();
}
}
table.flushCommits();
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start));
}
// 数据删除
@Test
public void test8() throws IOException {
long start = System.currentTimeMillis();
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
Delete delete = new Delete("rk1".getBytes());
delete.addColumn("info1".getBytes(), "age".getBytes());
table.delete(delete);
}
// 批量删除
@Test
public void test9() throws IOException {
long start = System.currentTimeMillis();
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
// 创建list
List<Delete> list = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
Delete delete = new Delete("rk1".getBytes());
delete.addColumn("info1".getBytes(), "age".getBytes());
list.add(delete);
}
table.delete(list);
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start));
}
// 查询
@Test
public void test10() throws IOException {
long start = System.currentTimeMillis();
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
// 指定的行键进行查询
Get get = new Get("rk9977".getBytes());
// get.addColumn(family, qualifier)//也可以指定列簇和列
// result是封装的get查询的结果 里边可能包含多个列簇 列 单元格
Result result = table.get(get);
// 获取一条结果集的所有的单元格
List<Cell> listCells = result.listCells();
for (Cell cell : listCells) {
System.out.print(new String(cell.getRow()) + "\t");
System.out.print(new String(cell.getQualifier()) + "\t");
System.out.print(new String(cell.getFamily()) + "\t");
System.out.print(new String(cell.getValue()) + "\t");
System.out.print(cell.getTimestamp() + "\t");
System.out.println();
}
}
// 批量查询
@Test
public void test11() throws IOException {
long start = System.currentTimeMillis();
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
// 创建list集合
List<Get> list = new ArrayList<>();
// 指定的行键进行查询
for (int i = 100; i < 1010; i++) {
Get get = new Get(("rk" + i).getBytes());
list.add(get);
}
// result是封装的get查询的结果 里边可能包含多个列簇 列 单元格
Result[] results = table.get(list);
for (Result result : results) {
List<Cell> listCells = result.listCells();
for (Cell cell : listCells) {
System.out.print(new String(cell.getRow()) + "\t");
System.out.print(new String(cell.getQualifier()) + "\t");
System.out.print(new String(cell.getFamily()) + "\t");
System.out.print(new String(cell.getValue()) + "\t");
System.out.print(cell.getTimestamp() + "\t");
System.out.println();
}
}
}
// 表扫描
@Test
public void test12() throws IOException {
long start = System.currentTimeMillis();
// 获取Hbase配置文件的对象
// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
Configuration conf = HBaseConfiguration.create();
// 设置conf的zk访问路径
conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
// 创建hbase连接
Connection conn = ConnectionFactory.createConnection(conf);
System.out.println(conn);
// 获取dml的句柄
// 一个Htable对象代表一个表
HTable table = (HTable) conn.getTable(TableName.valueOf("user_info"));
// 封装一个用于插训scan对象
Scan scan = new Scan();
// scan指定行键范围 含头不含尾
scan.setStartRow("baiyc_20150716_0006".trim().getBytes());
scan.setStopRow("user0001".trim().getBytes());
// 设置时间戳的范围 含头不含尾
scan.setTimeRange(1559098923438L, 1559098924997L);
// 设置列簇
scan.addFamily("base_info".getBytes());
// 设置列
scan.addColumn("base_info".getBytes(), "name".getBytes());
ResultScanner scanner = table.getScanner(scan);
// 获取迭代器的对象
Iterator<Result> it = scanner.iterator();
while (it.hasNext()) {
Result result = it.next();
List<Cell> listCells = result.listCells();
for (Cell cell : listCells) {
System.out.print(new String(cell.getRow()) + "\t");
System.out.print(new String(cell.getQualifier()) + "\t");
System.out.print(new String(cell.getFamily()) + "\t");
System.out.print(new String(cell.getValue()) + "\t");
System.out.print(cell.getTimestamp() + "\t");
System.out.println();
}
System.out.println();
}
}
Hbase的Api操作
最新推荐文章于 2024-06-17 21:18:30 发布