首页 > 其他分享 >熟悉常用的HBase操作01

熟悉常用的HBase操作01

时间:2024-12-26 14:56:33浏览次数:6  
标签:01 String admin tableName static 熟悉 table HBase addRecord

(一)编程实现以下指定功能,并用Hadoop提供的HBase Shell命令完成相同任务:

(1) 列出HBase所有的表的相关信息,例如表名;

(2) 在终端打印出指定的表的所有记录数据;

(3) 向已经创建好的表添加和删除指定的列族或列;

(4) 清空指定的表的所有记录数据;

(5) 统计表的行数。

 

 

 

 

 

 

 

 

 代码:

package hbase;

 

import hbase.HBaseConfig;

import org.apache.hadoop.hbase.client.*;

import org.apache.hadoop.hbase.*;

import org.apache.hadoop.hbase.util.Bytes;

 

import java.io.IOException;

 

public class HBaseOperations {

    private static Connection connection;

    private static Admin admin;

 

    static {

        try {

            connection = ConnectionFactory.createConnection(HBaseConfig.getConfig());

            admin = connection.getAdmin();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    // (1) 列出所有表信息

    public static void listTables() throws IOException {

        HTableDescriptor[] tableDescriptors = admin.listTables();

        System.out.println("HBase 表列表:");

        for (HTableDescriptor table : tableDescriptors) {

            System.out.println(" - " + table.getTableName());

        }

    }

 

    // (2) 打印指定表的所有记录

    public static void printTable(String tableName) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Scan scan = new Scan();

        ResultScanner scanner = table.getScanner(scan);

 

        for (Result result : scanner) {

            System.out.println("行: " + Bytes.toString(result.getRow()));

            for (Cell cell : result.rawCells()) {

                System.out.println(" - 列: " + Bytes.toString(CellUtil.cloneFamily(cell)) + ":" +

                        Bytes.toString(CellUtil.cloneQualifier(cell)) +

                        ", 值: " + Bytes.toString(CellUtil.cloneValue(cell)));

            }

        }

        table.close();

    }

 

    // (3) 添加和删除列族

    public static void modifyColumnFamily(String tableName, String columnFamily, boolean add) throws IOException {

        TableName table = TableName.valueOf(tableName);

        if (!admin.tableExists(table)) {

            System.out.println("表不存在.");

            return;

        }

 

        if (add) {

            HColumnDescriptor columnDescriptor = new HColumnDescriptor(columnFamily);

            admin.addColumn(table, columnDescriptor);

            System.out.println("已添加列族: " + columnFamily);

        } else {

            admin.deleteColumn(table, Bytes.toBytes(columnFamily));

            System.out.println("已删除列族: " + columnFamily);

        }

    }

 

    // (4) 清空表中的所有记录

    public static void truncateTable(String tableName) throws IOException {

        TableName table = TableName.valueOf(tableName);

        if (admin.tableExists(table)) {

            admin.disableTable(table);

            admin.truncateTable(table, true);

            System.out.println("表 " + tableName + " 已清空.");

        } else {

            System.out.println("表不存在.");

        }

    }

 

    // (5) 统计表的行数

    public static void countRows(String tableName) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Scan scan = new Scan();

        ResultScanner scanner = table.getScanner(scan);

 

        int rowCount = 0;

        for (Result ignored : scanner) {

            rowCount++;

        }

        System.out.println("表 " + tableName + " 总行数: " + rowCount);

        table.close();

    }

 

    // 关闭连接

    public static void closeConnection() {

        try {

            if (admin != null) admin.close();

            if (connection != null) connection.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        try {

            // 测试功能

            String tableName = "Student";

            listTables();

            printTable(tableName);

            modifyColumnFamily(tableName, "列族", true);

            modifyColumnFamily(tableName, "列族2", true);

            modifyColumnFamily(tableName, "列族", false);

            truncateTable(tableName);

            countRows(tableName);

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            closeConnection();

        }

    }

}

(二)HBase数据库操作

1. 现有以下关系型数据库中的表和数据(见表14-3到表14-5),要求将其转换为适合于HBase存储的表并插入数据:

表14-3 学生表(Student)

学号(S_No)

姓名(S_Name)

性别(S_Sex)

年龄(S_Age)

2015001

Zhangsan

male

23

2015002

Mary

female

22

2015003

Lisi

male

24

 

表14-4 课程表(Course)

课程号(C_No)

课程名(C_Name)

学分(C_Credit)

123001

Math

2.0

123002

Computer Science

5.0

123003

English

3.0

 

表14-5 选课表(SC)

学号(SC_Sno)

课程号(SC_Cno)

成绩(SC_Score)

2015001

123001

86

2015001

123003

69

2015002

123002

77

2015002

123003

99

2015003

123001

98

2015003

123002

95

 

 

 

运行截图:

 

 

 

代码:

package hbase;

 

import org.apache.hadoop.hbase.client.*;

import org.apache.hadoop.hbase.*;

import org.apache.hadoop.hbase.util.Bytes;

 

import java.io.IOException;

 

public class HBaseOperations1 {

    private static Connection connection;

    private static Admin admin;

 

    static {

        try {

            connection = ConnectionFactory.createConnection(HBaseConfig.getConfig());

            admin = connection.getAdmin();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    // 创建表

    public static void createTable(String tableName, String[] columnFamilies) throws IOException {

        TableName table = TableName.valueOf(tableName);

        if (admin.tableExists(table)) {

            System.out.println("表 " + tableName + " 已经存在,正在删除...");

            admin.disableTable(table);

            admin.deleteTable(table);

        }

        HTableDescriptor tableDescriptor = new HTableDescriptor(table);

        for (String cf : columnFamilies) {

            tableDescriptor.addFamily(new HColumnDescriptor(cf));

        }

        admin.createTable(tableDescriptor);

        System.out.println("表 " + tableName + " 创建成功。");

    }

 

    // 插入数据

    public static void addRecord(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException {

        Table table = connection.getTable(TableName.valueOf(tableName));

        Put put = new Put(Bytes.toBytes(rowKey));

        put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));

        table.put(put);

        table.close();

        System.out.println("已插入记录到表 " + tableName + ": 行键=" + rowKey + ", " + columnFamily + ":" + column + "=" + value);

    }

 

    // 关闭连接

    public static void closeConnection() {

        try {

            if (admin != null) admin.close();

            if (connection != null) connection.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        try {

            // 1. 创建学生表

            String studentTable = "Student";

            String[] studentCF = {"info"};

            createTable(studentTable, studentCF);

 

            // 插入学生表数据

            addRecord(studentTable, "2015001", "info", "name", "Zhangsan");

            addRecord(studentTable, "2015001", "info", "sex", "male");

            addRecord(studentTable, "2015001", "info", "age", "23");

 

            addRecord(studentTable, "2015002", "info", "name", "Mary");

            addRecord(studentTable, "2015002", "info", "sex", "female");

            addRecord(studentTable, "2015002", "info", "age", "22");

 

            addRecord(studentTable, "2015003", "info", "name", "Lisi");

            addRecord(studentTable, "2015003", "info", "sex", "male");

            addRecord(studentTable, "2015003", "info", "age", "24");

 

            // 2. 创建课程表

            String courseTable = "Course";

            String[] courseCF = {"details"};

            createTable(courseTable, courseCF);

 

            // 插入课程表数据

            addRecord(courseTable, "123001", "details", "name", "Math");

            addRecord(courseTable, "123001", "details", "credit", "2.0");

 

            addRecord(courseTable, "123002", "details", "name", "Computer Science");

            addRecord(courseTable, "123002", "details", "credit", "5.0");

 

            addRecord(courseTable, "123003", "details", "name", "English");

            addRecord(courseTable, "123003", "details", "credit", "3.0");

 

            // 3. 创建选课表

            String scTable = "SC";

            String[] scCF = {"score"};

            createTable(scTable, scCF);

 

            // 插入选课表数据

            addRecord(scTable, "2015001:123001", "score", "score", "86");

            addRecord(scTable, "2015001:123003", "score", "score", "69");

            addRecord(scTable, "2015002:123002", "score", "score", "77");

            addRecord(scTable, "2015002:123003", "score", "score", "99");

            addRecord(scTable, "2015003:123001", "score", "score", "98");

            addRecord(scTable, "2015003:123002", "score", "score", "95");

 

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            closeConnection();

        }

    }

}

 

标签:01,String,admin,tableName,static,熟悉,table,HBase,addRecord
From: https://www.cnblogs.com/aixin52129211/p/18632802

相关文章

  • 熟悉常用的HBase操作02(问题)
    实验内容与完成情况:(一)编程实现以下指定功能,并用Hadoop提供的HBaseShell命令完成相同任务:  HBaseShell运行截图:(1) 列出HBase所有的表的相关信息,例如表名; (2) 在终端打印出指定的表的所有记录数据; (3) 向已经创建好的表添加和删除指定的列族或列; (4) 清空指定的表......
  • HDFS操作01
    实验内容与完成情况:(一)编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务: (1) 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件; (2) 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对......
  • 熟悉常用的Linux操作和Hadoop操作(实验过程存在的问题和解决)
    实验步骤1)cd命令:切换目录(1) 切换到目录“/usr/local”(2) 切换到当前目录的上一级目录(3) 切换到当前登录Linux系统的用户的自己的主文件夹2)ls命令:查看文件与目录查看目录“/usr”下的所有文件和目录3)mkdir命令:新建目录(1)进入“/tmp”目录,创建一个名为“a”的目录,并查看“/tm......
  • 鑫谷GPE-01超导热石墨烯导热垫片评测:255W下比利民TF9低4度
    一、前言:可重复使用的高性能导热垫对于DIY玩家而言,涂硅脂是装机过程中必不可少的工作,但其实涂硅脂也是一个技术活!比如涂的太薄或者有遗漏的地方,就会导致散热器底座与CPU顶盖无法充分接触,导致某几个核心的温度特别高。涂的太厚更不可取!因为市面上大部分高端硅脂的导热效率都在10......
  • 365编程自学笔记--001
    day001我打算用365天,也就是一年的时间。从零开始学习编程和AI应用,目标是在明年的圣诞节之前,能够基本掌握全栈的web和移动端的开发,以及AI相关的应用与开发。以使得自己能够跟上这个飞速发展的AI时代,成为AI时代的首批移民。经过一段时间的调研和比选,最终觉得从coderwhy王红......
  • 01现代计算机视觉入门之:什么是图片
    ##系列文章目录##01现代计算机视觉入门之:什么是图片(6700字/25图)02现代计算机视觉入门之:什么是视频03现代计算机视觉入门之:什么是图片特征编码04现代计算机视觉入门之:什么是图片分类05现代计算机视觉入门之:什么是目标检测06现代计算机视觉入门之:什么是图像分割07现代计算......
  • HNOI2016 序列 题解
    HNOI2016序列题解我做离线版本时往了偏序方向想,但是发现非常麻烦。直到看到了在线版本的容斥做法,发现既好写又跑得快。首先考虑容斥,我们不妨把一个询问\([L,R]\)中最小值的位置\(pos\)求出来。子区间跨过\(pos\),贡献即\((pos-L+1)\times(R-pos+1)\timesa_{pos}\)。......
  • UOJ37 【清华集训2014】主旋律(SCC/DAG 状态压缩)
    题意求一个有向图\(G\)删掉一些边后原图仍强连通的方案数。模数\(10^9+7\)。\(n\le15,m\len(n-1)\)分析SCC状压有一个非常经典的“耳分解”:以SCC内两个点(可以相同)为起点、终点,找一条除两端外不在SCC内的链,然后加进去。但是这里要求方案数,耳分解失效,考虑别的方法。......
  • oscp备战系列-Kioptrix2014
    文章目录一、信息收集二、漏洞探测三、漏洞利用四、后渗透一、信息收集主机探测nmap192.168.30.0/24-sP端口及版本探测nmap192.168.30.199-sV可以看到开放了80,8080端口,采用apache2.2.21mod_ssl2.2.21openssl0.9.8qWebDAV2php5.3.8OS:FreeBSD,22端......
  • wps office 2019专业版激活破解教程
    前言wpsoffice2019专业增强版含无云版是一款非常方便的办公软件,我们在日常的工作中总会碰到需要使用WPS的时候,它能为我们提供更好的文档编写帮助我们更好的去阅读PDF等多种格式的文档,使用起来非常的快捷方便。使用某银行专业增强版制作,包含vba和Pdf,集成序列号,去除密匙校验,去除......