大数据处理技术:HBase的安装与基本操作

目录

[1 实验名称](#1 实验名称)

[2 实验目的](#2 实验目的)

[3 实验内容](#3 实验内容)

[4 实验原理](#4 实验原理)

[5 实验过程或源代码](#5 实验过程或源代码)

[5.1 Hbase数据库的安装](#5.1 Hbase数据库的安装)

[5.2 创建表](#5.2 创建表)

[5.3 添加数据、删除数据、删除表](#5.3 添加数据、删除数据、删除表)

[5.4 使用Java操作HBase](#5.4 使用Java操作HBase)

[6 实验结果](#6 实验结果)

[6.1 Hbase数据库的安装](#6.1 Hbase数据库的安装)

[6.2 创建表](#6.2 创建表)

[6.3 添加数据、删除数据、删除表](#6.3 添加数据、删除数据、删除表)

[6.4 使用Java操作Hbase](#6.4 使用Java操作Hbase)


1 实验名称

HBase的安装与基本操作

2 实验目的

  1. 了解HBase 的概述及历史,理解HBase 的数据模型,理解HBase 的系统架构,学会HBase 的环境部署

2、了解HBase 的数据模型和基本操作。

3 实验内容

(1)Hbase数据库的安装

(2)创建表

(3)添加数据、删除数据、删除表

(4)使用Java操作HBase

4 实验原理

Hbase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用Hbase技术可在廉价的PC Server上搭建大规模结构化存储集群。HBase以表的形式存储数据,数据模型如下图HBase数据模型所示。表中的数据划分为多个Region,并由Master分配给对应的RegionServer进行管理。

Hbase是一个分布式的、面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库。另一个不同的是Hbase基于列的而不是基于行的模式。Hbase使用和 BigTable非常相同的数据模型。用户存储数据行在一个表里。一个数据行拥有一个可选择的键和任意数量的列,一个或多个列组成一个ColumnFamily,一个Fmaily下的列位于一个HFile中,易于缓存数据。表是疏松的存储的,因此用户可以给行定义各种不同的列。在Hbase中数据按主键排序,同时表按主键划分为多个Region。每个Region包含了表中一段RowKey区间范围内的数据,HBase的一张数据表开始只包含一个Region,随着表中数据的增多,当一个Region的大小达到容量上限后会分裂成两个Region。您可以在创建表时定义Region的RowKey区间,或者在配置文件中定义Region的大小。

5 实验过程或源代码

5.1 Hbase数据库的安装

1.将HBase解压到/app目录下:

复制代码
mkdir /app
cd /opt
tar -zxvf hbase-2.1.1-bin.tar.gz -C /app

2.配置JDK的路径,将JDK的路径配置到conf/下的hbase-env.sh中。输入echo $JAVA_HOME来复制JAVA_HOME的路径,编辑HBaseconf目录下的hbase-env.sh文件,将其中的JAVA_HOME指向到Java的安装目录,最后保存设置。

  1. 编辑hbase-site.xml文件,在<configuration>标签中添加如下内容:
html 复制代码
 <configuration>
  <property>
       <name>hbase.rootdir</name>
       <value>file:///root/data/hbase/data</value>
  </property>
  <property>
       <name>hbase.zookeeper.property.dataDir</name>
       <value>/root/data/hbase/zookeeper</value>
  </property>
  <property>     
  <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
  </property>
</configuration>

4.将Hbase的bin目录配置到/etc/profile中:vim /etc/profile,在etc/profile的文件末尾添加如下内容:

html 复制代码
# SET HBASE_enviroment 
HBASE_HOME=/app/hbase-2.1.1
export PATH=$PATH:$HBASE_HOME/bin

5.使刚刚的配置生效:source /etc/profile,输入命令start-dfs.sh来启动Hadoop,输入jps查看是否启动成功,接着我们输入start-hbase.sh来启动HBase,同样输入jps查看是否启动成功。

5.2 创建表

1.启动HBase,输入hbase shell进入到Hbase shell命令行窗口;新建一个名为test的表:create 'test','data',继续在HBase中创建两张表,表名分别为:dept,emp,列都为:data,命令行:create 'dept','data' create 'emp','data'。

2.创建完毕,保存评测。

5.3 添加数据、删除数据、删除表

1.启动HBase,输入hbase shell进入到Hbase shell命令行窗口。

2.在HBase中创建表mytable,列为data,并在列族data中添加三行数据:

行号分别为:row1,row2,row3;

列名分别为:data:1,data:2,data:3;

值分别为:zhangsan,zhangsanfeng,zhangwuji。

5.4 使用Java操作HBase

1.使用Java代码在HBase中创建表。命令行start-dfs.sh start-hbase.sh。代码实现如下:

java 复制代码
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
TableName tableName = TableName.valueOf("dept");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes ("data")).build();//构建列族对象
tableDescriptor.setColumnFamily(family);//设置列族
admin.createTable(tableDescriptor.build());//创建表
tableName = TableName.valueOf("emp");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
tableDescriptor.setColumnFamily(family);//设置列族
admin.createTable(tableDescriptor.build());//创建表

2.使用Java代码向HBase集群中创建表并添加数据。代码实现如下:

java 复制代码
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
        Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
		Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
        TableName tableName = TableName.valueOf("tb_step2");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
        TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
        ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
        tableDescriptor.setColumnFamily(family);//设置列族
        admin.createTable(tableDescriptor.build());//创建表
        Table table = connection.getTable(tableName);//获取Table对象
        try {
            byte[] row = Bytes.toBytes("row1");    //定义行
            Put put = new Put(row);                //创建Put对象
            byte[] columnFamily = Bytes.toBytes("data");    //列簇
            byte[] qualifier = Bytes.toBytes(String.valueOf(1)); //列
            byte[] value = Bytes.toBytes("张三丰");    //值
            put.addColumn(columnFamily, qualifier, value);
            table.put(put);        //向表中添加数据
            row = Bytes.toBytes("row2");    //定义行
            put = new Put(row);                //创建Put对象
            columnFamily = Bytes.toBytes("data");    //列簇
            qualifier = Bytes.toBytes(String.valueOf(2)); //列
            value = Bytes.toBytes("张无忌");    //值
            put.addColumn(columnFamily, qualifier, value);
            table.put(put);        //向表中添加数据
        } finally {
            //使用完了要释放资源
            table.close();
        }

3.获取HBase中已存在表的数据并输出。代码实现如下:

java 复制代码
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
        Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
		Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
        TableName tableName = TableName.valueOf("t_step3");//定义表名
        Table table = connection.getTable(tableName);//获取Table对象
        //获取数据
        Get get = new Get(Bytes.toBytes("row1"));    //定义get对象
        Result result = table.get(get);            //通过table对象获取数据
        // System.out.println("Result: " + result);
        //很多时候我们只需要获取"值" 这里表示获取 data:1 列族的值
        byte[] valueBytes = result.getValue(Bytes.toBytes("data"), Bytes.toBytes("1")); //获取到的是字节数组
        //将字节转成字符串
        String valueStr = new String(valueBytes,"utf-8");
        System.out.println("value:" + valueStr);
        tableName = TableName.valueOf("table_step3");//定义表名
        table = connection.getTable(tableName);//获取Table对象
        Scan scan = new Scan();
        ResultScanner scanner = table.getScanner(scan);
        try {
            for (Result scannerResult: scanner) {
                // System.out.println("Scan: " + scannerResult);
                byte[] row = scannerResult.getRow();
                System.out.println("rowName:" + new String(row,"utf-8"));
            }
        } finally {
            scanner.close();
        }

4.删除表。代码实现如下:

java 复制代码
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
        Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
		Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象     
		TableName tableName = TableName.valueOf("t_step4");
        admin.disableTable(tableName);    //禁用表
        admin.deleteTable(tableName);    //删除表

6 实验结果

6.1 Hbase数据库的安装

1.复制JAVA_HOME的路径

2.编辑HBaseconf目录下的hbase-env.sh文件

3.etc/profile的文件末尾添加内容

4.启动成功

6.2 创建表

1.Hbase shell命令行窗口

2.成功新建一个名为test的表

3.余下两张表创建成功

6.3 添加数据、删除数据、删除表

1.创建表mytable

6.4 使用Java操作Hbase

1.使用Java代码在HBase中创建表。

2.使用Java代码向HBase集群中创建表并添加数据。

3.获取HBase中已存在表的数据

4.删除表。

相关推荐
minji...几秒前
数据结构 堆(4)---TOP-K问题
java·数据结构·算法
命苦的孩子10 分钟前
Java 中的排序算法详解
java·开发语言·排序算法
Seven9733 分钟前
Spring AI 框架中如何集成 MCP?
java
gorgor在码农34 分钟前
Elasticsearch 的聚合(Aggregations)操作详解
大数据·elasticsearch·搜索引擎
BigData共享39 分钟前
StarRocks 使用 JNI 读取数据湖表引发的堆内存溢出分析
大数据
开往198244 分钟前
spring boot整合mybatis
java·spring boot·mybatis
北京_宏哥1 小时前
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-27- 操作单选和多选按钮 - 上篇(详细教程)
java·前端·面试
betazhou1 小时前
MySQL ROUTER安装部署
android·数据库·mysql·adb·mgr·mysql router
回家路上绕了弯1 小时前
Java双亲委派机制:从原理到实践的全面解析
java·后端
努力的小郑1 小时前
亿级流量下的生死抉择:Apache BeanUtils vs MapStruct性能差距32倍!架构师选型指南
java·spring·apache