实验三-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,coursecreateTable("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指定的行的记录。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日HiveSQL_求解运动员最大连胜的次数_15

1.现需要从运动员比赛结果表中统计每个运动员最大连胜的次数 需求结果: 2.所用到的表和数据 --表创建 CREATE TABLE athlete_results (athlete_id INT,match_time TIMESTAMP,result VARCHAR(10) -- win, lose, draw );--数据装载 INSERT INTO athlete_results …

GBASE南大通用 GCDW阿里云计算巢:自动化部署云原生数据仓库

目前,GBASE南大通用已与阿里云计算巢合作,双方融合各自技术优势,助力企业用户实现云上数据仓库的自动化部署,让用户在云端获取数据仓库服务“更简单”,让用户在云端使用数据仓库服务“更便捷”,满足企业用户…

金融追梦者,向着春天出发——社科院与美国杜兰大学金融管理硕士

随着时代的进步和社会的变迁,教育已经不再是单纯的学生时代的事情,而是贯穿人的一生。特别是在金融行业,由于其变幻莫测的特性,在职继续攻读硕士学位的人越来越多。他们希望通过进一步的学习和研究,提升自己的专业素养…

宏电股份5G RedCap终端产品助力深圳极速先锋城市建设

12月26日,“全城全网,先锋物联”深圳移动5G-A RedCap助力深圳极速先锋城市创新发布会举行,宏电股份携一系列5G RedCap终端产品应邀参与创新发布会,来自全国5G生态圈的各界嘉宾、专家学者济济一堂,共探信息化数字化创新…

鸿鹄工程项目管理系统源码:Spring Boot带来的快速开发与部署体验

随着企业规模的不断扩大和业务的快速发展,传统的工程项目管理方式已经无法满足现代企业的需求。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,企业需要借助先进的数字化技术进行转型。本文将介绍一款采用Spring CloudSpring BootMybat…

流媒体学习之路(WebRTC)——Pacer与GCC(5)

流媒体学习之路(WebRTC)——Pacer与GCC(5) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全…

组播(多播)原理及代码

单播地址标识单个 IP 接口,广播地址标识某个子网的所有 IP 接口,多播地址标识一组 IP 接口。 单播和广播是寻址方案的两个极端(要么单个要么全部),多播则意在两者之间提供一种折中方 案。多播数据报只应该由对它感兴…

c++ / day04

1. 整理思维导图 2. 全局变量,int monster 10000;定义英雄类hero,受保护的属性string name,int hp,int attck;公有的无参构造,有参构造,虚成员函数 void Atk(){blood-0;},法师类继承自英雄类&a…

MATLAB基本绘图操作(二维和三维绘图)

MATLAB基本绘图操作 文章目录 MATLAB基本绘图操作1、二维平面绘图2、三维立体绘图 1、二维平面绘图 x0:0.01:2*pi; %从09开始,每次递增0.01,一直到2*pi结束 y sin(x) ; figure %建立一个幕布 plot(x, y) %绘制二维的平面图 title(y sin(x)) %标题…

BIND-DNS配置介绍

一、主要配置文件 /etc/named.conf options { //Option 段全部配置 listen-on port 53 { 127.0.0.1; };//表示BIND将在53端口监听,若需要对所有IP进行监听,则修改为// listen-on port 53 { any; }; directory "/var/named"…

前端开发个人简历范本(2024最新版-附模板)

前端开发工程师个人简历范本> 年龄 25岁 性别 男 毕业院校 XX大学 张三 学历 邮箱 leeywai-tools.cn 本科 专业 计算机科学与技术 个人梗概 拥有扎实的前端开发技能和丰富的实践经验 善于与团队合作,适应能力强,能够快速融入团队并贡献自…

从0开始python学习-38.pytest的parametrize结合yaml实现数据驱动

目录 1. 数据驱动 2. 定制化allure报告 1. 数据驱动 yaml文件中写入 -data: 1ces: 2- test:data: 3 数据驱动:pytest.mark.parametrize("参数名","参数值(可以是list或tuple)") 注意:这里参数值只能是列…