首页 > 其他分享 >HBase_API_(HBaseDML,对数据的api)

HBase_API_(HBaseDML,对数据的api)

时间:2023-09-19 22:59:52浏览次数:42  
标签:String api param connection API IOException new table HBase

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

静态属性

1.插入数据

2.读取数据

3.扫描数据

4.

5.

HBaseConnection.java(提供connection连接)

package com.atguigu;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

/**
 * HBase多线程连接
 */
public class HBaseConnection {

    //声明静态属性
    public static Connection connection=null;
    static {

//        //1.创建配置对象
//        Configuration configuration = new Configuration();
//
//        //2.设置配置参数
//        configuration.set("hbase.zookeeper.quorum","node1,node2,node3");

        //直接使用读取本地文件的形式添加参数
        //3.建立hbase连接
        try {
            connection = ConnectionFactory.createConnection();
        } catch (IOException e) {
//            throw new RuntimeException(e);
            e.printStackTrace();
        }
    }


    public static void closeConnection() throws IOException {
        //判断连接是否为空
        if(connection!=null){
            connection.close();
        }
    }


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

        //不再main线程中单独创建连接,而是直接使用
        System.out.println(HBaseConnection.connection);

        //用完记得关闭连接
        HBaseConnection.closeConnection();;

    }

}
View Code

 

package com.atguigu;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
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 HBaseDML {

    //添加静态属性
    public static Connection connection = HBaseConnection.connection;

    /**
     * 插入数据
     * @param namespace 命名空间名称
     * @param tableName 表格名称
     * @param rowKey    主键
     * @param columnFamily  列族
     * @param columnName    列名
     * @param value         值
     */
    public static void putCell(String namespace, String tableName, String rowKey, String columnFamily, String columnName, String value) throws IOException {
        //1.获取table(对数据进行操作要获取table,对表格进行操作要获取admin)
        Table table = connection.getTable(TableName.valueOf(namespace, tableName));

        //2.调用方法插入数据
        Put put = new Put(Bytes.toBytes(rowKey));

        //3.给put对象添加数据
        put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));

        //4.将对象写入对应方法
        try {
            table.put(put);
        } catch (IOException e) {
//            throw new RuntimeException(e);
            e.printStackTrace();
        }

        //关闭table
        table.close();

    }


    /**
     * 读取数据  读取对应的某一列
     * @param namespace 命名空间
     * @param tableName 表格名称
     * @param rowKey    主键
     * @param columnFamily  列族
     * @param columnName    列名
     */
    public static void getCells(String namespace,String tableName,String rowKey,String columnFamily,String columnName) throws IOException {
        //1.获取table对象
        Table table = connection.getTable(TableName.valueOf(namespace,tableName));

        //2.创建get对象
        Get get = new Get(Bytes.toBytes(rowKey));

        //读取某一列的数据:添加属性
        get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));

        //也可以设置读取版本
        get.readAllVersions();

        try {

            //获取读取对象
            Result result = null;
            result = table.get(get);


            //处理数据
            Cell[] cells = result.rawCells();

            //
            for (Cell cell : cells) {
                //cell
                String value = new String(CellUtil.cloneValue(cell));
                System.out.println(value);

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


        //关闭table
        table.close();

    }


    /**
     * 扫描数据
     * @param namespace 命名空间
     * @param tableName 表格名称
     * @param startRow  开始row   包含的
     * @param stopRow   暂停row   不包含
     */
    public static void scanRows(String namespace,String tableName, String startRow, String stopRow) throws IOException {

        //1.获取table
        Table table = connection.getTable(TableName.valueOf(namespace, tableName));

        //调用对应方法
        Scan scan = new Scan();

        //添加参数控制扫描数据
        scan.withStartRow(Bytes.toBytes(startRow)); //包含
        scan.withStopRow(Bytes.toBytes(stopRow));   //不包含

        try {
            //读取数据,获得scanner对象
            ResultScanner scanner = null;
            scanner = table.getScanner(scan);

            //result记录一行数据,cell数据
            //Resultscanner记录多行数据,result数组
            for (Result result : scanner) {

                Cell[] cells = result.rawCells();

                for (Cell cell : cells) {
                    System.out.print(new String(CellUtil.cloneRow(cell))+"-"+
                            new String(CellUtil.cloneFamily(cell))+"-"+
                            new String(CellUtil.cloneQualifier(cell))+"-"+
                            new String(CellUtil.cloneValue(cell))+"\t");
                }

                System.out.println();

            }


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

        }


        //关闭table
        table.close();

    }



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

        //1.添加数据测试
//        putCell("atguigu","student","01","msg","stuname","*****");


        //2.测试读取数据
//        getCells("atguigu","student","01","msg","stuname");


        //3.测试扫描数据
        scanRows("atguigu","student","01","03");

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

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

    }
}

 

标签:String,api,param,connection,API,IOException,new,table,HBase
From: https://www.cnblogs.com/hmy22466/p/17716048.html

相关文章

  • HBase_API_(HBaseDDL,对表的api)
    对hbase数据表进行以下操作:1.创建命名空间2.判断表是否存在3.创建表格4.修改表格5.删除表格注意:对表格的操作要调用admin,对数据进行操作调用table(这篇博客没有涉及到)packagecom.atguigu;importorg.apache.hadoop.hbase.NamespaceDescriptor;importorg.apache.hadoop......
  • 【逆向专题】【危!!!刑】(一)使用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\)为连通块数。以下称河流为黑块,土地为白块。将白块看成点,四联通的白块之间连边,不难发现矩阵查询即询问导出子图的连通块数。考虑平面图欧拉公式,那么只需要求出导出子图的点数、面数以及边......