首页 > 其他分享 >HBase API

HBase API

时间:2024-05-11 10:21:02浏览次数:26  
标签:students TableName tn API org put import HBase

HBase Java API

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
</dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>2.2.7</version>
</dependency>

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.6</version>
</dependency>
<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.6</version>
</dependency>

基础代码:

package com.shujia.base;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * 数据库连接对象,数据库操作对象
 */
public class HBaseAPI {
    private Connection conn;
    private Admin admin;
    @Before
    public void getConnection() {
        try {
            //1、获取hbase集群的配置文件对象
            //0.90.0之前旧版本写法:
//        HBaseConfiguration conf = new HBaseConfiguration();
            //新版本写法:调用静态方法public static Configuration create()
            Configuration conf = HBaseConfiguration.create();

            //2、因为hbase的数据都一条元数据,元数据也存储再一张表中,这张表也有元数据,存储在zookeeper中
            //配置文件设置自己的zookeeper集群,conf中的"master:2181,node1:2181,node2:2181"前提是自己电脑中配置了host映射
            conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
            
            //3、狐猴去数据库的连接对象
            conn=ConnectionFactory.createConnection(conf);

            //获取数据库操作对象
            //旧版本写法
//            HBaseAdmin hBaseAdmin = new HBaseAdmin(conn);

            //新版本写法
            admin = conn.getAdmin();//使用连接对象获取数据库操作对象

            System.out.println("数据库连接对象获取成功"+conn);
            System.out.println("数据库操作对象获取成功"+admin);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建一张表
     */
    @Test
    public void createOneTable(){
        try {
            //先将表名封装成TableName对象
            TableName tn = TableName.valueOf("students");
//        旧版本写法(HTableDescriptor):
//        HTableDescriptor hTableDescriptor = new HTableDescriptor(tn);
//        新版本写法(TableDescriptorBuilder)获取表描述器对象:
            TableDescriptorBuilder students = TableDescriptorBuilder.newBuilder(tn);
            //旧版本创建列簇描述器对象
//        HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("info");
            //新版本创建列簇描述器对象
            ColumnFamilyDescriptor info = ColumnFamilyDescriptorBuilder.of("info");
            //将表和列簇进行关联
            //旧版本中表描述器调用addColumnFamily方法:
//        students.addColumnFamily(info);
            //新版本中表描述器调用setColumnFamily方法:
            students.setColumnFamily(info);

            //调用方法,创建表
//        createTable(TableDescriptorBuilder desc);
            admin.createTable(students.build());
            System.out.println(tn+"创建成功");
        } catch (IOException e) {
            System.out.println("创建失败");
            e.printStackTrace();
        }
    }

    /**
     * 删除一张表
     */
    @Test
    public void dropOneTable(){
        try {
            //先将表明封装成一个TableName对象
            TableName tn = TableName.valueOf("students");
            //先判断要删除的表是否存在
            if (admin.tableExists(tn)){
                //先禁用表
                admin.disableTable(tn);
                //使用admin对象调用方法删除表
                //void  deleteTable(TableName tableName)
                admin.deleteTable(tn);
                System.out.println(tn+"表删除成功");
            }else {
                System.out.println("表不存在!!!!!!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 向表中添加一条数据
     * put 'students','1001','info:name','xiaohu'
     */
    @Test
    public void putOneData(){
        try {
            //先将表名封装成一个TableName对象
            TableName tn = TableName.valueOf("students");
            //还是先判断表是否存在
            if (admin.tableExists(tn)){
                Table students = conn.getTable(tn);
                //创建put对象
//                Put put = new Put("1001".getBytes());
//                //对put对象进行设置,添加列簇、列名和列值
//                put.addColumn("info".getBytes(),"name".getBytes(),"xiaohu".getBytes());

                //hbase自带的一个工具类Bytes,可以将字符串转成字节数组
                //创建put对象
                Put put = new Put(Bytes.toBytes("1001"));//行键的字节数组形式
                //对put对象进行设置,添加列簇、列名和列值
                //旧版本但没有过时:
//                put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("xiaohu"));
                //新版本:
//                Cell是一个接口,无法被实例化,使用它的实现类KeyValue来创建对象
                put.add(new KeyValue(Bytes.toBytes("1001"),Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes("18")));

                //void put(Put put)
                //需要先将我们添加的列数据封装成put对象
                students.put(put);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 添加多条数据
     */
    @Test
    public void putMoreData(){
        BufferedReader br=null;
        try {
            //先将表名封装成一个TableName的对象
            TableName tn = TableName.valueOf("students");
            //创建字符缓冲输入流对象
            br = new BufferedReader(new FileReader("data/students.csv"));
            String[] colNameArray={"","name","age","gender","clazz"};

            //判断表是否存在
            if(admin.tableExists(tn)){
                //获取表对象
                Table students = conn.getTable(tn);
                //循环读取数据
                String line = null;
                while((line=br.readLine())!=null){
                    String[] info = line.split(",");
                    byte[] rowkey = Bytes.toBytes(info[0]);
                    //创建这一行的put的对象
                    Put put = new Put(rowkey);
                    //第一列作为行键作为唯一标识,从第二列开始,每一行都要被封装成put对象
                    for (int i=1;i<info.length;i++){
                        byte[] colName = Bytes.toBytes(info[i]);
                        put.addColumn(Bytes.toBytes("info"),Bytes.toBytes(colNameArray[i]),Bytes.toBytes(info[i]));
                        //添加该列数据
                        students.put(put);
                    }
                }
                System.out.println(tn+"表添加数据成功");
            }else {
                System.out.println(tn+"表不存在");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @After
    public void closeSource() {
        try {
            if(admin != null){
                admin.close();
            }
            if (conn != null){
                conn.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

标签:students,TableName,tn,API,org,put,import,HBase
From: https://www.cnblogs.com/peculiar/p/18185908

相关文章

  • HBase Meta 元信息表修复实践
    作者:vivo互联网大数据团队-HuangGuihu、ChenShengzunHBase是一款开源高可靠、高可扩展性、高性能的分布式非关系型数据库,广泛应用于大数据处理、实时计算、数据存储和检索等领域。在分布式集群中,硬件故障是一种常态,硬件故障可能导致节点或者集群级别服务中断、meta表损坏......
  • FastAPI 创建
    1.安装FastAPI和Uvicorn:pipinstallfastapiuvicorn2.创建FastAPI应用。main.py:fromfastapiimportFastAPIapp=FastAPI()@app.get("/")defread_root():return{"Hello":"World"}3.在命令行中使用Uvicorn启动你的应用:uv......
  • FastApi-tortoise-jwt-mysql
    抽了半天时间学了一下fastapi,为了方便,代码没分结构。importsysimportjwtimportuvicorn,asyncio,signal,osfromfastapiimportFastAPI,HTTPException,Dependsfromfastapi.securityimportOAuth2PasswordBearer,OAuth2PasswordRequestFormfromtortoiseimportfie......
  • Python最全的外汇、黄金、贵金属数据API接口
    1、前言Python最全的股票数据API接口、外汇数据接口、贵金属黄金数据接口在当今数字化的金融世界中,股市API、外汇API接口很重要,通过股票API、外汇API接口接口获取准确且实时的股票数据对于投资者和程序开发者来说至关重要。Python作为一种广泛使用的编程语言,提供了丰富的工具和......
  • 实时行情API | 实时行情数据对接
    ​这个平台可对接产品包括:印股、台股、美股、港股、A股、外汇、贵金属、国际期货、国内期货、国际金银、数字货币、股指期货、等数据的对接产品代码获取地址:http://39.107.99.235:1008/market/market.php数据解析服务器实时推送的行情数据为以下格式:{"body":{......
  • 【IDEA神器插件推荐】国产崛起!地表最强API测试插件
    1.前言在开发SpringBoot网站应用的过程中,前端后端会对接口进行请求测试。相信很多小伙伴都用过Postman,但是在IDE和Postman切换难免令人心烦。所以今天给大家带来一款IDEA内置的接口测试插件。2.简介根据插件的简介:RestfulFastRequest是一个类似于Postman的IntelliJIDEA......
  • THUSC & PKUSC & APIO 2024 游记
    \(\texttt{2024/5/10}=\texttt{Day0}。\)\(\texttt{Day0}\)早上八点的飞机,六点起来,七点之前必须到机场,也是非常准时的卡点了。一看,呵呵,果然是最后一个到的。我到的时候,有几个都过安检了,我还在那里不慌不忙的走。没什么波折,也是很快上飞机了。让我们观察一下各位同学在飞机......
  • THUSC & APIO 2024 游记
    前言我应该算年龄很小的,这次旅途我没很多追求,具体的签约我也没弄清楚是什么回事,只知道我就是去那边考个试,但是还是蛮兴奋的,因为上次去集训面基到了0人,看这次能不能撞见几个大佬。至于APIO,我翻了翻去年的APIO成绩,发现Cu好像并不是那么难。说不定我rp++了就Cu了。我以......
  • apisix~jwt-auth插件
    在网关开启jwt-auth插件之后,你的网关就具有了jwt解析和校验的功能,主要是校验jwttoken的有效性,包含过期时间和签名等。https://apisix.apache.org/docs/apisix/plugins/jwt-auth/支持的签名算法"HS256""HS512""RS256""ES256"如果使用非对称算法rs256和es256时,需要配置公......
  • 在Biwen.QuickApi中整合一个极简的发布订阅(事件总线)
    闲来无聊在我的Biwen.QuickApi中实现一下极简的事件总线,其实代码还是蛮简单的,对于初学者可能有些帮助就贴出来,有什么不足的地方也欢迎板砖交流~首先定义一个事件约定的空接口publicinterfaceIEvent{}然后定义事件订阅者接口publicinterfaceIEventSubscriber<T>w......