大数据实验E5HBase:安装配置,shell 命令和Java API使用

  • 实验目的
  1. 熟悉HBase操作常用的shell 命令和Java API使用;
  • 实验要求
  1. 掌握HBase的基本操作命令和函数接口的使用;
  • 实验平台
  1. 操作系统:Linux(建议Ubuntu16.04或者CentOS 7 以上);
  2. Hadoop版本:3.1.3;
  3. HBase版本:2.2.2;
  4. JDK版本:1.8;
  5. Java IDE:Eclipse。
  • 实验内容、结果及分析(直接在题目后面列出实验结果以及分析,各个小题的代码以截图方式呈现并标注重点代码,包含java代码运行成功截图)

(实验代码参考网址:HBase2.2.2安装和编程实践指南_厦大数据库实验室博客

  1. 编写Java代码完成下列题目(参考课件例子)
  1. 设计Book表(表格形式),包含basicInfo和SaleInfo两个列族,每一个列族中自定义列限定符(至少3个),自定义数据信息;

BOOK表设计

|-----------|--------------|---------|------|
| 列族名称 | 列限定符 | 数据类型 | 描述 |
| basicInfo | title | String | 书籍标题 |
| basicInfo | author | String | 作者 |
| basicInfo | publish_date | Date | 出版日期 |
| SaleInfo | price | Double | 价格 |
| SaleInfo | quantity | Integer | 库存数量 |
| SaleInfo | sold | Integer | 销售数量 |

  1. 然后编写Java代码创建Book表,并在HBase shell中验证创建成功;

运行结果:

在HBase shell中验证创建成功:

  1. 编写程序插入自定义的数据信息;

运行结果:

  1. 编写程序获取指定列的数据并打印输出;

运行结果:

  1. 现有以下关系型数据库中的三个表的数据,要求:

学生表(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 |

  1. 将其转换为适合于HBase存储的表,利用表格的方式绘制其存储的概念视图;

HBase表设计

|-------------|----------|---------|-----|
| 列族名称 | 列限定符 | 数据类型 | 描述 |
| StudentInfo | S_No | String | 学号 |
| StudentInfo | S_Name | String | 姓名 |
| StudentInfo | S_Sex | String | 性别 |
| StudentInfo | S_Age | Integer | 年龄 |
| CourseInfo | C_No | String | 课程号 |
| CourseInfo | C_Name | String | 课程 |
| CourseInfo | C_Credit | Double | 学分 |
| SC | SC_Sno | String | 学号 |
| SC | SC_Cno | String | 课程号 |
| SC | SC_Score | Integer | 成绩 |

  1. 实现createTable(String tableName, String[] cfs)函数:创建表,参数tableName为表的名称,字符串数组cfs为存储记录各个列族名称的数组。要求当HBase中已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表;

相关代码:

执行结果:

验证:

  1. 实现addRow(String tableName, String row, String[] fields, String[] values),向表tableName中的行row(可以用学生姓名S_No表示)、指定列中添加数据;fields表示插入的数据记录对应的列名集合,其中每一个元素形式为"列族名:列限定符";

  2. 使用上面定义的两个函数实现表的创建以及数据的添加,请思考如何实现多条数据记录的快速添加?使用尽可能少量的代码实现;

  1. 在hbase shell中验证4)中数据添加的结果;
  1. 设计modifyData(String tableName, String row, String filed, String val)函数实现指定数据的修改,其中filed形式为"列族名:列限定符";调用该函数,将2015002 同学的S_Name和Computer Science分数分别修改为你的姓名和学号的后两位;

  2. 定义scanRow(String tableName, String row, String[] fields),查看指定列中的数据内容,并将查找的结果按下下列形式打印输出"row filed1,val1 filed2,val2 ...";其中fields表示插入的数据记录对应的列名,其中每一个元素形式为"列族名:列限定符";调用该函数验证7)中数据是否修改成功;

运行结果

  1. 定义deleteRow(String tableName, String row)函数,删除指定行键对应的数据记录,并调用该函数删除2015001相应的数据记录,并验证删除成功;

验证:

  1. 总结HBase使用过程中的优缺点

优点:

  1. 大规模数据支持:HBase设计用于处理大量的数据,非常适合需要扩展到数千台服务器的大数据应用。
  2. 高性能:HBase提供实时读写访问,因为它存储数据在内存中,所以访问速度非常快。
  3. 列族式存储:数据按照列族进行存储,便于数据的分组和权限管理。
  4. 易于横向扩展:可以通过增加更多的服务器来扩展系统,而不需要停机。
  5. 高可用性:HBase运行在Hadoop生态系统之上,可以利用Hadoop的高可用性特性。

缺点:

  1. 学习曲线陡峭:对于新手来说,HBase的概念和API可能比较复杂,需要一定的时间来学习和理解。
  2. 有限的查询能力:HBase不支持传统的SQL查询,对于复杂的查询操作不太友好。
  3. 维护成本:HBase集群可能需要专业的维护团队来管理,尤其是在大规模部署时。
  4. 数据模型限制:HBase最适合稀疏表和多维数据模型,对于需要复杂事务处理的应用可能不太适合。
  5. 生态系统集成:与其他数据系统集成可能需要额外的工作,例如与实时处理系统或OLAP引擎的集成。
  • 实验小结(问题和收获)

问题:最初接触HBase时,它的数据模型和API让我感到困惑,尤其是列族和列限定符的概念。配置HBase集群需要对Hadoop生态系统有深入的了解,配置过程中遇到了不少问题。在实验过程中,我发现自己需要学习如何优化HBase的性能,包括内存管理、预分区和压缩策略等。在进行数据操作时,我遇到了一些错误,例如尝试删除一个不存在的行,或者在错误的列族中插入数据。

收获:

通过这次实验,我获得了使用HBase进行数据存储和查询的实际经验。更好地理解了NoSQL数据库的概念,以及它们与传统关系型数据库的区别。学会了如何设计适合HBase的数据模型,以及如何有效地存储和检索数据。在解决实验中遇到的问题时,我提高了自己的问题解决能力,学会了查阅文档和社区资源。我对Hadoop生态系统有了更全面的认识,了解了HBase在大数据处理中的作用。

相关推荐
南宫生8 分钟前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
计算机毕设定制辅导-无忧学长31 分钟前
Maven 基础环境搭建与配置(一)
java·maven
彳卸风37 分钟前
Unable to parse timestamp value: “20250220135445“, expected format is
开发语言
dorabighead1 小时前
JavaScript 高级程序设计 读书笔记(第三章)
开发语言·javascript·ecmascript
人类群星闪耀时1 小时前
物联网与大数据:揭秘万物互联的新纪元
大数据·物联网·struts
风与沙的较量丶2 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
m0_748251722 小时前
SpringBoot3 升级介绍
java
水煮庄周鱼鱼2 小时前
C# 入门简介
开发语言·c#
编程星空2 小时前
css主题色修改后会多出一个css吗?css怎么定义变量?
开发语言·后端·rust
软件黑马王子2 小时前
Unity游戏制作中的C#基础(6)方法和类的知识点深度剖析
开发语言·游戏·unity·c#