大数据之hbase_hbase的java客户端基础操作

首先创建一个maven项目,然后导入以下依赖:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-auth</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>2.2.5</version>
        </dependency>
        <!-- 使用mr程序操作hbase 数据的导入 -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-mapreduce</artifactId>
            <version>2.2.5</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
        <!-- phoenix 凤凰 用来整合Hbase的工具 -->
        <dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-core</artifactId>
            <version>5.0.0-HBase-2.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <!-- bind to the packaging phase -->
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

1.hbase与java客户端的连接

/**
 *hbase的java客户端连接操作
 */
public class HbaseDemo {
    public static void main(String[] args) throws Exception {
        //创建配置对象
        Configuration conf = HBaseConfiguration.create();
        //配置zookeeper的连接对象,因为zookeeper存储了所有的hbase的储存信息,所以可以通过zookeeper操作hbase
        conf.set("hbase.zookeeper.quorum","linux01:2181,linux02:2181,linux03:2181");
        //获取hbase的连接对象
        Connection conn = ConnectionFactory.createConnection(conf);
        //获取用户对象,可获得一系列对表和名称空间进行操作的方法
        Admin admin = conn.getAdmin();
        //获取表名对象
        TableName[] tableNames = admin.listTableNames();
        for (TableName tableName : tableNames) {
            //可直接打印表名对象
            //System.out.println(tableName);
            //也可以通过表名对象将表名转换成字符串
            String tbname = tableName.getNameAsString();
            //通过表名对象获取它所在的名称空间名
            String namespace = tableName.getNamespaceAsString();
            System.out.println(namespace+"-"+tbname);
        }
        //获取表的对象,给他一个表名,返回一个该表的对象,可以对这个表内的数据进行操作
        Table tb = conn.getTable(TableName.valueOf("tb_user2"));
        tb.close();
        admin.close();
        conn.close();
    }
}

2.将获取连接对象的方法封装起来方便调用

public class HbaseUtils {
    /**
     * 封装获取连接对象的方法
     * @return
     */
    public static Connection getConnection(){
        //创建配置对象
    Configuration conf = HBaseConfiguration.create();
    //配置zookeeper的连接对象,因为zookeeper存储了所有的hbase的储存信息,所以可以通过zookeeper操作hbase
        conf.set("hbase.zookeeper.quorum","linux01:2181,linux02:2181,linux03:2181");
    //获取hbase的连接对象
        Connection conn = null;
        try {
            conn = ConnectionFactory.createConnection(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

3.创建名称空间的方法

 /**
     *创建名称空间的方法
     * @throws IOException
     */
    public static void createNamespace() throws IOException {
        //获取连接对象
        Connection conn = HbaseUtils.getConnection();
        //获取用户对象
        Admin admin = conn.getAdmin();
        //获取namespace的对象
        NamespaceDescriptor doit = admin.getNamespaceDescriptor("doit");
        //判断该名称空间是否存在,存在就先删除了再创建
        if (doit!=null){
            //删除名称空间需要先删除它里面的表,通过名称空间获取表的对象
            TableName[] doits = admin.listTableNamesByNamespace("doit");
            for (TableName tableName : doits) {
                //遍历表,先禁用表,然后才能删除表
                admin.disableTable(tableName);
                admin.deleteTable(tableName);
            }
            //删除名称空间
            admin.deleteNamespace("doit");
        }
        //doit不存在,就创建一个doit,创建时,需要先获取名称空间的构建器,
        NamespaceDescriptor.Builder doit1 = NamespaceDescriptor.create("doit");
        //使用map集合给doit赋予属性
        Map<String,String> map = new HashMap<>();
        map.put("author","bo");
        map.put("createTime",System.currentTimeMillis()+"");
        doit1.addConfiguration(map);
        //获取创建名称空间的对象NamespaceDescriptor
        NamespaceDescriptor namespaceDescriptor = doit1.build();
        //创建名称空间
        admin.createNamespace(namespaceDescriptor);
        admin.close();
        conn.close();
    }

4.创建表的方法

  /**
     * 创建表的方法
     * @throws IOException
     */
    public static void createTable() throws IOException {
        Connection conn = HbaseUtils.getConnection();
        Admin admin = conn.getAdmin();
        //获取表的构建器
        TableDescriptorBuilder tb_javaBuider = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_java"));
        //创建表需要列族,获取列祖的构建器
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes());
        //可以使用列族构建器给列族赋予属性,Versions最大版本为3个,数据有效时间为1小时
        columnFamilyDescriptorBuilder.setMaxVersions(3);
        columnFamilyDescriptorBuilder.setTimeToLive(60*60);
        ColumnFamilyDescriptor cf1 = columnFamilyDescriptorBuilder.build();
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder2 = ColumnFamilyDescriptorBuilder.newBuilder("cf2".getBytes());
        ColumnFamilyDescriptor cf2 = columnFamilyDescriptorBuilder2.build();
        //将列族对象放入list集合中
        List<ColumnFamilyDescriptor> list = new ArrayList<>();
        list.add(cf1);
        list.add(cf2);
        //再将列族构建器set给表
        tb_javaBuider.setColumnFamilies(list);
        TableDescriptor build = tb_javaBuider.build();
        //创建表
        admin.createTable(build);
        admin.close();
        conn.close();
    }

5.创建预分region表的方法

    /**
     * 创建预分region表的方法
     * @throws IOException
     */
    public static void createRegionTable() throws IOException {
        //获取连接对象
        Connection connection = HbaseUtils.getConnection();
        Admin admin = connection.getAdmin();
        //创建一个表的构建器
        TableDescriptorBuilder tb_regionBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_region"));
        //创建一个装列族的集合
        ArrayList<ColumnFamilyDescriptor> cf = new ArrayList<>();
        //通过列祖构建器,创建两个列族
        ColumnFamilyDescriptor cf1 = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes()).build();
        ColumnFamilyDescriptor cf2 = ColumnFamilyDescriptorBuilder.newBuilder("cf2".getBytes()).build();
        //将列族放入集合中,并给到表的构建器
        cf.add(cf1);
        cf.add(cf2);
        tb_regionBuilder.setColumnFamilies(cf);
        //将构建器转为表的描述对象
        TableDescriptor build = tb_regionBuilder.build();
        //创建一个二维数组,设置三个切分点
        byte[][] bytes = new byte[][]{"a3".getBytes(),"a5".getBytes(),"a8".getBytes()};
        admin.createTable(build,bytes);
        admin.close();
        connection.close();
    }

6.增加列族的方法

 /**
     * 增加列族的方法
     * @throws IOException
     */
    public static void addColumnFamily() throws IOException {
        //获取连接对象
        Connection connection = HbaseUtils.getConnection();
        Admin admin = connection.getAdmin();
        //创建一个列族描述器
        ColumnFamilyDescriptor cf3 = ColumnFamilyDescriptorBuilder.newBuilder("cf3".getBytes()).build();
        //添加列族的方法
        admin.addColumnFamilyAsync(TableName.valueOf("tb_region"),cf3);
        admin.close();
        connection.close();
    }

7.修改列族属性的方法

    /**
     * 修改列族属性的方法
     * @throws IOException
     */
    public static void modifyColumnFamily() throws IOException {
        //获取连接对象
        Connection connection = HbaseUtils.getConnection();
        Admin admin = connection.getAdmin();
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder("cf3".getBytes());
        columnFamilyDescriptorBuilder.setMaxVersions(5);
        columnFamilyDescriptorBuilder.setTimeToLive(60*60*24*7);
        ColumnFamilyDescriptor cf3 = columnFamilyDescriptorBuilder.build();
        //修改列族属性的方法
        admin.modifyColumnFamily(TableName.valueOf("tb_region"),cf3);
    }```

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值