首页 > 其他分享 >10.23

10.23

时间:2025-01-02 15:43:36浏览次数:1  
标签:10.23 String tableName table HBase public row

实验3

熟悉常用的HBase操作

 

 

1.实验目的

       (1)理解HBase在Hadoop体系结构中的角色;

       (2)熟练使用HBase操作常用的Shell命令;

       (3)熟悉HBase操作常用的Java API。

2.实验平台

(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);

(2)Hadoop版本:3.1.3;

(3)HBase版本:2.2.2;

(4)JDK版本:1.8;

(5)Java IDE:Eclipse。

3. 实验步骤   

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

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

 

 

 

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

 

 

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

 

 

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

 

(5)      统计表的行数。

 

(二)HBase数据库操作

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

表14-3 学生表(Student)

学号(S_No)

姓名(S_Name)

性别(S_Sex)

年龄(S_Age)

2015001

Zhangsan

male

23

2015002

Mary

female

22

2015003

Lisi

male

24

 

表14-4 课程表(Course)

课程号(C_No)

课程名(C_Name)

学分(C_Credit)

123001

Math

2.0

123002

Computer Science

5.0

123003

English

3.0

 

表14-5 选课表(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. 请编程实现以下功能:

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

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

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

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

       (3)scanColumn(String tableName, String column)

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

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

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

(5)deleteRow(String tableName, String row)

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

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.*;

import org.apache.hadoop.io.IOUtils;

import org.apache.hadoop.util.Progressable;

public class HbaseTest {

     public static Configuration configuration;

     public static Connection connection;

     public static Admin admin;

     public static long ts;

      

     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已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表

     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);

     }

     HTableDescriptor hTableDescriptor = new HTableDescriptor(tablename);

     for (String str : fields) {

     HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);

     hTableDescriptor.addFamily(hColumnDescriptor);

     }

     admin.createTable(hTableDescriptor);

     close();

     }

 

     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 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 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 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();

     }

 

    

}

 

4.实验报告

题目:

熟悉常用的HBase操作

姓名

王士英

日期11.17

实验环境:linux

实验内容与完成情况:

出现的问题:(1) 打开hbase shell无法正常运行

 

(2) hbase:023:0> drop 'STUDENT' ERROR: Table STUDENT is enabled. Disable it first. For usage try 'help "drop"' Took 0.0225 seconds hbase:024:0>

 

(3) API连接失败

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):(1) 打开hbase之前要先打开zookeeper

(2) 在删除之前需要先禁用它disable 'STUDENT' 然后drop 'STUDENT'

(3) API连接时conf.set("hbase.rootdir", "hdfs://hadoop102:8020/hbase");

 

 

 

标签:10.23,String,tableName,table,HBase,public,row
From: https://www.cnblogs.com/jais/p/18647907

相关文章

  • Bclinux离线安装PostgreSQL10.23+PostGIS2.5编译安装配置
    一、安装PostgreSQL1、安装PostgreSQL解压PostgreSQL软件包tar-zxvfpostgresql.tar.gz配置并安装PostgreSQL[postgres@localhostsetup]$tar-zxvfpostgresql-10.23.tar.gz进入解压后的目录,按照PostgreSQL的官方文档进行配置和安装。这通常涉及到创建数据目录、配置postgresq......
  • 5.CentOS-7-Minimal 安装KubernetesV1.23.17&DockerV20.10.23
    1.环境准备主节点IP:192.168.254.130node1IP:192.168.254.131node2IP:192.168.254.132OSversion:CentOS7miniCPUArchitecture:x86_64/amd64K8sversion:v1.23.17Dockerversion:20.10.232.安装前准备#安装依赖yuminstall-ycurlwgetsystemdbash-completi......
  • 10.23
    今日学习代码<%--CreatedbyIntelliJIDEA.TochangethistemplateuseFile|Settings|FileTemplates.--%><%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</ti......
  • 10.23-10.27
    10.23今日任务:Java学习(完成)Java作业(完成)英语单词(未完成) 英语听力(完成)10.24今日任务:数据结构作业(完成)英语单词(完成) 10.25今日任务:英语单词(完成)  10.26今日任务:满课英语单词(完成) 10.27今日任务:javaweb学习(完成)英语单词(完成)......
  • 大二快乐日记10.23
    在MySQL中,当需要删除已创建的数据库时,可以使用DROPDATABASE语句。其语法格式为:DROPDATABASE[IFEXISTS]<数据库名>语法说明如下:<数据库名>:指定要删除的数据库名。IFEXISTS:用于防止当数据库不存在时发生错误。DROPDATABASE:删除数据库中的所有表格并同时删除数据库。使......
  • 10.23
    学习jdbc的基础概念,快速入门1.jdbc的概念JDBC(JavaDataBaseConnectivity:java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。JDBC的作用:可以通过java代码操作数据库2.jdbc的本质其实就是java官方提供......
  • 每日总结10.23
    今天是充实的一天,早上我在寝室里开始了线上自学Java。我深入学习了Java编程语言的基础知识,包括数据类型、变量声明和控制流等。通过网络教程和编程练习,我努力提高了我的编程技能。下午,我参加了Java课程,老师讲解了一些高级的Java概念,如面向对象编程、异常处理和文件操作。我对这些......
  • 10.23~10.29
    补题补了Mea的Math2反演内容。学习了一下树分块的模板。补了部分Hanghang的dp优化。补了一点基础DS、基础dp。比赛打了一场lxsround和北大附联考,感觉发挥不错(希望NOIP有这个状态),但是都有挂分。lxsround第四题写挂了,100->40。北大附联考第三题写挂了,100->......
  • 上周热点回顾(10.23-10.29)
    热点随笔:· C#winform软件实现一次编译,跨平台windows和linux兼容运行,兼容VisualStudio原生界面Form表单开发 (j.king)· 那个热血澎湃的少年,他居然顶不住了! (刘牌)· Net高级调试之一:开始认识一些调试工具 (可均可可)· 浅析C#Console控制台为什么也会卡死 (一线码......
  • 10.23
    上午工程实训学习了电路板的焊接,把电阻,电容二极管等原件焊接到电路板上,然后实现通电使小灯泡亮,过程中遇到了很多困难,但是都克服了过去,最终完成了任务,下午上了java,讲了流和文件,并且进行了课堂测试翻译哈利波特英文版。......