实验三-HBase数据库操作

 第一步:首先登陆ssh,之前设置了无密码登陆,因此这里不需要密码;再切换目录至/usr/local/hadoop ;再启动hadoop

ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh

 输入命令jps,能看到NameNode,DataNode和SecondaryNameNode都已经成功启动,表示hadoop启动成功

第二步:切换目录至/usr/local/hbase;再启动HBase.

 

进入shell界面:

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

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

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

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

 

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

统计表的行数。

(二)HBase数据库操作

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

学生表(Student)

学号(S_No)

姓名(S_Name)

性别(S_Sex)

年龄(S_Age)

2015001

Zhangsan

male

23

2015003

Mary

female

22

2015003

Lisi

male

24

课程表(Course)

课程号(C_No)

课程名(C_Name)

学分(C_Credit)

123001

Math

2.0

123002

Computer Science

5.0

123003

English

3.0

选课表(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

2. 请编程实现以下功能:

 这里只需要导入hbase安装目录中的lib文件中的所有jar包。

(1)createTable(String tableName, String[] fields)

        创建表,参数tableName为表的名称,字符串数组fields为存储记录各个字段名称的数组。要求当HBase已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
     
public class ExampleForHbase{
        public static Configuration configuration;//
        public static Connection connection;//
        public static Admin admin;//
        
        public static void main(String[] args) throws IOException {
            //创建一个表,表名为Score,列族为sname,course
              createTable("Score",new String[]{"sname","course"});
              }

       //建立连接
        public static void init() {
            configuration  = HBaseConfiguration.create();
            configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
            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();
            }
        }
     
        /**
         * 建表。HBase的表中会有一个系统默认的属性作为主键,主键无需自行创建,默认为put命令操作中表名后第一个数据,因此此处无需创建id列
         * @param myTableName 表名
         * @param colFamily 列族名
         * @throws IOException
         */
        public static void createTable(String myTableName,String[] colFamily) throws IOException {
     
            init();//先调用
            TableName tableName = TableName.valueOf(myTableName);//表名化作TableName对象
     
            if(admin.tableExists(tableName)) 
            {
                System.out.println("表已经存在!");
            }
            else  //如果不在
            {
                HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);//表描述对象
                for(String str:colFamily) //传了所有列
                {
                    HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);//列描述对象
                    hTableDescriptor.addFamily(hColumnDescriptor);//列描述添加到表描述
                }
                admin.createTable(hTableDescriptor);
                System.out.println("表创建成功!");
            }
            close();
        } 
}

        (2)addRecord(String tableName, String row, String[] fields, String[] values)

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

package A;

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

import java.io.IOException;

public class ExampleForHbase {
    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);
        }
        System.out.println("数据已插入!");
        table.close();
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        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 = {"course:Math", "course:Computer Science", "course:English"};
        String[] values = {"99", "80", "100"};
        try {
            addRecord("Score", "ss", fields, values);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

 

 

(3)scanColumn(String tableName, String column)

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

package A;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
     
    public class ExampleForHbase{
        public static Configuration configuration;
        public static Connection connection;
        public static Admin admin;
         //建立连接
        public static void init() {
            configuration  = HBaseConfiguration.create();
            configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
            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 scanColumn(String tableName, String column)throws  IOException {
            init();
            Table table = connection.getTable(TableName.valueOf(tableName));
            //Get get = new Get(rowKey.getBytes());
            //get.addColumn(colFamily.getBytes(),col.getBytes());
            //Result result = table.get(get);
            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();
        }
      
      /**
       * 格式化输出
       * @param result
       */
      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("Column Name:"+new String(CellUtil.cloneQualifier(cell))+" ");
              System.out.println("value:"+new String(CellUtil.cloneValue(cell))+" ");
          }
      }
     public static void main(String[] args) throws IOException {
           scanColumn("Score","course");
   }
}

        (4)modifyData(String tableName, String row, String column)

        修改表tableName,行row,列column指定的单元格的数据。

(5)deleteRow(String tableName, String row)

        删除表tableName中row指定的行的记录。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

环境准备-VMware安装

照顾到很多人不是很会环境搭建,我这里会将搭建的步骤讲的细致点 第一步,VMware下载。目的是通过VMware搭建Linux服务器,因为大家大部分还是Windows的电脑,我们先下载虚拟机搭建一个Linux系统的服务器 下载完成之后,点击安装,如下: 点击“下一步” 勾选“我接受许可协议…

算法导论复习——CHP24 单源最短路

单源最短路径问题: 给定一个图G (V,E),找出从给定的源点s∈V到其它每个结点v∈V的最短路径。 这样最短路径具有最优子结构性:两个结点之间的最短路径的任何子路径都是最短的。 基本概念 负权边:权重为负值的边称为负权重的边。 如…

AI计算,为什么要用GPU?

今天这篇文章,我们继续来聊聊芯片。 在之前的文章里,小枣君说过,行业里通常会把半导体芯片分为数字芯片和模拟芯片。其中,数字芯片的市场规模占比较大,达到70%左右。 数字芯片,还可以进一步细分&#xff0…

工具分享:有哪些开源知识库可以使用?

导语: 在信息爆炸的时代,我们常常需要从各种渠道获取知识和解决问题。开源知识库为我们提供了一个便捷的途径,让我们可以轻松地分享和获取知识。本文将介绍5个开源知识库,其中包括HelpLook,帮助你更好地解决问题。 1…

Nacos 持久化及集群的搭建【微服务】

文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务,管理起来非常简单,但…

8个超高清图片素材网站,免费下载,真的很实用~

图片真的是我们日常生活中必不可少的一部分,大到工作,小到发朋友圈都需要配图,那除了自己拍摄之外,哪里还能找到精美又高清的图片素材呢?本期就给大家整理了8个可免费下载的图片素材网站,真的免费下载&…

大创项目推荐 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

揭秘VVIC API接口:引领数据交互新潮流,赋能开发者无限可能

一、引言 VVIC API接口为开发者提供了一种高效、安全的方式,用于获取VVIC平台上的各类数据和服务。通过该接口,开发者可以将VVIC的丰富资源集成到自己的应用或网站中,从而为用户提供更加优质和便捷的服务。 二、VVIC API接口的种类与功能 …

Vue - 多行文本“展开、收起”功能

TextClamp 使用 js 实现文本展开、收起,并非纯 CSS 实现。 Props: fontSize:Number,默认:14lines:Number,默认:1lineHeight:Number,默认:20 F…

odoo与superset集成(二)

继上篇文章odoo与superset集成再次进行superset深度集成 odoo 目前的报表都是需要通过代码定制化的且需要升级发版。 而且图表类型单一,不满足市场的需求。 故 本次把superset 整个看板集成到odoo中进行展示 功能: 1、看板集成展示 2、单点登录supers…

Java解析xml文档,判断对象是一个json是jsonArray还是jsonObject

有一篇xml文档&#xff0c;如下&#xff1a; 现在需要解析出其中的内容&#xff0c;首先需要明确的是&#xff0c;文档是由一个个的标签嵌套形成的&#xff0c;例如整个xml文件是由许多DescriptorRecord标签构成&#xff0c; <DescriptorRecord DescriptorClass "1&…

Oracle-数据库迁移之后性能变慢问题分析

问题背景&#xff1a; ​一套Oracle11.2.0.4的RAC集群&#xff0c;通过Dataguard switchover方式迁移到新机器之后&#xff0c;运行第一天应用报障说应用性能慢&#xff0c;需要进行性能问题排查 问题分析&#xff1a; 首先&#xff0c;登陆到服务器&#xff0c;用TOP看一眼两个…

MCMC:Metropolis-Hastings抽样

马尔可夫链有两个要素&#xff1a; 一步转移概率矩阵&#xff1a;初始分布&#xff1a; 如果这两个要素都确定了&#xff0c;这个链的转移行为就被完全确定下来了。我们就可以求得极限分布 &#xff0c;只需解下面这个方程即可。 但是MCMC试图解决的问题刚好是反过来。即已知…

微同城生活源码系统:专业搭建本地生活服务平台 附带完整的安装部署教程

随着移动互联网的普及&#xff0c;人们越来越依赖手机进行日常生活中的各种活动&#xff0c;包括购物、餐饮、娱乐等。而传统的本地生活服务平台往往存在着功能单一、用户体验差等问题&#xff0c;无法满足用户日益增长的需求。因此&#xff0c;开发一款功能强大、易用性强的本…

HubSpot电子邮件自动化的关键功能和流程!

HubSpot提供了强大的电子邮件自动化工具&#xff0c;使用户能够创建、执行和跟踪复杂的电子邮件市场营销活动。以下是HubSpot电子邮件自动化的一些关键功能和流程&#xff1a; 1.电子邮件工作流程&#xff08;Email Workflows&#xff09;&#xff1a; 用户可以使用HubSpot的工…

达梦数据库报错 执行失败(语句1) -2111: 第1 行附近出现错误: 无效的列名[system]

[TOC](达梦数据库报错 执行失败(语句1) -2111: 第1 行附近出现错误: 无效的列名[system]) 1、报错现象 执行下列sql语句 UPDATE "TEST"."TEST_1" SET "TEST_1"."SALT"123456 where "TEST_1"."ID""system&…

境内深度合成服务算法备案清单(2023年12月)

截止2024年1月3日&#xff0c;第三批深度合成服务算法备案信息的公告尚未发布&#xff0c;预计将会在2024-1-10左右发布&#xff0c;我公司已知晓部分公示名单&#xff0c;如中国电信数字人生成算法&#xff0c;详情联系WX号&#xff1a;SuanfabeiandayuAI生成合成类算法应办理…

「Qt Widget中文示例指南」如何实现一个日历?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文中的CalendarWi…

(2023|AABI,多模态信息瓶颈,变分近似,视觉语言模型可解释性)通过多模态信息瓶颈归因对图像文本表示的视觉解释

Visual Explanations of Image-Text Representations via Multi-Modal Information Bottleneck Attribution 公和众和号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 3. 通过多模态…

【力扣题解】P236-二叉树的最近公共祖先-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P236-二叉树的最近公共祖先-Java题解&#x1f30f;题目描述&#x1f4a1;题解&#x…