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

这篇具有很好参考价值的文章主要介绍了大数据实验 实验三:熟悉常用的HBase操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验三 熟悉常用的HBase操作

一、实验目的

(1)理解HBase在Hadoop体系结构中的角色;
(2)熟练使用HBase操作常用的Shell命令;
(3)熟悉HBase操作常用的Java API。

二、实验平台

操作系统:centos7;
Hadoop版本:3.3;
HBase版本:2.2.2;
JDK版本:1.8;
Java IDE:IDEA。

三、实验内容和要求

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

(1) 列出HBase所有的表的相关信息,例如表名、创建时间等;

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库

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

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库

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

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库

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

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库

(5) 统计表的行数。

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,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 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 请编程实现以下功能:

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

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

package Main;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;

public class main {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void init(){//建立连接
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://127.0.0.1:8020/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(connection != null){
                connection.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    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(int i=0;i<fields.length;i++){
            ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(fields[i])).build();
            tableDescriptor.setColumnFamily(family);
        }
        admin.createTable(tableDescriptor.build());
        close();
    }
    public static void main(String[] args){
        String[] fields = {"id","score"};
        try{
            createTable("test",fields);
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

运行结果

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库

(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存储这三门课的成绩。

package Main;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;


public class main {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void init(){//建立连接
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://127.0.0.1:8020/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(connection != null){
                connection.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    public static void addRecord(String tableName,String row,String[] fields,String[] values) throws IOException{
        init();//连接Hbase
        Table table = connection.getTable(TableName.valueOf(tableName));//表连接
        Put put = new Put(row.getBytes());//创建put对象
        for(int i=0;i<fields.length;i++){
            String[] cols = fields[i].split(":");
            if(cols.length == 1){
                put.addColumn(fields[i].getBytes(),"".getBytes(),values[i].getBytes());
            }
            else{
                put.addColumn(cols[0].getBytes(),cols[1].getBytes(),values[i].getBytes());
            }
            table.put(put);//向表中添加数据
        }
        close();//关闭连接
    }
    public static void main(String[] args){
        String[] fields = {"Score:Math","Score:Computer Science","Score:English"};
        String[] values = {"85","80","90"};
        try{
            addRecord("grade","S_Name",fields,values);
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

3)scanColumn(String tableName, String column)

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

package Main;

import java.io.IOException;
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.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;


public class main {
    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:8020/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(connection != null){
                connection.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    public static void showResult(Result result){
        Cell[] cells = result.rawCells();
        for(int i=0;i<cells.length;i++){
            System.out.println("RowName:"+new String(CellUtil.cloneRow(cells[i])));//打印行键
            System.out.println("ColumnName:"+new String(CellUtil.cloneQualifier(cells[i])));//打印列名
            System.out.println("Value:"+new String(CellUtil.cloneValue(cells[i])));//打印值
            System.out.println("Column Family:"+new String(CellUtil.cloneFamily(cells[i])));//打印列簇
            System.out.println();
        }
    }
    public static void scanColumn(String tableName,String column){
        init();
        try {
            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()){
                showResult(result);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally{
            close();
        }
    }
    public static void main(String[] args){
        scanColumn("test","id");
    }
}

运行结果

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库

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

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

package Main;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;


public class main{
    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(connection != null){
                connection.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    public static void modifyData(String tableName,String row,String column,String value) throws IOException{
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(row.getBytes());
        String[] cols = column.split(":");
        if(cols.length == 1){
            put.addColumn(column.getBytes(),"".getBytes(), value.getBytes());
        }
        else{
            put.addColumn(cols[0].getBytes(), cols[1].getBytes(), value.getBytes());
        }
        table.put(put);
        close();
    }
    public static void main(String[] args){
        try{
            modifyData("test","1","score","100");
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

运行结果

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库此时row为1的score已经改为100

(5)deleteRow(String tableName, String row)
删除表tableName中row指定的行的记录。
package Main;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Table;


public class main {
    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:8020/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(connection != null){
                connection.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    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);
        close();
    }
    public static void main(String[] args){
        try{
            deleteRow("test","2");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库
此时row=2已经被删除


出现的问题

问题一
在安装hbase后master-status用浏览器无法打开,而此时Hmaster和HregionServer,QuorumPeerMain已经启动

问题二
大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库

解决方法

问题一
在连接Hbase后使用list命令后发现如下
大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库
发现原因是因为我启动Hbase使用的不是hbase自带的zookeeper,而是自己独立安装的,在hbase-env.sh下增加

export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"

重新启动后
大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库
问题解决

问题二
发现是maven导入包出现问题,再将hbase-client包换为2.5.3后问题解决
大数据实验 实验三:熟悉常用的HBase操作,大数据实验,大数据,hbase,数据库文章来源地址https://www.toymoban.com/news/detail-759358.html

到了这里,关于大数据实验 实验三:熟悉常用的HBase操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验03熟悉常用的HBase操作

    🌊 Hbase相关配置参考网址: 😈http://dblab.xmu.edu.cn/blog/install-hbase/ 1️⃣ 理解HBase在Hadoop体系结构中的角色; 2️⃣ 熟练使用HBase操作常用的Shell命令; 3️⃣ 熟悉HBase操作常用的Java API; 操作系统:Linux 虚拟机 :ubuntu Hadoop版本:2.7.1 HBase版本:1.1.2 JDK版本:1.8版本 Java IDE:ID

    2023年04月12日
    浏览(74)
  • HBase的编程实践(实验3_熟悉常用的HBase操作)

    一、Hbase中使用Shell命令: ① HBase中创建表:(create 命令:第一个变量是表名,然后是列族名) 语法:create \\\'表名称\\\',\\\'列族名称1\\\',\\\'列族名称2\\\',\\\'列族名称N\\\' 通过命令 describe \\\'student\\\'  进行查看表的结构: (desc ‘表名’,查看表的结构) ✿ 增加数据 ② put: (put 命令:第一

    2024年02月01日
    浏览(45)
  • 大数据实验 实验四:NoSQL 和关系数据库的操作比较

    理解四种数据库(MySQL、HBase、Redis 和 MongoDB)的概念以及不同点; 熟练使用四种数据库操作常用的 Shell 命令; 熟悉四种数据库操作常用的 Java API。 操作系统:centos7 Hadoop 版本:3.3; MySQL 版本:8.0.22; HBase 版本:2.4.11; Redis 版本:5.0.5; MongoDB 版本:5.0; JDK 版本:1.8; Java

    2024年04月16日
    浏览(39)
  • 云计算与大数据实验七 HBase的安装与基本操作

    一、实验目的 回顾 Hadoop 和 Zookeeper安装与配置 掌握 HBase 安装与配置 理解HBase工作原理 掌握HBase表的基本操作 二、实验内容 HBase 安装与配置 使用 HBase shell 指令创建表 使用 HBase shell 命令添加/删除数据 使用命令删除表 三、实验步骤 (一)HBase 安装与配置 HBase安装 HBase 的安

    2024年02月03日
    浏览(47)
  • 大数据实验三-HBase编程实践

    目录 一.实验内容 二.实验目的 三.实验过程截图及说明 1、安装HBase 2、配置伪分布式模式: 3、使用hbase的shell命令来操作表: 4、使用hbase提供的javaAPI来编程实现类似操作: 5、实验总结及心得体会 6、完整报告在文章开头,挂载。 HBase编程实践: 1)在Hadoop基础上安装H

    2024年04月12日
    浏览(64)
  • 大数据 | 实验一:大数据系统基本实验 | 熟悉常用的HDFS操作

    1 )理解 HDFS 在 Hadoop 体系结构中的角色。 2 )熟练使用 HDFS 操作常用的 shell 命令。 3 )熟悉 HDFS 操作常用的 Java API。 1 )操作系统:Linux; 2 )Hadoop 版本:3.2.2; 3 )JDK 版本:1.8; 4 )Java IDE:Eclipse。 编程实现 以下功能,并利用 Hadoop 提供的 Shell 命令 完成相同任务 1)向

    2024年02月02日
    浏览(41)
  • 大数据编程实验二:熟悉常用的HDFS操作

    实验目的 1、理解HDFS在Hadoop体系结构中的角色 2、熟悉使用HDFS操作常用的Shell命令 3、熟悉HDFS操作常用的Java API 实验平台 1、操作系统:Windows 2、Hadoop版本:3.1.3 3、JDK版本:1.8 4、Java IDE:IDEA 前期:一定要先启动hadoop   1、编程实现以下功能,并利用Hadoop提供的Shell命令完成相

    2024年02月08日
    浏览(45)
  • 熟悉常用的HBase操作

    理解HBase在Hadoop体系结构中的角色; 熟练使用HBase操作常用的Shell命令; 操作系统:Linux Hadoop版本:3.1.3 HBase版本:2.2.2 JDK版本:1.8 1.用Hadoop提供的HBase Shell命令实现以下指定功能: 准备工作: 启动hbash: 进入shell: (1)列出HBase所有的表的相关信息,例如表名; (2)在终端打

    2023年04月17日
    浏览(37)
  • 【基于HBase和ElasticSearch构建大数据实时检索项目】

    利用HBase存储海量数据,解决海量数据存储和实时更新查询的问题; 利用ElasticSearch作为HBase索引,加快大数据集中实时查询数据; 使用到的大数据组件有:Hadoop-2.7.3、HBase-1.3.1、zookeeper-3.4.5、ElasticSearch-7.8.0 实验环境: 虚拟机(操作系统CentOS7.6) + 个人PC(Windows)+ Eclipse或者

    2024年02月14日
    浏览(47)
  • 大数据技术原理及应用课实验2 :熟悉常用的HDFS操作

    实验2  熟悉常用的HDFS操作 目录 实验2  熟悉常用的HDFS操作 一、实验目的 二、实验平台 三、实验步骤(每个步骤下均需有运行截图) (一)编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务: (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则

    2024年04月14日
    浏览(112)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包