HBASE-java客户端

1. 添加依赖pom.xml

<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>

2. 案例

2.1  创建名称空间

        Connection connection = HbaseUtils.getConnection();
        //获取Admin
        Admin admin = connection.getAdmin();
        //doit17已存在,删除名称空间及其下的表
        NamespaceDescriptor doit17 = admin.getNamespaceDescriptor("doit17");
        if(doit17!=null){
            //遍历名称空间下的表
            TableName[] doit17s = admin.listTableNamesByNamespace("doit17");
            for (TableName tableName : doit17s) {
                //禁用表
                admin.disableTable(tableName);
                //删除表
                admin.deleteTable(tableName);
            }
            //随后删除该名称空间
            admin.deleteNamespace("doit17");
        }
        //获取名称空间构建器
        NamespaceDescriptor.Builder builder = NamespaceDescriptor.create("doit17");
        //构建名称空间之前可以设置一些属性--->放在Map集合中
        Map<String,String> map = new HashMap<>();
        //设置属性author
        map.put("author","astra");
        //设置创建时间
        builder.addConfiguration("createTime",System.currentTimeMillis()+"");
        builder.addConfiguration(map);
        //构建名称空间
        NamespaceDescriptor nd = builder.build();
        admin.createNamespace(nd);

        connection.close();

2.2 创建HbaseUtils--获取Connection对象

public class HbaseUtils {
    public static Connection getConnection() throws Exception {
        //获取配置对象
        Configuration conf = HBaseConfiguration.create();
        //设置hbase位置,主机名和端口号
        conf.set("hbase.zookeeper.quorum","linux01:2181,linux02:2181,linux03:2181");
        //获取连接对象
        Connection connection = ConnectionFactory.createConnection(conf);
        return connection;
    }
}

2.3 列出所有的表

        //获取ZooKeeper的连接对象
        //1. 创建配置对象
        Configuration conf = HBaseConfiguration.create();
        //设置hbase的位置
        conf.set("hbase.zookeeper.quorum","linux01:2181,linux02:2181,linux03:2181");
        //2.获取连接对象
        Connection connection = ConnectionFactory.createConnection(conf);
        Admin admin = connection.getAdmin();
        //列出所有的表---也可以列出指定namespace的表-->admin.listTableNamesByNamespace("namespace");
        //也可以获取所有表的描述对象--->List<TableDescriptor> tableDescriptors = admin.listTableDescriptors();
        //获取所有的表名
        TableName[] tableNames = admin.listTableNames();
        for (TableName tableName : tableNames) {
            //表名转为字符串
            String name = tableName.getNameAsString();
            //获取表所在的命名空间
            String namespace = tableName.getNamespaceAsString();
            //打印
            System.out.println(namespace+"----"+name);
        }

        connection.close();

2.4 判断表是否存在--atrl+alt+m--通过选中的代码创建方法

 public static void isExistTable(Admin admin,String table) throws IOException {
        TableName tb_dml = TableName.valueOf(table);
        boolean b = admin.tableExists(tb_dml);
        System.out.println(b);
    }

2.5 创建表

public static void createTable(Admin admin , String table) throws IOException {
        //创建表---注意需要创建列族
        TableDescriptorBuilder demo3Builder = TableDescriptorBuilder.newBuilder(TableName.valueOf(table));
        //创建列族--多个列族
        //创建第一个列族
        ColumnFamilyDescriptorBuilder cf1Builder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf1"));
        cf1Builder.setMaxVersions(3);
        ColumnFamilyDescriptor cf1 = cf1Builder.build();
        //创建第二个列族
        ColumnFamilyDescriptorBuilder cf2Builder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf2"));
        cf1Builder.setMaxVersions(3);
        ColumnFamilyDescriptor cf2 = cf2Builder.build();
        //将连个列族添加进集合
        List<ColumnFamilyDescriptor> cfList = new ArrayList();
        cfList.add(cf1);
        cfList.add(cf2);

        demo3Builder.setColumnFamilies(cfList);
        TableDescriptor tb_demo3 = demo3Builder.build();
        admin.createTable(tb_demo3);
    }

2.6 删除表

public static void deleteTable(Admin admin,String table) throws IOException {
        admin.disableTable(TableName.valueOf("table"));
        admin.deleteTable(TableName.valueOf("table"));
    }