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

2023-10-26

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所有的表的相关信息

初始状态:

新建一个Person表,再查看:

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

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

Person表

添加数据后再查看

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

添加姓名zhang,行名555:

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

查看行名为555的信息:

删除555sex列:

查看信息,发现sex没了

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

利用truncate命令删除Person信息

5.统计表的行数。

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

添加数据后,再统计

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

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

统计后,行数为2:

任务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表:

创建:

插入数据:

查看:

Course表

创建:

插入数据:

查看:

SC表:

创建:

插入数据:

查看:

任务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存储路径和zookeeper服务,然后使用ConnectionFactory建立连接:

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

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

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

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

格式化输出:

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

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

部分代码及运行结果:

(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("创建成功!");
}

运行结果:

第一次运行前:

 第一次运行后:

 第二次运行:

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

 运行结果:

(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:

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

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

(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:

修改前:

修改后:

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

运行结果:

完整代码:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据开源框架之HBase编程实践 的相关文章

  • 这两个绑定声明与 Google Guice 有什么区别?

    有什么区别 bind FooImpl class in Scopes SINGLETON bind Foo class to FooImpl class and bind Foo class to FooImpl class in Scop
  • Java中printf左对齐

    当我运行该程序时 阶乘值右对齐 有没有办法让它左对齐 同时保持中间 50 个空格 public class Exercise 5 13 public static void main String args int numbers 1 2
  • 具有多字符替换的字符串组合(产生返回Java的替代重写)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 还有另一篇 Stack Overflow 帖子是为与车辆登记号相关的算法创建的 根据输入的车牌 例如ABC123 和列表 替换值 例如
  • 如何使用 mongoTemplate 实现 Mongodb Collection 的分页

    我是 mongoDb 中的菜鸟 我需要为任何特定集合实现分页 例如说 我有一个 Foo 集合 并且有一个返回 Foo 集合中所有记录的函数 public List
  • Java 8 列表到带有总和的 EnumMap

    我有以下课程 public class Mark private Long id private Student student private Integer value 0 private Subject subject public
  • 当服务器仅从请求中读取标头时,Http 客户端未收到响应

    我在 Java 中搞乱了 HTTP 和套接字 希望你能对此有所了解 当我用 Java SE 11 编写的 HTTP 服务器没有读取整个请求然后响应时 客户端不会收到它或收到错误 这是为什么 在服务器读取整个请求之前 客户端是否无法读取响应
  • 在 Hive 中分解一行 XML 数据

    我们将 XML 数据作为名为 XML 的单个字符串列加载到 Hadoop 中 我们正在尝试检索数据级别 并将其标准化或分解为单行进行处理 你知道 就像表格一样 已经尝试过分解功能 但没有得到我们想要的 示例 XML
  • 如何使用jsp上传服务器文件夹上的文件[重复]

    这个问题在这里已经有答案了 我正在尝试使用 servlet jsp 将一些图像上传到位于我的服务器上的文件夹中 下面是我的代码 它在我的本地计算机上运行 import java io import java util import java
  • Spring MVC - 从 JSP 提交对象

    我有一个显示客户列表的 JSP ArrayList searchResults 我希望能够选择其中之一 并将其 提交给 Spring MVC 控制器 但是 我似乎无法传递所选对象 只能传递它的属性 例如 customerId 我真的需要传递
  • 无法向 openfire 服务器发送消息

    我无法使用 SMACK API 向 openfire 服务器上的 XMPP 客户端发送消息 我不确定我哪里出错了 我在 gtalk 上测试了相同的代码 它工作正常 public class SenderTest public static
  • 0x0A 和 0x0D 之间的区别

    我正在研究蓝牙 我试图编写代码以在连接时继续监听输入流 我遇到了以下代码片段 int data mmInStream read if data 0x0A else if data 0x0D buffer new byte arr byte
  • 从文件执行db语句

    我在我的应用程序中使用嵌入式 Apache derby 我有一个名为的 SQL 脚本创建的数据库 sql创建数据库中的所有表并用初始数据填充它 例如 SET SCHEMA APP CREATE TABLE study study id bi
  • 如何在javafx中通过事件传递参数?

    我有以下示例 我想将参数 文本 与事件一起传递 当单击按钮 bla 时 我该怎么做 EventHandler
  • 如何在 Spring Boot 中跳过将某些 @Entity 类创建为 h2(内存中)数据库中的表?

    我正在尝试构建一个使用 2 个数据源的 Spring Boot 应用程序 我现在的主要数据库是内存数据库 仅用于测试目的 其中的表是在我创建的 sql 文件的帮助下填充的 另一个数据库 oracledb 具有已填充的表 我想实现什么目标 我
  • 序列化/反序列化 LinkedHashMap (android) java

    所以我想将 LinkedHashMap 传递给意图 SEND THE MAP Intent singlechannel new Intent getBaseContext singlechannel class singlechannel
  • 使用 JSeperator - Java 时出现异常间隙

    我一直在开发 Swing GUI 并在添加后出现一些不寻常和不需要的间隙JSeperator 知道如何删除它们吗 或者任何其他选择来很好地实现这一目标 视觉描述 之前差距就很明显了JLabel 速度 及之后JSlider 相关代码 cont
  • 使用 Java 重新启动 Tomcat

    我需要从 Java 代码重新启动 tomcat 例如 如果某个查询在一段时间内没有执行 那么它将自动重新启动 tomcat 我已经尝试了以下关闭和启动代码 但是当我们关闭tomcat时 java代码将不会运行并且tomcat不会启动 注意
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • 返回数据集的 kSoap 和 .Net Web 服务

    我知道使用数据集是一个很大的罪恶 但由于该服务不在我的控制之下 并且创建代理服务的前景是不可能的 我想看看是否有人创建了可以使用 kSoap 序列化器反序列化的类结构 或者我是否吸错了东西 同时要启动它 看看是否可行 以下是预期的结果数据
  • Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

    正如这个问题中所描述的 OpenJDK 与 Java HotspotVM https stackoverflow com q 44335605 1593077 Oracle 的商业 Hotspot JVM 本质上是 OpenJDK 加上一些

随机推荐

  • 对MTK的pdaf对焦方式的分析

    上周五分析了下mt6752的pdaf对焦规律 以前一直认为pdaf对焦不可能准到一步到位 应该是走到清晰点附近后再用CAF 反差式 对焦到最清晰点 但通过log查看 感觉应该是分几种情况 如果pdaf的可信度高 比如色彩分明 环境亮度高 则
  • Angular基础(八) Observable & RxJS

    对于一个应用来说 获取数据的方法可以有很多 比如 Ajax Websockets LocalStorage Indexdb Service Workers 但是如何整合多种数据源 如何避免BUG 如何提高可维护性 如何提升应用的速度 这些却
  • vue3中使用jweixin-module报错

    在vue3中使用 var jweixin require jweixin module 会编译报错 require is not defined 没有require模块 改成import的话 由于jweixin module不支持expor
  • REDIS 4 集群搭建

    REDIS 4 集群搭建 1 下载 redis wget http download redis io releases redis 4 0 10 tar gz tar xzf redis 4 0 10 tar gz cd redis 4
  • [学习笔记]Centos7虚拟机网络重启失败

    好久没用虚拟机了 这次学习的时候打开之前安装好的Centos7发现又连不了网了 在网上跟着教程配置好IP之后重启网络服务 执行service network restart命令 出现了错误 Restarting network via sy
  • Install ModelSim on Linux

    To use ModelSim on Linux is quite difficult There is only exe file for installing ModelSim on Windows on the official we
  • php的phpstoem代码编辑器的快捷键,比较常用的归纳

    1 CTRL SHIFT N 全局搜索文件 优先文件名匹配的文件 2 CTRL R 当前窗口替换文本 3 CTRL E 最近打开的文件 4 F5 复制文件 文件夹 5 CTRL C 复制 CTRL V 粘贴 CTRL X 剪切 删除行 Ct
  • Linux 面试题-(腾讯,百度,美团,滴滴)

    Linux 面试题 腾讯 百度 美团 滴滴 分析日志t log 访问量 将各个ip 地址截取 并统计出现次数 并按从大到小排序 腾讯 http 192 168 200 10 index1 html http 192 168 200 10 i
  • 用两成数据也能训练出十成功力的模型,Jina Embeddings 这么做

    句向量 Sentence Embeddings 模型在多模态人工智能领域起着至关重要的作用 它通过将句子编码为固定长度的向量表示 将语义信息转化为机器可以处理的形式 在 文本分类 信息检索和相似度计算 等多个方面有着广泛应用 然而长期以来
  • unity 动画 - Animator 的使用

    创建 animator 文件 命名为 nanzhanshi2 controller 双击打开文件 默认三个 State AnyState Entry Exit Parameters 有四种类型的参数 Float Int Bool Trigg
  • cocos控制相机旋转

    import decorator Component Event EventMouse find Input input Node v3 Vec3 from cc const ccclass property decorator cccla
  • 1.Cherry Pick与Create Patch的区别

    Cherry Pick与Create Patch的区别 结论 实验 场景1 应用时无冲突 场景2 应用时产生冲突 使用cherry pick 使用patch 场景3 产生冲突 并且有其他文件的变更 原理 结论 1 应用无冲突时cherry
  • Java全栈体系路线(总结不易,持续更新中)

    文章目录 Java全栈工程师 font color orange Java基础 基础语法 面向对象 工具类 集合框架 序列化 反射机制 注解 文件处理 设计模式 视频教程 文档教程 练习题 面试题 GUI模块 多线程模块 Socket模块
  • VS2019修改代码后必须重新生成解决方案

    这是因为没有配置好 在工具 gt 选项 gt 生成和运行 gt 运行时 项目过期 在这里选择始终生成 这样的话就可以在修改代码之后自动重新生成解决方案
  • 钉钉环境下H5开发微应用遇到的问题和BUG(持续更新)

    项目类型 CRM 项目描述 微应用是钉钉为连接企业办公打造的移动入口 通过微应用你可以将企业的业务审批 内部系统 生成 协作 管理 上下游沟通连接到钉钉 该项目是在钉钉的基础上开发一个供本公司销售使用的客户管理系统 包含了客户 项目 订单
  • mysql实现行转列作为临时表、以及字符分割行转列

    1 需求 实现两个日期段转换为具体的日期天数 2022 10 23至2022 10 26得到一张2022 10 23 2022 10 24 2022 10 25 2022 10 26的临时表 SELECT DATE FORMAT DATE
  • vivado关联第三方编辑器

    前言 可忽略不看 绑定vivado的第三方编辑器的时候 本人曾经看过一些教程 但是对于路径的设置看的一头雾水 所以就把路径构成记录了下来 希望对你有帮助 需要关键在于step6中的路径格式 路径的格式简单分为三个部分 需要绑定的编辑器的路径
  • java中匿名内部类的匿名构造函数是怎么用的

    java中匿名内部类的匿名构造函数是怎么用的 下面的例子说明匿名内部类的匿名构造函数的用法 例2 7 2 0 interface FigureMark to win void whoAmI public class Test public
  • 刀片服务器切换显示,刀片机服务器切换

    刀片机服务器切换 内容精选 换一换 当保护组的生产站点发生故障时 将保护组的生产站点切到当前的容灾站点 即另一端AZ 启用当前容灾站点的云硬盘以及云服务器等资源 故障切换完成之后 保护组的当前生产站点变成故障切换发生之前的容灾站点 且生产站
  • 大数据开源框架之HBase编程实践

    HBase的安装部署请看 30条消息 大数据开源框架环境搭建 五 Hbase完全分布式集群的安装部署 木子一个Lee的博客 CSDN博客 目录 任务1 用HBase提供的HBase Shell命令实现以下指定功能 1 列出HBase所有的表