HBase Shell可以基于后台访问HBase,本节将介绍如何基于Java API远程访问操作HBase,实现创建表、增加数据合查询数据。以下代码实例基于HBase的完全分布式环境来展开的,具体的环境情况可参考:
[neilian ids=3097]
代码演示
我们新建一个maven项目,在pom.xml中添加如下依赖:
org.apache.hbase hbase-client 2.4.2 org.apache.hbase hbase-server 2.4.2
新建测试类如下:

程序员导航
优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站
package com.panizye; 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.TableName; import org.apache.hadoop.hbase.client.*; 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; /** *hbase
* * @author panziye * @description * @date 2021-04-29 13:09 **/ public class HBaseDemo { //核心配置-管理Hbase的配置信息 private static Configuration conf = null; //连接-管理Hbase连接 private static Connection conn = null; //管理员-管理Hbase数据库的信息 private static Admin admin = null; //表对象 private static Table table = null; //我们这里使用test1表进行演示 private static String tableNameStr = "test1"; //main测试 public static void main(String[] args) { //初始化放在了每次方法执行前 //1.创建表 createTable(); //2.插入数据 put(); //3.获取1 getCell(); //4.获取2 getRow(); //5.获取3 scanTable(); //6.删除行 deleteRow(); //7.删除表 deleteTable(); } //1.初始化 public static void init(){ System.out.println("---------------初始化 START-----------------"); //配置文件 Configuration conf= HBaseConfiguration.create(); //设置zk集群 //务必在本地windows系统的hosts文件中配置ip-主机名映射关系,否则请直接用ip //conf.set("hbase.zookeeper.quorum","192.168.217.100,192.168.217.101,192.168.217.102"); conf.set("hbase.zookeeper.quorum","master,slave1,slave2"); try { //创建连接 conn = ConnectionFactory.createConnection(conf); //获取管理员 admin = conn.getAdmin(); } catch (IOException e) { e.printStackTrace(); } System.out.println("---------------初始化 END-----------------"); } //2.关闭 public static void close(){ System.out.println("---------------关闭 START-----------------"); try { if(table != null){ table.close(); } if(admin != null){ admin.close(); } if(conn != null){ conn.close(); } } catch (IOException e) { e.printStackTrace(); } System.out.println("---------------关闭 END-----------------"); } //3.创建表 public static void createTable(){ init(); System.out.println("---------------创建表 START-----------------"); //表名 TableName tableName = TableName.valueOf(tableNameStr); //列族-多个用数组循环 String[] columnFamilies = {"cf1","cf2"}; try { //添加表描述 if(admin.tableExists(tableName)){ System.out.println("该表已存在...."); }else { TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName); for(String columnFamily:columnFamilies){ builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(columnFamily)); } admin.createTable(builder.build()); System.out.println("表创建成功....."); } } catch (IOException e) { e.printStackTrace(); }finally { close(); } System.out.println("---------------创建表 END-----------------"); } //4.插入数据 public static void put(){ init(); System.out.println("---------------插入数据 START-----------------"); try { // 取得一个数据表对象 table = conn.getTable(TableName.valueOf(tableNameStr)); // 需要插入数据库的数据集合 ListputList = new ArrayList (); Put put; // 生成数据集合 for(int i = 0; i < 3; i++){ //Row Key String rowKey = "row" + i; put = new Put(Bytes.toBytes(rowKey)); //列族 String columnFamily = "cf1"; //列 String cloumn = "name"; //数据 String cell = "panziye"+i; put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(cloumn), Bytes.toBytes(cell)); //存入集合 putList.add(put); } //插入数据 table.put(putList); } catch (IOException e) { e.printStackTrace(); }finally { close(); } System.out.println("---------------插入数据 END-----------------"); } //5.获取数据-根据row key、columnFamily、column 读取 public static String getCell(){ init(); System.out.println("---------------读取1 START-----------------"); String value = null; try { // 取得一个数据表对象 table = conn.getTable(TableName.valueOf(tableNameStr)); //Row Key String rowKey = "row1"; Get get = new Get(Bytes.toBytes(rowKey)); //columnFamily列族 String columnFamily = "cf1"; //column列 String column = "name"; get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column)); //获取 Result result = table.get(get); List cells = result.listCells(); if (cells !=null && !cells.isEmpty()) { //这里我们打印全部 for(Cell cell:cells){ String v = new String(CellUtil.cloneValue(cell), "UTF-8"); System.out.println("value==="+v); } //一般我们如果只拿最新数据直接获取cells.get(0)的值即可 value = new String(CellUtil.cloneValue(cells.get(0)), "UTF-8"); } } catch (IOException e) { e.printStackTrace(); }finally { close(); } System.out.println("---------------读取1 END-----------------"); return value; } //5.获取数据-根据rowkey 获取一行 public static Map | getRow(){ init(); System.out.println("---------------读取2 START-----------------"); Map map = null; try { // 取得一个数据表对象 table = conn.getTable(TableName.valueOf(tableNameStr)); //Row Key String rowKey = "row1"; Get get = new Get(Bytes.toBytes(rowKey)); //获取 Result result = table.get(get); List cells = result.listCells(); map = new HashMap | (); if (cells !=null && !cells.isEmpty()) { for(Cell cell:cells){ String qualifier = new String(CellUtil.cloneQualifier(cell)); String value = new String(CellUtil.cloneValue(cell), "UTF-8"); map.put(qualifier,value); System.out.println("map==="+map); } } } catch (IOException e) { e.printStackTrace(); }finally { close(); } System.out.println("---------------读取2 END-----------------"); return map; } //5.获取数据-扫描全表的内容 public static List
执行结果如下:
---------------初始化 START-----------------
log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
---------------初始化 END-----------------
---------------创建表 START-----------------
表创建成功.....
---------------关闭 START-----------------
---------------关闭 END-----------------
---------------创建表 END-----------------
---------------初始化 START-----------------
---------------初始化 END-----------------
---------------插入数据 START-----------------
---------------关闭 START-----------------
---------------关闭 END-----------------
---------------插入数据 END-----------------
---------------初始化 START-----------------
---------------初始化 END-----------------
---------------读取1 START-----------------
value===panziye1
---------------关闭 START-----------------
---------------关闭 END-----------------
---------------读取1 END-----------------
---------------初始化 START-----------------
---------------初始化 END-----------------
---------------读取2 START-----------------
map==={name=panziye1}
---------------关闭 START-----------------
---------------关闭 END-----------------
---------------读取2 END-----------------
---------------初始化 START-----------------
---------------初始化 END-----------------
---------------读取3 START-----------------
list=======[{name=panziye0}, {name=panziye1}, {name=panziye2}]
---------------关闭 START-----------------
---------------关闭 END-----------------
---------------读取3 END-----------------
---------------初始化 START-----------------
---------------初始化 END-----------------
---------------删除行 START-----------------
---------------关闭 START-----------------
---------------关闭 END-----------------
---------------删除行 END-----------------
---------------初始化 START-----------------
---------------初始化 END-----------------
---------------删除表 START-----------------
---------------关闭 START-----------------
---------------关闭 END-----------------
---------------删除表 END-----------------
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...