返回顶部
首页 > 资讯 > 移动开发 >实验三:熟悉常用的HBase操作
  • 323
分享到

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

hbasehadoop大数据 2023-10-23 12:10:48 323人浏览 独家记忆
摘要

实验环境: (1)操作系统:linux(建议 ubuntu 16.04 或 Ubuntu 18.04)。 (2)hadoop 版本:3.1.3。 (3)HBase 版本:2.2.2。 (4)jdk 版

实验环境:
(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();        }    }}

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

来源地址:https://blog.csdn.net/m0_52014276/article/details/130874212

--结束END--

本文标题: 实验三:熟悉常用的HBase操作

本文链接: https://www.lsjlt.com/news/440357.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 实验三:熟悉常用的HBase操作
    实验环境: (1)操作系统:Linux(建议 Ubuntu 16.04 或 Ubuntu 18.04)。 (2)Hadoop 版本:3.1.3。 (3)HBase 版本:2.2.2。 (4)JDK 版...
    99+
    2023-10-23
    hbase hadoop 大数据
  • HBase Shell Get 操作常用小技巧
    在工作中,有时候只是想简单看下HBase表某些关键指标的值,这个时候总不能现写Java代码去查看,以下几个小技巧你可能会经常用到。 1. 某行有许多列,只想获取指定2~3列的数据 hbase> get "t1", "r1", ["...
    99+
    2017-03-26
    HBase Shell Get 操作常用小技巧
  • 深入探索Vue选择器:熟悉常用的选择器类型
    深入了解Vue选择器:了解常用的选择器有哪些 在使用Vue.js开发Web应用程序时,我们经常需要操作DOM元素,例如获取、修改和删除元素。为了便于操作DOM,Vue提供了一组选择器,可以帮助我们在DOM中查找和定位元素。本文将...
    99+
    2024-01-15
    深入了解 Vue选择器 常用选择器
  • 实验三 字符类型及其操作(新)
    第1关:判断回文数 任务描述 本关任务:         输入一个整数,判断其是否回文数。 回文数是指该数翻转后也等于该数本身。例如12321就是回文数,12345不是回文数。 相关知识         为了完成本关任务,你需要掌握:1.如...
    99+
    2023-10-21
    开发语言 python
  • Java操作excel的三种常见方法实例
    目录前言一、Apache poi1.1 首先添加依赖1.2 导出excel1.2.1 HSSF方式导出(.xls方式)1.2.2 XSSF方式导出(.xlsx)1.2.3、SXSSF...
    99+
    2024-04-02
  • 了解MySQL的主要数据类型:熟悉常用的数据类型有哪些
    MySQL基本数据类型概述:了解常用的数据类型有哪些,需要具体代码示例 MySQL是一种常用的关系型数据库管理系统,它支持多种数据类型。了解这些数据类型对于正确的数据库设计和数据存储至关重要。本文将介绍MySQL中常用的数据类型...
    99+
    2024-01-29
    MySQL 数据类型 常用
  • 3Mysql 的常用操作
    root@OBird ~]# mysql -uroot -pzaq12wsx   #入库mysql> show databases;  #查库ERROR 2006 (HY000): MySQL server has gone away...
    99+
    2023-01-31
    常用 操作 Mysql
  • 常用angular事件的实例操作
    本篇内容主要讲解“常用angular事件的实例操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“常用angular事件的实例操作”吧!<!DOCTYPE&...
    99+
    2024-04-02
  • 用Python实现的Excel常用操作有哪些
    本篇内容介绍了“用Python实现的Excel常用操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、关联公式:Vlookupvlo...
    99+
    2023-06-30
  • .Net中常用的IO操作实例分析
    这篇文章主要介绍“.Net中常用的IO操作实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.Net中常用的IO操作实例分析”文章能帮助大家解决问题。1. Stream.CopyToStream...
    99+
    2023-07-02
  • 常用的MySQL优化操作
    操作系统配优化 执行计划与锁表查看 --查看连接信息以及连接执行的命令 SHOW PROCESSLIST --查看当前被锁住的表 show OPEN TABLES where In_use > 0; ...
    99+
    2014-09-16
    常用的MySQL优化操作
  • Elasticsearch 常用的聚合操作
    聚合框架有助于基于搜索查询提供聚合数据。它基于称为聚合的简单构建块,可以组合以构建复杂的数据摘要。 Aggregation 简介 ps : 本篇文章 Elasticsearch 和 Kibana 版本为 7.1...
    99+
    2021-07-29
    Elasticsearch 常用的聚合操作
  • Redis常用的操作命令
    本篇内容主要讲解“Redis常用的操作命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis常用的操作命令”吧!一、key pattern 查询相应的ke...
    99+
    2024-04-02
  • Dbeaver的常用操作介绍
    这篇文章主要讲解了“Dbeaver的常用操作介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dbeaver的常用操作介绍”吧!dbeaver是免费和开源(...
    99+
    2024-04-02
  • SpringAOP实现登录验证的操作代码
    要求任何操作都建立在已经登录的基础上,登录操作除外。。。。 使用Spring AOP不仅简单,还不会对其他部件中产生影响 以下具体代码实现: package com.joey.uti...
    99+
    2024-04-02
  • 14个用Python实现的Excel常用操作总结
    目录前言一、关联公式:Vlookup二、数据透视表三、对比两列差异四、去除重复值五、缺失值处理六、多条件筛选七、 模糊筛选数据八、分类汇总九、条件计算十、删除数据间的空格十一、数据分...
    99+
    2024-04-02
  • Python 常见加密操作的实现
    目录hashlib加密hmac加密secretsbase64cryptographyhashlib加密 import hashlib   # 有很多种加密方式,md5,...
    99+
    2024-04-02
  • python字符串的一些常见实用操作
    目录切片——str[start:end]字符串长度——len(str)重复字符串 ——1、str * n,2、...
    99+
    2024-04-02
  • js常用节点操作实例总结
    一:父节点 1:返回父节点 element.parentNode,得到的是离元素最近的父节点。如果找不到则返回为null代码: <body> <div>...
    99+
    2023-05-17
    js 节点操作
  • mysql数据库的常用操作
    这篇文章主要讲解了“mysql数据库的常用操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库的常用操作”吧!mysql的常用操作(添加用户)...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作