ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

HBase2.4.8详细教程(三)Java操作HBase

2021-12-14 22:03:18  阅读:233  来源: 互联网

标签:f2 Java Bytes getBytes cell HBase2.4 toBytes HBase addColumn


在idea中建立Maven Java项目。
在pom.xml中引入对应版本的HBase依赖:

  <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.4.8</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase</artifactId>
            <version>2.4.8</version>
            <type>pom</type>
        </dependency>
    </dependencies>

Java代码,详见代码及注释即可。

package com.alan;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class TestHBase {
    private static Configuration conf = HBaseConfiguration.create();
    private static Admin admin;
    private static Connection connection = null;

    static {
        //HBase Master地址,在hbase-site.xml中配置
        conf.set("hbase.rootdir", "hdfs://hp301:9000/hbase");
        //ZooKeeper三个服务器地址
        conf.set("hbase.zookeeper.quorum", "hp301,hp302,hp303");

        try {
            connection = ConnectionFactory.createConnection(conf);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        TestHBase test = new TestHBase();
        // test.createTable("java_test");//建表
        //test.createTable2("java_test","f1","f2");//建表(制定行键)
        //test.addData("java_test");//插入数据
        //test.insertBatchData("test");//插入多个数据
        //test.getData("java_test");//通过Get查找单行数据,注意列值的类型
        test.scanAllData("java_test");//通过Scan方法扫描全表
        // test.deleteData("java_test");//删除表数据
        //test.deleteTable("java_test");//删除表
        admin.close();
        connection.close();
    }


    public void createTable2(String tableName, String... columnFamily) {

        TableName tableNameObj = TableName.valueOf(tableName);
        try {
            if (admin.tableExists(tableNameObj)) {
                System.out.println("Table: " + tableName + " already exists!");
            } else {
                HTableDescriptor tb = new HTableDescriptor(tableNameObj);
                for (int i = 0; i < columnFamily.length; i++) {
                    HColumnDescriptor family = new HColumnDescriptor(columnFamily[i]);
                    tb.addFamily(family);
                }
                admin.createTable(tb);
                System.out.println(tableName + "创建表成功");
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println(tableName + "创建表失败");
        }
    }


    public void createTable(String tableName) throws IOException {

        //通过管理员对象创建表
        HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
        //给表添加列族
        HColumnDescriptor f1 = new HColumnDescriptor("f1");
        HColumnDescriptor f2 = new HColumnDescriptor("f2");
        //将两个列族设置到 创建的表中
        hTableDescriptor.addFamily(f1);
        hTableDescriptor.addFamily(f2);
        //创建表
        admin.createTable(hTableDescriptor);
        //关闭连接
        admin.close();
        connection.close();
        System.out.println("创建表成功");
    }

    public void addData(String tableName) throws IOException {

        //获取表对象
        Table myuser = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put("0001".getBytes());
        put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
        put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小明"));
        put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22));
        put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男"));
        put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("青岛"));
        put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000001"));
        put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("你好"));
        myuser.put(put);
        //关闭表
        myuser.close();
        System.out.println("插入数据成功");
    }

    public void insertBatchData(String tableName) throws IOException {

        //获取表
        Table myuser = connection.getTable(TableName.valueOf(tableName));
        //创建put对象,并指定rowkey
        Put put = new Put("0002".getBytes());
        put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
        put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小红"));
        put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(21));
        put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("女"));
        put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("济南"));
        put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000002"));
        put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("Hello!"));

        Put put2 = new Put("0003".getBytes());
        put2.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(2));
        put2.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小强"));
        put2.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22));
        put2.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男"));
        put2.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("北京"));
        put2.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000003"));
        put2.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("俺北京……"));

        Put put3 = new Put("0004".getBytes());
        put3.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(4));
        put3.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小花"));
        put3.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(23));
        put3.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("女"));
        put3.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("重庆"));
        put3.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000004"));
        put3.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("要得"));

        Put put4 = new Put("0005".getBytes());
        put4.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(5));
        put4.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小杰"));
        put4.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(24));
        put4.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男"));
        put4.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("上海"));
        put4.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000005"));
        put4.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("阿拉桑海人"));

        Put put5 = new Put("0006".getBytes());
        put5.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(6));
        put5.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小雨"));
        put5.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22));
        put5.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("女"));
        put5.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("广东"));
        put5.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000006"));
        put5.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("洒洒水"));

        Put put6 = new Put("0007".getBytes());
        put6.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(7));
        put6.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小瓜"));
        put6.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22));
        put6.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男"));
        put6.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("江苏"));
        put6.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000007"));
        put6.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("我是苏南的"));

        List<Put> listPut = new ArrayList<Put>();
        listPut.add(put);
        listPut.add(put2);
        listPut.add(put3);
        listPut.add(put4);
        listPut.add(put5);
        listPut.add(put6);

        myuser.put(listPut);
        myuser.close();
        System.out.println("插入多个数据成功");
    }


    public void getData(String tableName) throws IOException {


        //获取表对象
        Table myuser = connection.getTable(TableName.valueOf(tableName));
        Get get = new Get("0005".getBytes());
        get.addColumn("f2".getBytes(), "address".getBytes());//列族;列名

        //获取返回结果
        Result result = myuser.get(get);
        List<Cell> cells = result.listCells();
        for (Cell cell : cells) {
            //获取列族的名称
            String familyName = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
            //获取列的名称
            String columnName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
            if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
                int value = Bytes.toInt(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value);
            } else {
                String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value);
            }
        }
        //关闭表
        myuser.close();
    }

    public void scanAllData(String tableName) throws IOException {

        //获取表对象
        Table myuser = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        //设置起始和结束的rowkey,扫描结果是:[)类型
        scan.setStartRow("0001".getBytes());
        scan.setStopRow("0008".getBytes());
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            List<Cell> cells = result.listCells();
            for (Cell cell : cells) {
                String rowkey = Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
                //获取列族的名称
                String familyName = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
                //获取列的名称
                String columnName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
                if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) {
                    int value = Bytes.toInt(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                    System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value);
                } else {
                    String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                    System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value);
                }
            }
        }
        //获取返回结果
        myuser.close();
    }

    public void deleteData(String talbeName) throws IOException {

        //获取表对象
        Table myuser = connection.getTable(TableName.valueOf(talbeName));

        Delete delete = new Delete("0001".getBytes());
        myuser.delete(delete);

        myuser.close();

        System.out.println("删除成功");
    }

    public void deleteTable(String tableName) throws IOException {

        //获取管理员对象
        Admin admin = connection.getAdmin();
        //禁用表
        admin.disableTable(TableName.valueOf(tableName));
        //删除表
        admin.deleteTable(TableName.valueOf(tableName));
        System.out.println("删除表成功");
    }
}

运行查询代码,控制台中输出:
在这里插入图片描述

标签:f2,Java,Bytes,getBytes,cell,HBase2.4,toBytes,HBase,addColumn
来源: https://blog.csdn.net/GodBlessYouAndMe/article/details/121923142

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有