实验三:熟悉常用的HBase操作

news2024/10/7 10:25:29

实验环境:
(1)操作系统:Linux(建议 Ubuntu 16.04 或 Ubuntu 18.04)。
(2)Hadoop 版本:3.1.3。
(3)HBase 版本:2.2.2。
(4)JDK 版本:1.8。
(5)Java IDE: Eclipse。
实验内容与完成情况:
(1)现有以下关系数据库中的表和数据(见表14-3〜表14-5),要求将其转换为适合于
HBase存储的表并插入数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)学生Student表
创建表的HBase Shell命令语句如下:
在这里插入图片描述

第二行数据
在这里插入图片描述

第三行数据

在这里插入图片描述

(2)课程Course表
创建表的HBase Shell命令语句如下:
在这里插入图片描述
在这里插入图片描述

(3)选课表
创建表的HBase Shell命令语句如下:

在这里插入图片描述

(2)编程实现以下功能。
①createTable(String tableName, String]] fields)。
创建表,参数tableName 表的名称,字符串数组fields *存储记录各字段名的数组。 要求当HBase已经存在名为tableName的表时,先删除原有的表,再创建新的表。
Java代码:

package com.xusheng.HBase.shiyan31;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
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 CreateTable {

    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

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

        init();
        TableName tablename = TableName.valueOf(tableName);

        if(admin.tableExists(tablename)){
            System.out.println("table is exists!");
            admin.disableTable(tablename);
            admin.deleteTable(tablename);//删除原来的表
        }

        TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tablename);
        for(String str : fields){
            tableDescriptor.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build());
            admin.createTable(tableDescriptor.build());
        }
        close();
    }

    //建立连接
    public static void init() {
        configuration = HBaseConfiguration.create();
        //configuration.set("hbase.rootdir", "hdfs://hadoop102:8020/HBase");
        configuration.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //关闭连接
    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String[] fields = {"Score"};
        try {
            createTable("person", fields);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

结果:
在这里插入图片描述
在这里插入图片描述

②addRecord(String tableName, String row, String]] fields, String口 values) 。
向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对 应的数据valueso其中,fields中每个元素如果对应的列族下还有相应的列限定符,用 “columnFamily: column"表示。例如,同时向MathComputerEnglish三列添加成绩时,字 符串数组 fields 为( “Score: Math” ," Score: Computer" , “Score: English” },数组 values 存储 这三门课的成绩。

Java代码:

package com.xusheng.HBase.shiyan31;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;

public class addRecord {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void addRecord(String tableName, String row, String[] fields, String[] values) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        for (int i = 0; i != fields.length; i++) {
            Put put = new Put(row.getBytes());
            String[] cols = fields[i].split(":");
            put.addColumn(cols[0].getBytes(), cols[1].getBytes(), values[i].getBytes());
            table.put(put);
        }
        table.close();
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        //configuration.set("hbase.rootdir", "hdfs://hadoop102:8020/HBase");
        configuration.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");

        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String[] fields = {"Score:Math", "Score:Computer Science", "Score:English"};
        String[] values = {"99", "80", "100"};
        try {
            addRecord("tableName", "Score", fields, values);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

结果:
在这里插入图片描述

③scanColumn(String tableName, String column)
浏览表tableName某列的数据,如果某行记录中该列数据不存在,则返回null。要求 当参数column为某列族名时,如果底下有若干个列限定符,则要列出每个列限定符代表 的列的数据;当参数column为某列具体名(例如“ Score: Math")时,只需要列出该列的 数据。

Java代码:

package com.xusheng.HBase.shiyan31;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
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 scanColumn {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void scanColumn(String tableName, String column) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        scan.addFamily(Bytes.toBytes(column));
        ResultScanner scanner = table.getScanner(scan);
        for (Result result = scanner.next(); result != null; result = scanner.next()) {
            showCell(result);
        }
        table.close();
        close();
    }

    public static void showCell(Result result) {
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
            System.out.println("RowName:" + new String(CellUtil.cloneRow(cell)) + " ");
            System.out.println("Timetamp:" + cell.getTimestamp() + " ");
            System.out.println("column Family:" + new String(CellUtil.cloneFamily(cell)) + " ");
            System.out.println("row Name:" + new String(CellUtil.cloneQualifier(cell)) + " ");
            System.out.println("value:" + new String(CellUtil.cloneValue(cell)) + " ");
        }
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        //configuration.set("hbase.rootdir", "hdfs://hadoop102:8020/HBase");
        configuration.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");

        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 关闭连接
    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            scanColumn("tableName", "Score");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

结果:
在这里插入图片描述

④modifyData(String tableName, String row, String column) 。
修改表tableName,即修改行row(可以用学生姓名S_Name表示)、列column指定的 单元格的数据。

Java代码:

package com.xusheng.HBase.shiyan31;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;

public class modifyData {

    public static long ts;
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void modifyData(String tableName, String row, String column, String val) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(row.getBytes());
        Scan scan = new Scan();
        ResultScanner resultScanner = table.getScanner(scan);
        for (Result r : resultScanner) {
            for (Cell cell : r.getColumnCells(row.getBytes(), column.getBytes())) {
                ts = cell.getTimestamp();
            }
        }
        put.addColumn(row.getBytes(), column.getBytes(), ts, val.getBytes());
        table.put(put);
        table.close();
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        //configuration.set("hbase.rootdir", "hdfs://hadoop102:8020/HBase");
        configuration.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");

        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            modifyData("tableName", "Score", "Math", "100");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

结果:
在这里插入图片描述

⑤deleteRow(String tableName, String row)。
删除表tableName中row指定的行的记录。

Java代码:

package com.xusheng.HBase.shiyan31;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
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 deleteRow {

    public static long ts;
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void deleteRow(String tableName, String row) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Delete delete=new Delete(row.getBytes());
        table.delete(delete);
        table.close();
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        //configuration.set("hbase.rootdir", "hdfs://hadoop102:8020/HBase");
        configuration.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");

        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            deleteRow("tableName", "Score");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据挖掘与商务智能决策】第十七章 神经网络

前言 本人CSDN博客为“仿生程序员会梦见电子羊吗”,本文基于markdown本文书写,平台及软件为CSDN与Typora,文中图片存储地址为CSDN,故部分图片可能带有“CSDN仿生程序员会梦见电子羊吗”的水印,属于本人原创&#xff0c…

视频理解学习笔记(二):I3D and Kinetics Dataset

视频理解学习笔记(二):I3D and Kinetics Dataset 视频理解的三个流派(怎么处理时序)论文概览Kinetics Dataset模型详解将2D卷积网络扩张到3D(Inflating 2D ConvNets into 3D)如何用预训练好的2D…

2023年最新企业网盘排行榜出炉

随着云计算技术的不断发展,企业日常工作中大量的资料、文档等信息需要实现集中管理,此时企业网盘工具就应运而生。企业网盘是一种可用于企业内部管理、团队协作及文件共享的云存储平台,能够极大提高企业办公效率和安全性。 一、企业网盘的帮助…

[链表OJ题 8] 用栈实现队列,没想到你小子的基础这么好,这么快就做对了

目录 题目来源: 代码实现: 思路分析: 实现过程: 题目来源: 力扣 - 232.用栈实现队列 题目描述: 代码实现: 我们这里的栈已经写好了,如果对栈还不是很懂的可以看看这篇文章&am…

Postman接口工具之请求运行顺序及Workflow

作为一款接口调试利器, Postman的更新迭代速度很快, 不断加入了很多新的功能.使的api设计,测试,监控, Mock,以及团队协作更加方便. 修改执行顺序 在遇到有接口依赖的情况, 我们往往需要接口按顺序执行, 之前可以通过在一个请求的Pre-request Scripts中使用pm.sendRequest发送…

java基于springboot应急科研科技资源管理系统

应急资源管理系统的开发,主要有管理员和用户两个角色。 管理员角色计划设计的功能有密码信息管理、个人信息管理、用户信息管理、应急资源管理、留言信息管理等模块,管理员可以对用户、应急资源、留言等信息进行管理,可以选择添加、修改、删除…

ADC常用的十大滤波算法(C语言)

目录 ​编辑 ​一、限幅滤波法 二、中位值滤波法 三、算术平均滤波法 四、递推平均滤波法 五、中位值平均滤波法 六、限幅平均滤波法 七、一阶滞后滤波法 八、加权递推平均滤波法 九、消抖滤波法 十、限幅消抖滤波法 ​一、限幅滤波法 1、方法: 根据经验…

系列1——geotools简介

geotools简介 官网 https://docs.geotools.org/latest/userguide/index.html 架构图 常用功能列表 ModulePurposegt-renderImplements of Java2D rendering engine to draw a mapgt-jdbcImplements for accessing spatial databasegt-mainImplements for accessing spatial…

搭建一个Fabric网络

生成相关证书文件 首先Fabric提供了一些工具用于生成所需的文件,cryptogen模块会根据提供的配置文件生成后续模块运行过程中需要的证书和数据文件。 cryptogen常用命令: generate用于根据配置文件生成证书。 showtemplate用于提供一个模板。 具体操作如…

ROS学习——rviz打开bag文件

一、首先可以在这个网站中下载.bag文件用于学习。 二、显示.bag文件信息 在终端1中启动&#xff1a; roscore 在终端2中输入&#xff1a; rosbag info <bag_file_name> 这里要把<bag_file_name>换成你自己的bag文件名字&#xff0c;之后在终端就会显示出bag文件…

Lidar AI Solution环境配置

目录 Lidar AI Solution环境配置前言1. Lidar AI Solution1.1 Pipeline overview1.2 GetStart 2. CUDA-BEVFusion2.1 3D目标检测(nuScenes验证集)2.2 演示2.3 模型和数据2.4 前置条件2.5 快速开始推理2.5.1 下载模型和数据到CUDA-BEVFusion文件夹2.5.2 配置environment.sh2.5.3…

力扣贪心算法专题(三)力扣题 452、435、763、56、738、968、714 思路及C++实现

文章目录 贪心算法452. 用最少数量的箭引爆气球435. 无重叠区间做法1 右边界排序 不重叠区间做法2 右边界排序 不重叠区间做法3 左边界排序 重叠区间 763.划分字母区间做法1做法2 56. 合并区间738.单调递增的数字暴力解法贪心算法 968.监控二叉树714.买卖股票的最佳时机含手续费…

CSDN周赛55期 - 简单分析

上期周赛被判抄袭了。。。无语。我从第一期周赛一步步走来&#xff0c;所有题我都做过&#xff0c;我还需要抄袭&#xff1f; 虽然第一时间去申诉&#xff0c;但貌似并没什么用。算了&#xff0c;C站的审核也就这样了&#xff0c;失望寒心。 本期还是《计算之魂》主题赛——不得…

JavaScript 基础 DOM (四)

正则表达式正则表达式 正则基本使用 定义规则 const reg /表达式/其中/ /是正则表达式字面量正则表达式也是对象 使用正则 test()方法 用来查看正则表达式与指定的字符串是否匹配 如果正则表达式与指定的字符串匹配 &#xff0c;返回true&#xff0c;否则false reg.test(…

eclipse环境配置

eclipse环境配置 0. 前言1. 下载eclipse2. 下载sdk3. 配置sdk环境变量4. 验证sdk其他 0. 前言 本节记录如何配置eclipse的sdk配置 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;eclipse 1. 下载eclipse 来这边下载一下eclipse 菜鸟教程 完事之后打开eclips…

回归测试概念和4种回归测试策略——你想知道的都在这里啦!

前言&#xff1a; 回归测试是指修改了旧代码后&#xff0c;重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。回归测试作为软件生命周期的一个组成部分&#xff0c;在整个软件测试过程中占有很大的工作…

Tomcat源码:Acceptor与Poller、PollerEvent

参考资料&#xff1a; 《Tomcat源码解析系列&#xff08;十一&#xff09;ProtocolHandler》 《Tomcat源码解析系列&#xff08;十二&#xff09;NioEndpoint》 前文&#xff1a; 《Tomcat源码&#xff1a;启动类Bootstrap与Catalina的加载》 《Tomcat源码&#xff1a;容器…

绝对不能错过的7个零基础免费的ChatGPT镜像网站

还在为打不开openai官网烦心&#xff1f;本文帮你实现ChatGPTMidJourney自由(&#xffe3;∇&#xffe3;)/ &#x1f4d2;收集了一些截至目前(2023年5月25日午12:00)可以免费访问&#xff0c;并且零基础也能正常使用的镜像网站&#xff0c;后续将持续维护更新(&#xff61;&a…

(2)lordPE脱壳

1.寻找OEP 1.1第一种情况 1.修改OD选项&#xff0c;调试设置"事件"为系统断点&#xff0c;直接打开"查看"->"内存",设置00400000下F2断点&#xff0c;单步F8找到0040****开头的OEP例如&#xff1a;00401528 1.2第二种情况 进入od后如果直…

Github疯传!200本经典计算机书籍!

好书在精不在多&#xff0c;每一本经典书籍都值得反复翻阅&#xff0c;温故而知新&#xff01; 下面分享几本计算机经典书籍&#xff0c;都是我自己看过的。 重构 改善既有代码的设计 就像豆瓣评论所说的&#xff0c;看后有种醍醐灌顶、欲罢不能的感觉。无论你是初学者&#…