通过Java API的方式对hbase进行简单的创表、插入数据、查表、查数据等操作

一、
1.1 通过Java API 方式开发hbase,需要构建一个Maven工程,所用到的依赖也是比较简单的,如下:
在这里插入图片描述本次开发所用到的依赖包。

1.2 因为对hbase的连接是采用.xml文件的方式进行连接,所以要从Linux中将core-site.xml和hbase-stie.xml两个文件复制到main文件夹下的resources文件当中,如下图:
在这里插入图片描述

    //初始化Configuration对象
    Configuration conf = null;

    @Before
    //每次执行一个单元测试,都会执行这个先
    //初始化添加配置信息
    public void init() throws URISyntaxException {
            conf = HBaseConfiguration.create();
            conf.addResource(new Path(ClassLoader.getSystemResource("hbase-site.xml").toURI()));
            conf.addResource(new Path(ClassLoader.getSystemResource("core-site.xml").toURI()));
        }

1、创建表操作

@Test
   //创建表
   public void createTable() throws IOException {
        //连接hbase
       Connection conn = ConnectionFactory.createConnection(conf);
       //相当于管理者(admin)的意思,对表进行增删改查
       Admin admin = conn.getAdmin();

       //因为创建一张表是要有关于“表名”的描述对象,和“列族”的描述对象

       //1.1取一个表名
       TableName tableName = TableName.valueOf("t_user.info");
       //1.2 创建表的描述对象
       HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);

       //2.1 取第一个列族的名字
       HColumnDescriptor cf1 = new HColumnDescriptor("base_info");
       //2.2 取第二个列族的名字
       HColumnDescriptor cf2 = new HColumnDescriptor("extra_info");

       //为列族设置版本数量,最小为1,最大为3
       cf1.setVersions(1,3);
       cf2.setVersions(1,3);

       //将列族的描述对象添加到表的描述对象中,至此创建一张表的描述对象结束
       HTableDescriptor hTable = tableDescriptor.addFamily(cf1).addFamily(cf2);
       //开始创表
       if (admin.tableExists(tableName)){
           System.out.println("此表已经存在");
       }else {
           admin.createTable(hTable);
           System.out.println(tableName+ ":创建成功!");
       }

   }

2.插入数据

 @Test
   //插入数据---->利用ArrayList集合方式
   public void putDataVersion_1() throws IOException {
       Connection conn = ConnectionFactory.createConnection();
       Admin admin = conn.getAdmin();

       TableName tableName = TableName.valueOf("t_user.info");
       //创建一个集合,用来保存添加的数据,最后通过保存好的集合,一次性将数据插入到表中
       ArrayList<Put> puts = new ArrayList<>();
       Table table = conn.getTable(tableName);
       if (admin.tableExists(tableName)){
           //设置row key 为user001
           Put user001 = new Put(Bytes.toBytes("user001"));
           //往列族"base_info"中添加两列数据
           user001.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("username"),Bytes.toBytes("zhangman"));
           user001.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("password"),Bytes.toBytes("123456"));


           //设置row key 为user002
           Put user002 = new Put(Bytes.toBytes("user002"));

           //往列族"base_info"中添加两列数据
           user002.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes("username"),Bytes.toBytes("lisi"));
           user002.addColumn(Bytes.toBytes("base_info"),Bytes.toBytes(" married"),Bytes.toBytes("false"));


           //往集合中添加数据
           puts.add(user001);
           puts.add(user002);

           //将集合中的数据添加到table中
           table.put(puts);

           System.out.println("数据添加成功");

           //关闭
           table.close();
           conn.close();

       }else {
           System.out.println("您所要添加的数据表不存在Hbase中,请先创建表!");
       }


   }

3.查看数据库中的表

   @Test
    //查看数据库中数据表
    public void list() throws IOException {
       Connection conn = ConnectionFactory.createConnection();
       Admin admin = conn.getAdmin();
       System.out.println("数据库中已存在的表如下 :");
       for (TableName table: admin.listTableNames()){

           System.out.println(table);
       }
       conn.close();

   }

4.扫描数据

 @Test
    //扫描数据
    public void scanData() throws IOException {
       Connection conn = ConnectionFactory.createConnection();
       Admin admin = conn.getAdmin();
        //拿到table的名字
       TableName tableName = TableName.valueOf("t_user.info");

       //拿到table对象
       Table table = conn.getTable(tableName);

       //获取scan对象
       Scan scan = new Scan();

       //获取scanner对象
       ResultScanner scanner = table.getScanner(scan);

       //使用迭代器遍历
       Iterator<Result> iterator = scanner.iterator();
       while (iterator.hasNext()){
           Result next = iterator.next();
           List<Cell> cells = next.listCells();

           //迭代所有的cells
           for (Cell c:cells){
//               //获取行键
//               byte[] rowArray = c.getRowArray();
//               //获取列族
//               byte[] familyArray = c.getFamilyArray();
//               //获取列限定符
//               byte[] qualifierArray = c.getQualifierArray();
//               //获取列值
//               byte[] valueArray = c.getValueArray();

               //打印输出
               System.out.println("行键:"+ Bytes.toString(CellUtil.cloneRow(c)));
               System.out.print("列族:"+ Bytes.toString(CellUtil.cloneFamily(c)));
               System.out.print(" 列:"+ Bytes.toString(CellUtil.cloneQualifier(c)));
               System.out.println(" 值:"+ Bytes.toString(CellUtil.cloneValue(c)));
           }
           System.out.println("------------------");
       }

       //关闭资源避免浪费
       table.close();
       conn.close();

   }

以上便是初步学习的记录过程,往能够给看此篇播客的网友提供一些思考。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐