首页 > 其他分享 >HBase_API_(HBaseDDL,对表的api)

HBase_API_(HBaseDDL,对表的api)

时间:2023-09-19 22:33:06浏览次数:36  
标签:对表 tableName String 表格 admin HBaseDDL namespace api IOException

对hbase数据表进行以下操作:

1.创建命名空间

2.判断表是否存在

3.创建表格

4.修改表格

5.删除表格

注意:对表格的操作要调用admin,对数据进行操作调用table(这篇博客没有涉及到)

package com.atguigu;

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

import java.io.IOException;

/**
 *
 */
public class HBaseDDL {

    //声明静态属性
    //引用的方式获取到同一个链接
    public static Connection connection=HBaseConnection.connection;

    /**
     * 创建命名空间
     * @param namespace 命名空间
     */
    public static void createNamespace(String namespace) throws IOException {

        //1.获取admin
        //admin连接是轻量级的,不是线程安全,不推荐池化或者缓存这个连接
        //就是说用到的时候就去获取,用不到就关闭
        Admin admin = connection.getAdmin();

        //2.调用方法创建命名空间
        //填写完整的命名空间描述

        //2.1创建命名空间描述
        NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);

        //2.2给命名空间添加需求
        builder.addConfiguration("user","xiaohuang");

        //2.3使用builder构造出添加物参数的对象完成创建
        //注意:创建命名空间所抛出的问题应该都属于该方法的本身问题,是不应该直接进行IOException抛出的
        try {
            admin.createNamespace(builder.build());
        } catch (IOException e) {
            System.out.println("命名空间已经存在");
//            throw new RuntimeException(e);
            e.printStackTrace();
        }

        //3.记得要关闭admin
        admin.close();

    }

    /**
     * 判断表格是否存在
     * @param namespace 命名空间名称
     * @param tableName 表格名称
     * @return  ture 表示表格存在
     */
    public static boolean isTableExists(String namespace, String tableName) throws IOException {
        //1.获取admin
        Admin admin = connection.getAdmin();

        //2.使用方法判断表格是否存在
        boolean b = false;
        try {
            b = admin.tableExists(TableName.valueOf(namespace,tableName));
        } catch (IOException e) {
//            throw new RuntimeException(e);
            e.printStackTrace();
        }

        //3.关闭连接再返回!!!!!!!!!!!!!!!!!
        admin.close();


        return b;

    }


    /**
     * 创建表格
     * @param namespace 命名空间名称
     * @param tableName 表格名称
     * @param columnFamilies 列族
     *  String... 表示可变参数,用来接受不确定参数个数的。
     */
    public static  void createTable(String namespace, String tableName, String... columnFamilies) throws IOException {

        //先判断一下是否至少有一个列族
        //如果不加判断,因为是可变参数当参数为0的时候就会再try catch中才知道没有列族创建失败
        if( columnFamilies.length == 0 )
        {
            System.out.println("创建表格至少有一个列族");
            return;
        }

        //判断表格是否存在
        if(isTableExists(namespace,tableName)){
            System.out.println("表格已存在");
            return;
        }

        //1.获取admin
        Admin admin = connection.getAdmin();

        //2.调用方法创建表格
        //2.1创建表格描述
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(namespace,tableName));;

        //2.2添加参数
        for (String columnFamily : columnFamilies){
            //列族建造者
            ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));;

            //添加版本参数
            columnFamilyDescriptorBuilder.setMaxVersions(5);

            //创建添加完整的的表格描述
            tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());

        }

        //创建表格
        try {
            admin.createTable(tableDescriptorBuilder.build());
        } catch (IOException e) {
//            throw new RuntimeException(e);
//            System.out.println("表格已经存在");
            e.printStackTrace();
        }


        //关闭admin
        admin.close();


    }


    /**
     * 修改表格
     * @param namespace 命名空间
     * @param tableName 表格名字
     * @param columnFamily 列族名称
     * @param version 版本
     */
    public static void modifyTable(String namespace, String tableName, String columnFamily, int version) throws IOException {
        //异常处理
        //判断表格是否存在
        if(!isTableExists(namespace,tableName)){
            System.out.println("表格不存在,无法修改");
            return;
        }


        //1.获取admin
        Admin admin = connection.getAdmin();

        //2.调用方法修改表格
        //2.1获取之前的表格描述
        TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(namespace,tableName));

        //2.2创建描述者
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(descriptor);


        //获取之前的列族描述
        ColumnFamilyDescriptor columnFamily1 = descriptor.getColumnFamily(Bytes.toBytes(columnFamily));


        //2.3数据修改
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnFamily1);

        //2.4修改对应版本
        columnFamilyDescriptorBuilder.setMaxVersions(version);

        tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build());


        try {
            admin.modifyTable(tableDescriptorBuilder.build());
        } catch (IOException e) {
//            throw new RuntimeException(e);
            e.printStackTrace();
        }

        admin.close();


    }


    /**
     * 删除表格
     * @param namespace 命名空间名称
     * @param tableName 表格名称
     * @return true 表示删除成功
     * 注意:hbase再删除表格的时候需要先警用表格
     */
    public static boolean deleteTable(String namespace, String tableName) throws IOException {
        //判断表格是否存在
        if(!isTableExists(namespace,tableName)){
            System.out.println("表格不存在,无法删除");
            return false;
        }

        //进行删除表格
        //1.获取admin
        Admin admin = connection.getAdmin();

        //2.调用方法删除表格
        try {
            //注意:要先禁用表格
            admin.disableTable(TableName.valueOf(namespace,tableName));
            admin.deleteTable(TableName.valueOf(namespace,tableName));


        } catch (IOException e) {
//            throw new RuntimeException(e);
            e.printStackTrace();
        }

        //3.关闭admin
        admin.close();

        return true;

    }



    public static void main(String[] args) throws IOException {


        //1.测试创建命名空间
        //要先确定连接是否出现问题,再执行相应的方法如createNamespace方法
//        createNamespace("atguigu");

        //2.判断表格是否存在
//        System.out.println(isTableExists("default", "REQUEST"));


        //3.测试创建表格
//        createTable("atguigu","student","msg");


        //4.修改数据
//        modifyTable("atguigu","student","msg",6);


        //5.删除表格
        deleteTable("atguigu","student");


        System.out.println("--------------");


        //关闭hbase连接!!!!!!!!!!!!
        HBaseConnection.closeConnection();

    }
}

 

标签:对表,tableName,String,表格,admin,HBaseDDL,namespace,api,IOException
From: https://www.cnblogs.com/hmy22466/p/17716027.html

相关文章

  • 【逆向专题】【危!!!刑】(一)使用c#+Win32Api实现进程注入到wechat
    引言自从上篇使用Flaui实现微信自动化之后,这段时间便一直在瞎研究微信这方面,目前破解了Window微信的本地的Sqlite数据库,使用Openssl,以及Win32Api来获取解密密钥,今天作为第一张,先简单写一下,获取微信的一些静态数据,以及将自己写的c语言dll通过Api注入到微信进程里面去,最后......
  • DevOps&Apipost
    DevOps旨在通过自动化流程和改善协作,实现软件开发、测试和交付的一体化,从而提高软件交付的质量和速度。为了提高工作效率,加快软件的交付流程,越来越多企业的选择DevOps工作流程。其中API管理的地位非常重要。随着API数量的大幅增长,也带来了新的API管理需求。如何在DevOps工作......
  • DevOps&Apipost
    DevOps旨在通过自动化流程和改善协作,实现软件开发、测试和交付的一体化,从而提高软件交付的质量和速度。为了提高工作效率,加快软件的交付流程,越来越多企业的选择DevOps工作流程。其中API管理的地位非常重要。随着API数量的大幅增长,也带来了新的API管理需求。如何在DevOps......
  • Python使用pyzabbix调用Zabbix API
    Zabbix是一个开源的提供分布式系统监视以及网络监视功能的解决方案。Zabbix能监视各种网络参数,监控服务器系统的安全运营状况,并提供灵活的通知机制以让服务器管理员快速定位和解决存在的各种问题。在使用Zabbix开始监控服务器后,Zabbix就会采集到服务器的各种网络参数,以及管理员......
  • 在线问诊 Python、FastAPI、Neo4j — 创建 疾病节点
    目录疾病数据创建节点根据检查结果、医生的临床经验得出疾病疾病数据disease_data.csv建议值用“”引起来。避免中间有,号造成误识别疾病"干眼""右膝髌上囊及关节腔少量积液"创建节点importloggingimportpandasaspdfromutils.neo4j_providerimportdriverloggi......
  • Python API教程:API入门(上)
    什么是API?一个API,或被称为应用程序接口,是一个服务器为你提供一个接收或发送数据的代码。API通常用来接收数据。本文就集中焦点在此话题中。当我们想从一个API中接收数据,我们需要开始请求。请求可以包含整个Web。例如,你可以浏览博客文章。你的浏览器开始请求我们的Web服务器,会返回整......
  • 电商商品API数据:概念、应用与未来趋势
    一、引言随着电子商务的飞速发展,电商平台间的竞争愈发激烈。为了提供更优质的服务,许多电商平台选择开放其商品API数据,允许第三方开发者利用这些数据创建各种创新的应用。本文将对电商商品API数据的相关概念、应用场景及未来发展趋势进行深入探讨。二、电商商品API数据概述1.电商商......
  • 在线问诊 Python、FastAPI、Neo4j — 创建 检查节点
    目录症状数据创建节点根据不同的症状,会建议做些相对应的检验、检查症状数据examine_data.csv建议值用“”引起来。避免中间有,号造成误识别检查"膝关节核磁""眼睛酸胀""视力""砂眼""辨色力""角膜""眼底"创建节点参考创建药品节点。importloggingfromutils.neo......
  • APIO2017 斑斓之地
    1D6ya。回忆平面图欧拉公式。\[V-E+F=C+1\]\(V\)为点数,\(E\)为边数,\(F\)为面数,\(C\)为连通块数。以下称河流为黑块,土地为白块。将白块看成点,四联通的白块之间连边,不难发现矩阵查询即询问导出子图的连通块数。考虑平面图欧拉公式,那么只需要求出导出子图的点数、面数以及边......
  • 教你用API插件开发一个AI快速处理图片小助手
    本文分享自华为云社区《【案例教学】华为云API图引擎服务GES的便捷性—AI帮助快速处理图片小助手》,作者:华为云PaaS服务小智。调用云服务、API、SDK、调试、查看……“我”都行,一起来体验用HuaweiCloudAPI实现AI快速处理图片。1IntelliJIDEA之API插件介绍API插件支持 VSCod......