大数据处理技术: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.删除表。

相关推荐
dazhong201224 分钟前
PLSQL 客户端连接 Oracle 数据库配置
数据库·oracle
路在脚下@1 小时前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
WTT00112 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader2 小时前
深入解析 Apache APISIX
java·apache
了一li2 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
菠萝蚊鸭3 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
码农君莫笑3 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
旭东怪3 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word