大数据开源框架之HBase编程实践

这篇具有很好参考价值的文章主要介绍了大数据开源框架之HBase编程实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HBase的安装部署请看:

(30条消息) 大数据开源框架环境搭建(五)——Hbase完全分布式集群的安装部署_木子一个Lee的博客-CSDN博客

目录

任务1:用HBase提供的HBase Shell命令实现以下指定功能:

1.列出HBase所有的表的相关信息

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

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

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

5.统计表的行数。

任务2:转换为适合于HBase存储的表并插入数据

实验要求:

实验步骤:

任务3:使用Java API编程完成指定功能

实验要求:

基本思路:

部分代码及运行结果:

完整代码:


任务1:用HBase提供的HBase Shell命令实现以下指定功能:

1.列出HBase所有的表的相关信息

初始状态:

大数据开源框架之HBase编程实践

新建一个Person表,再查看:

属性有性别sex,年龄age,姓名name

大数据开源框架之HBase编程实践

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

Person表

大数据开源框架之HBase编程实践

添加数据后再查看

大数据开源框架之HBase编程实践

大数据开源框架之HBase编程实践

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

添加姓名zhang,行名555:

大数据开源框架之HBase编程实践

大数据开源框架之HBase编程实践

添加性别男,年龄18,行名555:

大数据开源框架之HBase编程实践

查看行名为555的信息:

大数据开源框架之HBase编程实践

删除555sex列:

大数据开源框架之HBase编程实践

查看信息,发现sex没了

大数据开源框架之HBase编程实践

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

利用truncate命令删除Person信息

大数据开源框架之HBase编程实践

5.统计表的行数。

第四步清除数据后行数为0

大数据开源框架之HBase编程实践

添加数据后,再统计

添加行p1,姓名为lee,年龄18

大数据开源框架之HBase编程实践

添加行p2,姓名为wang,年龄19

统计后,行数为2:

大数据开源框架之HBase编程实践

任务2:转换为适合于HBase存储的表并插入数据

实验要求:

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

学生表(Student)

学号(S_No)

姓名(S_Name)

性别(S_Sex)

年龄(S_Age)

2015001

Zhangsan

male

23

2015002

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

实验步骤:

Student表:

创建:

大数据开源框架之HBase编程实践

插入数据:

大数据开源框架之HBase编程实践

查看:

大数据开源框架之HBase编程实践Course表

创建:

大数据开源框架之HBase编程实践

插入数据:

大数据开源框架之HBase编程实践

查看:

大数据开源框架之HBase编程实践SC表:

创建:

大数据开源框架之HBase编程实践

插入数据:

大数据开源框架之HBase编程实践

查看:

大数据开源框架之HBase编程实践

任务3:使用Java API编程完成指定功能

实验要求:

基于任务2,使用Java API编程完成以下指定功能:

① createTable(String tableName, String[] fields)

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

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

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

③ scanColumn(String tableName, String column)

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

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

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

⑤ deleteRow(String tableName, String row)

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

基本思路:

在编写程序之前需要导jar

大数据开源框架之HBase编程实践

大数据开源框架之HBase编程实践

大数据开源框架之HBase编程实践

首先编写建立连接函数,创建一个HBase的配置对象,进行配置hbase存储路径和zookeeper服务,然后使用ConnectionFactory建立连接:

大数据开源框架之HBase编程实践

再编写关闭连接代码,包括admin关闭和连接关闭:

大数据开源框架之HBase编程实践

对于createTable(String tableName, String[] fields),先调用init()开启连接,然后把tableName参数转换为TableName类型,使用tableExists判断表是否已存在,如果已存在,那就先调用disableTable(tablename)使其不可用,然后调用deleteTable(tablename)删除原来的表,最后createTable()创建表,最后关闭连接:

大数据开源框架之HBase编程实践

对于addRecord(String tableName,String row,String[] fields,String[] values),主要思路是使用split(“:”)分隔列族和列限定符,建立一个Table对象,使用put添加数据:

大数据开源框架之HBase编程实践

对于scanColumn(String tableName,String column),首先先获取表对象,再利用contains(“:”)判断输入的是具体的列(如Score:Math)还是列族(Score),然后创建Result对象获取数据。如果数据为空,则输出null,否则进行格式化输出showCell():

大数据开源框架之HBase编程实践

格式化输出:

大数据开源框架之HBase编程实践

对于modifyData(String tableName,String row,String column,String val),首先创建一个Table,然后用split(“:”)分隔列族和列限定符,使用put函数修改数据:

大数据开源框架之HBase编程实践

对于deleteRow(String tableName,String row),首先创建一个Table对象和Delete对象,然后调用函数delete(row.getBytes)进行删除

大数据开源框架之HBase编程实践

部分代码及运行结果:

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

代码:

public static void createTable(String tableName,String[] fields) throws IOException {

    init();
    TableName tablename = TableName.valueOf(tableName);

    if(admin.tableExists(tablename)){
        System.out.println("该表已存在,删除后重新创建");
        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();
    System.out.println("创建成功!");
}

运行结果:

第一次运行前:

大数据开源框架之HBase编程实践

 第一次运行后:

大数据开源框架之HBase编程实践

大数据开源框架之HBase编程实践

 第二次运行:

大数据开源框架之HBase编程实践

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

代码:

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();
    System.out.println("添加成功!");
}

 运行结果:

大数据开源框架之HBase编程实践

大数据开源框架之HBase编程实践

(3) scanColumn(String tableName, String column)

代码:

public static void scanColumn(String tableName,String column)throws  IOException{
      init();
      Table table = connection.getTable(TableName.valueOf(tableName));
      Scan scan = new Scan();
      if (column.contains(":")) {
       String[] cols = column.split(":");
       scan.addColumn(cols[0].getBytes(),cols[1].getBytes());
}
      else
       scan.addFamily(Bytes.toBytes(column));
      ResultScanner scanner = table.getScanner(scan);
      Result result = scanner.next();
      if (result==null) {
   System.out.println("null");
}
      for (; 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("行名:"+new String(Bytes.toString(cell.getRowArray(),cell.getRowOffset(), cell.getRowLength()))+" ");
          System.out.println("时间戳:"+cell.getTimestamp()+" ");
          System.out.println("列族:"+new String(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(), cell.getFamilyLength()))+" ");
          System.out.println("列限定符:"+new String(Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(), cell.getQualifierLength()))+" ");
          System.out.println("值:"+new String(Bytes.toString(cell.getValueArray(),cell.getValueOffset(), cell.getValueLength()))+" ");           
      }
  }

运行结果:

查询整个列族Score:

大数据开源框架之HBase编程实践

查询某一列(这里为Score:Math)

大数据开源框架之HBase编程实践

执行完deleteRow(String tableName, String row)后,再查看:

大数据开源框架之HBase编程实践

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

代码:

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());
    String[] cols = column.split(":");
    put.addColumn(cols[0].getBytes(),cols[1].getBytes(),val.getBytes());
    table.put(put);
    table.close();
    close();
    System.out.println("修改成功!");
}

运行结果:

把Lee的英语成绩改为100:

大数据开源框架之HBase编程实践

修改前:

大数据开源框架之HBase编程实践

修改后:

大数据开源框架之HBase编程实践

(5) deleteRow(String tableName, String row)

代码:

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();
    System.out.println("删除成功!");
}

运行结果:

大数据开源框架之HBase编程实践

大数据开源框架之HBase编程实践文章来源地址https://www.toymoban.com/news/detail-427662.html

完整代码:

package lab2;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.thrift2.generated.THBaseService.AsyncProcessor.closeScanner;
import org.apache.hadoop.hbase.util.Bytes;


import java.io.IOException;

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

    public static void main(String[] args)throws IOException{
       //创建表
       //String[] fields1= {"Score"};
       //createTable("StuHbase", fields1);
       //添加数据
       //String[] fields2= {"Score:Math","Score:Computer Science","Score:English"};
       //String[] values= {"90","95","99"};
       //addRecord("StuHbase","Lee",fields2,values);
       //查询
        //scanColumn("StuHbase","Score");//查询整个列族
        scanColumn("StuHbase","Score:Math");//查询某一列
       //修改数据
       //modifyData("StuHbase", "Lee", "Score:English", "100");
       //删除数据
       //deleteRow("StuHbase","Lee");
    }
    //建立连接
    public static void init(){
        configuration  = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://master:9000/hbase");
        configuration.set("hbase.zookeeper.quorum","master,slave1,slave2");
        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 createTable(String tableName,String[] fields) throws IOException {

        init();
        TableName tablename = TableName.valueOf(tableName);

        if(admin.tableExists(tablename)){
            System.out.println("该表已存在,删除后重新创建");
            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();
        System.out.println("创建成功!");
    }


    //添加数据
    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();
        System.out.println("添加成功!");
    }
    
    //浏览
    public static void scanColumn(String tableName,String column)throws  IOException{
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        if (column.contains(":")) {
           String[] cols = column.split(":");
           scan.addColumn(cols[0].getBytes(),cols[1].getBytes());
      }
        else
           scan.addFamily(Bytes.toBytes(column));
        ResultScanner scanner = table.getScanner(scan);
        Result result = scanner.next();
        if (result==null) {
         System.out.println("null");
      }
        for (; 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("行名:"+new String(Bytes.toString(cell.getRowArray(),cell.getRowOffset(), cell.getRowLength()))+" ");
            System.out.println("时间戳:"+cell.getTimestamp()+" ");
            System.out.println("列族:"+new String(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(), cell.getFamilyLength()))+" ");
            System.out.println("列限定符:"+new String(Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(), cell.getQualifierLength()))+" ");
            System.out.println("值:"+new String(Bytes.toString(cell.getValueArray(),cell.getValueOffset(), cell.getValueLength()))+" ");           
        }
    }
    //修改数据
    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());
        String[] cols = column.split(":");
        put.addColumn(cols[0].getBytes(),cols[1].getBytes(),val.getBytes());
        table.put(put);
        table.close();
        close();
        System.out.println("修改成功!");
    }
    //删除数据
    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();
        System.out.println("删除成功!");
    }
}

到了这里,关于大数据开源框架之HBase编程实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 大数据实验三-HBase编程实践

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

    2024年04月12日
    浏览(64)
  • HBase Java API编程实践

    本实例采用Eclipse开发工具。 启动Eclipse,启动以后,出现如下图所示界面,点击ok按钮。 启动进入Eclipse以后的程序开发界面如下图所示。 点击界面顶部的“File”菜单,在弹出的子菜单(如下图所示)中选择“New”,再选择子菜单中的“Project”。 这时会弹出一个Java工程创建

    2024年02月05日
    浏览(38)
  • HBase的编程实践(实验3_熟悉常用的HBase操作)

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

    2024年02月01日
    浏览(45)
  • HBase的数据类型与数据结构实践

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase的核心功能是提供低延迟、高可扩展性的数据存储和访问,适用于实时数据处理和分析场景。 在HBase中,数据是以行为单位

    2024年02月20日
    浏览(44)
  • 大数据开源框架环境搭建(七)——Spark完全分布式集群的安装部署

    前言:七八九用于Spark的编程实验 大数据开源框架之基于Spark的气象数据处理与分析_木子一个Lee的博客-CSDN博客_spark舆情分析 目录 实验环境: 实验步骤: 一、解压 二、配置环境变量:  三、修改配置文件  1.修改spark-env.sh配置文件: 2.修改配置文件slaves: 3.分发配置文件:

    2024年02月11日
    浏览(54)
  • 大数据开源框架环境搭建(四)——HDFS完全分布式集群的安装部署

    前言:本实验的所有路径均为本人计算机路径,有些路径需要看自己的,跟着我的一起做最好。普通用户下大部分命令需要加sudo,root模式下不用。如果怕麻烦,直接在root用户下操作。 目录 实验环境: 实验步骤: 一、配置NAT网络 ,分配静态IP地址 1.打开VMware,选择编辑,

    2024年02月05日
    浏览(56)
  • 开源 Serverless 框架 Laf 性能优化实践

    Laf 是一个完全开源的 Serverless 框架,Laf 的 Node.js 运行时容器 (以下简称为 Runtime ) 是 Laf 的 函数执行环境 ,依托于 Express.js 框架。采用容器进程常驻的方式,每一个应用对应于一个或多个容器 (弹性伸缩下),底层使用了 Node.js 的 vm 模块,使用 MongoDB 的 watch() 方法来监听函数

    2024年02月04日
    浏览(41)
  • HBase的数据压缩与存储效率实践

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase适用于大规模数据存储和实时数据访问场景,如日志记录、实时数据分析、实时数据挖掘等。 数据压缩是提高存储效率和

    2024年02月20日
    浏览(35)
  • 全量、增量数据在HBase迁移的多种技巧实践

    作者经历了多次基于HBase实现全量与增量数据的迁移测试,总结了在使用HBase进行数据迁移的多种实践,本文针对全量与增量数据迁移的场景不同,提供了1+2的技巧分享。 1.背景 在HBase使用过程中,使用的HBase集群经常会因为某些原因需要数据迁移。大多数情况下,可以用离线

    2024年02月06日
    浏览(47)
  • HBase的数据库设计模式与实践

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase适用于大规模数据存储和实时数据访问的场景,如日志记录、实时数据分析、实时搜索等。 在现实应用中,HBase的数据库设

    2024年02月20日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包