Hbase的Shell客户端和Java客户端入门

Hbase的shell客户端操作

Group name: general 一般的命令

processlist : 进程列表
在这里插入图片描述

status : 集群状态

在这里插入图片描述

table_help : 表的帮助(X)

version : hbase的版本

在这里插入图片描述

whoami : 当前用户是谁
在这里插入图片描述

Group name: ddl 数据定义语言

  1. alter : 修改表结构(列族 列族属性 多个列族)
  1. 修改列族属性

在这里插入图片描述
2) 添加列族

在这里插入图片描述
3) 删除列族

在这里插入图片描述

  1. create, 建表 预分region

在这里插入图片描述

  1. describe, 表信息

在这里插入图片描述

  1. disable, 禁用 disable_all, 禁用多张表

在这里插入图片描述
2. is_disabled, 是否是禁用

在这里插入图片描述
3. enable, 启用表 enable_all 启用多张表

在这里插入图片描述
4. is_enabled, 是否是启用

在这里插入图片描述
5. drop, 删除表 drop_all, 删除多张表 disable_all ‘tb.’ — drop_all 'tb.’(先禁用再删除)

在这里插入图片描述
(因为只禁用了两张表所以有一个表没有成功删除)
6. list_regions, 列出一个表的所有region

在这里插入图片描述

  1. locate_region, 某行(行键)在哪个region

在这里插入图片描述
在这里插入图片描述

Group name: namespace 等同于mysql中的数据库(database)

  1. list_namespace 查看系统中有几个命名空间

在这里插入图片描述

  1. list_namespace_tables 查看指定命名空间的表

在这里插入图片描述

  1. create_namespace 创建一个命名空间 带表

create_namespace ‘doit_199’
在这里插入图片描述

  1. drop_namespace [命名空间必须为空]

  2. describe_namespace 查看命名空间的信息

  3. alter_namespace 修改命名空间的属性 set 为增加属性 unset 为删除属性

在这里插入图片描述
在这里插入图片描述

Group name: dml 数据管理语言

  1. put 插入数据 表名 行键 列族:属性 值

在这里插入图片描述

  1. scan 全表扫描数据

在这里插入图片描述

  1. get 获得行下的列族下的属性(单元格)

在这里插入图片描述

  1. delete 删除一个单元格

在这里插入图片描述

  1. deleteall 删除一行

在这里插入图片描述

  1. count 统计行数

在这里插入图片描述

  1. append 向已经有值的属性后面追加内容

在这里插入图片描述

  1. incr 计数器 累计计数

在这里插入图片描述

  1. get_counter 获取计数器的值

在这里插入图片描述

  1. get_splits 获得一张表的region分割点

在这里插入图片描述

  1. truncate 清空表中的数据

在这里插入图片描述
Group name: tools 工具

  1. flush 刷写数据

在这里插入图片描述
在这里插入图片描述

  1. hbase hfile -p -f hdfs特殊的结构路径

在这里插入图片描述

  1. 手动切分region
    在这里插入图片描述
为什么要建立预分region表

在表还没有数据前预分了region表 解决了并发插入问题 如果只有一台机器同时插入大量数据可能会造成该机器内存溢出或者资源不够 导致宕机
把表拆分成多个region后在插入数据的时候插入请求就会被不同的机器接收从而解决了并发插入的热点问题。

Hbase的java客户端操作

创建Maven项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>hbase</artifactId>
    <version>1.0-SNAPSHOT</version>

    <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.1.1</version>
        </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.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.1.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>
                    <!-- get all project dependencies -->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <!-- MainClass in mainfest make a executable jar -->
                    <archive>
                        <manifest>
                            <!--<mainClass>util.Microseer</mainClass> -->
                        </manifest>
                    </archive>
                </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>
</project>
获取客户端连接核心对象
  1. HBaseConfiguration.create();配置对象
  2. conf.set(“hbase.zookeeper.quorum”, “linux01:2181,linux02:2181,linux03:2181”);设置参数 zookeeper的位置
  3. ConnectionFactory.createConnection(conf);获取连接对象
  4. conn.getTable(TableName.valueOf(“tb_b”)); hbase的表对象
  5. conn.getAdmin();获取Hbase的管理对象
package hbase.util;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Table;

import java.io.IOException;

public class Hbase_Utils {

    public static Admin getAdmin() throws IOException {
        /**
         * 获取Hbase的管理对象
         *   DDL    Tools 有关的操作在  admin对象中
         *   Tools
         * @return
         * @throws IOException
         */
        Connection conn = Hbase_Utils.getHbaseConnection();
        Admin admin = conn.getAdmin();
        return admin;
    }

    public static Table getTable() throws IOException {
        /**
         * 获取表对象
         * @param name
         * @return
         * @throws Exception
         */
        Connection conn = Hbase_Utils.getHbaseConnection();
        Table tbname = conn.getTable(TableName.valueOf("name"));
        return tbname;
    }

    public static Connection getHbaseConnection() throws IOException {
        /**
         * 获取Hbase的连接对象
         * @return
         * @throws IOException
         */
        Configuration conf= HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum" , "linux01:2181,linux02:2181,linux03:2181");
        Connection conn = ConnectionFactory.createConnection(conf);
        return conn;
    }


}
Java客户端查看所有表的名称
package hbase.client;

import hbase.util.Hbase_Utils;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;

import java.io.IOException;


public class Client02 {
    public static void main(String[] args) throws Exception {
        listTableByNameSpace();
    }

    private static void listTableByNameSpace() throws IOException {
        Admin admin = Hbase_Utils.getAdmin();
        // admin.listTableNames();  // 获取系统中所有的表
        // 获取指定namesapce中所有的表
        TableName[] tableNames = admin.listTableNamesByNamespace("default");
        for (TableName tableName : tableNames) {
            byte[] name = tableName.getName();
            byte[] namespace = tableName.getNamespace();
            byte[] qualifier = tableName.getQualifier();
            System.out.println(new String(name));
            System.out.println(new String(namespace));
            System.out.println(new String(qualifier));
        }
        admin.close();
    }
}

Hbase的Java客户端建表预分region
Hbase在建表的时候指定表名和至少一个列族
package hbase.client;

import hbase.util.Hbase_Utils;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.util.ArrayList;
import java.util.List;

public class Hbase_CreateTableWithRegion {
    /**
     * 创建一个表带有三个列族  并有3个region分区
     预分region表 对表的数据进行合理的规划将数据存储再不同的region/上 避免插入热点
     参数一:表的描述器
     参数二:预分region的 splitkey
     */
    public static void main(String[] args) throws Exception{
        //获得一个hbase的管理对象
        Admin admin = Hbase_Utils.getAdmin();
        //表的构建器
        TableDescriptorBuilder tb_region = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_region"));
        //列族的构建器
        ColumnFamilyDescriptorBuilder cf1builder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf1"));
        ColumnFamilyDescriptorBuilder cf2builder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf2"));
        ColumnFamilyDescriptorBuilder cf3builder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf3"));
        //列族的描述器
        ColumnFamilyDescriptor cf1 = cf1builder.build();
        ColumnFamilyDescriptor cf2 = cf2builder.build();
        ColumnFamilyDescriptor cf3 = cf3builder.build();
        List<ColumnFamilyDescriptor> ls=new ArrayList<>();
        ls.add(cf1);
        ls.add(cf2);
        ls.add(cf3);
        tb_region.setColumnFamilies(ls);
        //表的描述器
        TableDescriptor build = tb_region.build();
        //获取预分 region的splitkey
        byte[][] splitKey = new byte[][]{"a".getBytes(),"e".getBytes()};
        admin.createTable(build,splitKey);
        admin.close();
    }
}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值