我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

数据HBase实践-用最好的操作系统

本篇文章给大家带来的就是关于数据的一些详细解析,本篇文章会教给大家数据的知识点进行分析,希望本篇文章能帮助到你,对你有所收获,希望大家仔细阅读文章。任何数据库系统的性能表现都与诸多因素相关,这里面有数据库本身的各种因素,比如数据库配置、客户端使用、容量规划、表scheme设计等,除此之外,基础系统对其的影响也至关重要,比如操作系统、JVM等。很多时候数据库遇到一些性能问题,左查右查都定位不了具体原因,这个时候就要看看操作系统的配置是否都合理了。本文从HBase官方文档要求的几个参数出发,详细说明
数据HBase实践-用最好的操作系统
2024-04-23

用Python实现的Excel常用操作有哪些

本篇内容介绍了“用Python实现的Excel常用操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、关联公式:Vlookupvlo
2023-06-30

.Net中常用的IO操作实例分析

这篇文章主要介绍“.Net中常用的IO操作实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.Net中常用的IO操作实例分析”文章能帮助大家解决问题。1. Stream.CopyToStream
2023-07-02

如何用php实现只取前三个元素的遍历操作

这篇文章主要讲解了“如何用php实现只取前三个元素的遍历操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用php实现只取前三个元素的遍历操作”吧!首先,我们需要了解PHP中的数组是如何
2023-07-05

python常用操作之使用多个界定符(分隔符)分割字符串的方法实例

在使用Python处理字符串的时候,有时候会需要分割字符,下面这篇文章主要给大家介绍了关于python常用操作之使用多个界定符(分隔符)分割字符串的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
2023-01-09

操作系统容器编排的最佳实践:如何避免常见的陷阱,让你的应用程序运行更顺畅

操作系统容器编排是实现应用程序现代化和提高可移植性的关键技术。本文分享了在操作系统容器编排实践中常见的陷阱,并提供了避免这些陷阱的最佳实践,帮助您构建更可靠、更可扩展的应用程序。
操作系统容器编排的最佳实践:如何避免常见的陷阱,让你的应用程序运行更顺畅
2024-02-11

【Java基础教程】(三十一)常用类库篇 · 第一讲:Optional类——解锁Java的Optional操作,消灭那些隐匿的空指针,还程序世界一个安稳!~

Java基础教程之常用类库 · Optional类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 常用操作API3.2 案例3.3 使用技巧 4️⃣ 应用场景5️⃣ 实现原理🌾 总结 1️⃣ 概念 O
2023-08-16

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录