ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

常用的 HBase 操作摘要

常用的 HBase 操作摘要 摘要本实验在 VMware 虚拟机 node2、node3 组成的 Linux 集群上完成《大数据技术原理与应用》第四章“熟悉常用的 HBase 操作”的全部内容安装并配置 HBase 1.1.2伪分布式数据存放于 HDFS使用 HBase Shell 完成列出表信息、打印表记录、增删列族与列、清空表、统计行数五个操作把关系型数据库中的学生表、课程表、选课表转换为 HBase 表并插入数据用 Java API 实现了 createTable、addRecord、scanColumn、modifyData、deleteRow 五个方法最后利用 HBase 和 MapReduce 完成按价格排序并把结果写回 HBase。每一部分均给出了实际运行的终端截图作为验证。关键词HBaseHBase ShellJava APIMapReduceHDFS一、实验目的1理解 HBase 在 Hadoop 体系结构中的角色2熟练使用 HBase 操作常用的 Shell 命令3熟悉 HBase 操作常用的 Java API。二、实验平台与环境实验在两台 VMware 虚拟机node2、node3上完成操作系统与软件版本如下表所示HBase 采用伪分布式部署HMaster、HRegionServer 与 HBase 自带的 ZooKeeper 运行在 node2HBase 的数据文件保存在由 node2、node3 共同组成的 HDFS 上。项目内容虚拟化平台VMware Workstation 17.6.3node2master192.168.125.135NameNode、HMaster、HRegionServer、HBase ZooKeepernode3slave192.168.125.134DataNodeHDFS 数据实际存放节点操作系统Ubuntu 22.04.5 LTS内核 6.8.0-138-genericJDKOpenJDK 1.8.0_452/opt/jdk1.8.0_452Hadoop2.6.0fs.defaultFS hdfs://node2:9000副本数 1HBase1.1.2伪分布式hbase.rootdir hdfs://node2:9000/hbase客户端HBase Shell 1.1.2、JDK 自带 javac / java表 1 实验平台与软件版本启动 Hadoop 与 HBase 后用 jps 查看进程并用 status 命令查看集群状态结果显示 1 个 RegionServer 在线、0 个失效节点说明集群工作正常如图 1 所示。图 1 集群进程与 HBase 集群状态三、实验内容和要求3.1 用 HBase Shell 完成五个指定操作按要求分别用 HBase Shell 完成列出所有表信息、打印指定表全部记录、增删指定列族或列、清空指定表、统计表行数五个操作命令与结果对照见表 2。文档要求使用的命令结果列出 HBase 所有表的信息list / describe Student列出全部 7 张表及列族信息打印指定表的所有记录scan Student 等三张表全部记录逐行输出添加/删除列族或列alter 增删列族delete 删列列族增加、删除成功指定列被删除清空表的所有记录truncate StudentTest清空前 3 行清空后 0 行统计表的行数count Student 等分别 3 / 3 / 6 行表 2 五个 Shell 操作与结果对照1列出 HBase 所有表的相关信息使用 list 列出全部表名再用 describe Student 查看表的列族等详细信息如图 2 所示。图 2 list 与 describe 查看表信息2在终端打印出指定表的所有记录数据分别对 Student、Course、SC 三张表执行 scan结果如图 3 所示。图 3 scan 打印指定表的全部记录3向已经创建好的表添加和删除指定的列族或列先用 alter 为 Student 表增加列族 tmp再用 alter … METHOD delete 删除该列族最后用 delete 删除 2015001 行的 info:S_Age 列结果如图 4 所示。图 4 增加/删除列族与删除指定列4清空指定表的所有记录数据建立测试表 StudentTest 并写入 3 行数据执行 truncate 后再扫描结果为空说明数据已被清空如图 5 所示。图 5 truncate 清空表数据前后对比5统计表的行数用 count 分别统计 Student、Course、SC 三张表的行数结果分别为 3、3、6 行如图 6 所示。图 6 count 统计表的行数3.2把关系型数据库的表转换为 HBase 表并插入数据把学生表Student、课程表Course、选课表SC转换为适合 HBase 存储的表以业务主键作为行键选课表用“学号-课程号”组合行键把属性放入列族设计见表 3。关系表HBase 表名行键列族列限定符StudentStudent学号 S_NoinfoS_Name、S_Sex、S_AgeCourseCourse课程号 C_NoinfoC_Name、C_CreditSCSC学号-课程号scoreSC_Score表 3 HBase 表结构设计建表与插入数据均通过 HBase Shell 完成先 create 建立三张表再用 put 插入数据。学生表 3 行2015001 Zhangsan/male/23、2015002 Mary/female/22、2015003 Lisi/male/24课程表 3 行123001 Math/2.0、123002 Computer Science/5.0、123003 English/3.0选课表 6 行成绩分别为 86、69、77、99、98、95。图 7 建立 Student、Course、SC 三张表图 8 Student 表插入数据并查看图 9 Course 与 SC 表插入数据并查看3.3 用 Java API 实现五个方法编程实现文档要求的五个方法源程序为 HBaseStudentLab.java方法说明与运行结果见表 4。方法实现要点运行结果createTable(tableName, fields)表已存在则先 disable 再 delete然后重新建表重建 StudentScore 表列族为 [Score, Info]addRecord(tableName, row, fields, values)fields 支持“列族”与“列族:列”两种写法Zhangsan、Mary、Lisi 各 3 门成绩及 1 个性别列写入成功scanColumn(tableName, column)传列族时列出全部列限定符传“列族:列”时只列该列两种调用方式均正确输出数据不存在时输出 nullmodifyData(tableName, row, column)读出原值后修改数值型 1非数值型追加 _MZhangsan 的 Score:Math 由 86 改为 87deleteRow(tableName, row)删除整行记录Lisi 行被删除最终扫描结果中不再出现表 4 五个 Java API 方法的实现与结果程序编译与运行过程如图 10、图 11 所示两图为同一终端窗口的先后画面。图 10 Java 程序编译与运行输出前半部分图 11 Java 程序运行输出修改与删除部分3.4 利用 HBase 和 MapReduce 按价格排序假设 HBase 中有两张表表 book 记录书名与价格。要求从 HBase 读出数据对 price 排序并把结果存储回 HBase。实现思路输入表 book行键为书名列族 info 下有 bookName、price 两列Mapper 使用 TableMapper 读取 info:price以补零后的价格为中间键输出Reducer 使用 TableReducer 把结果写入表 book_sorted行键为“价格补零-书名”因此按行键扫描即为价格升序。输入数据为Database System Concept 30、Thinking in Java 60、Data Mining 25首先建立 book 与 book_sorted 两张表并写入输入数据如图 12 所示。图 12 建立 book 表并写入输入数据随后编译并运行 MapReduce 作业作业计数器显示 Map 输入 3 条、Reduce 输出 3 条作业执行成功如图 13 所示。图 13 MapReduce 作业运行与计数器最后扫描 book_sorted 表结果按价格升序排列为 25、30、60即 Data Mining、Database System Concept、Thinking in Java如图 14 所示。图 14 book_sorted 中按价格升序的排序结果四、实验中出现的问题与解决办法HBase 与 Hadoop 的依赖包冲突HBase 1.1.2 与 Hadoop 2.6.0 都带有 slf4j 绑定启动时打印多重绑定警告但不影响功能未作处理。虚拟机内存偏小2 GB引起的连锁故障系统在内存压力下退出图形会话HMaster、HRegionServer 也因 ZooKeeper 会话超时退出。解决办法是关闭并屏蔽 systemd-oomd把各 JVM 堆调小HMaster 256 MB、RegionServer 384 MB、ZooKeeper 192 MB并把 zookeeper.session.timeout 提高到 180 s进入实验前停止 YARN 的 ResourceManager 与 NodeManager 以腾出内存。截图工具链问题虚拟机中的 gnome-terminal 无法通过 D-Bus 激活报错 Error constructing proxy for org.gnome.Terminal改用 xterm 作为终端用 xdotool 模拟键盘输入、gnome-screenshot 抓取整个桌面完成截图。截图出现黑屏或锁屏画面GNOME 空闲后会自动锁屏导致抓取到的是锁屏页。解决办法是关闭息屏与锁屏idle-delay0、lock-enabledfalse并执行 xset s off -dpms。MapReduce 本地运行时报错 File does not exist: hdfs://node2:9000/opt/hbase-1.1.2/lib/metrics-core-2.2.0.jar原因是本地 HBase 依赖 jar 的路径被当作 HDFS 路径去分发。解决办法是把作业暂存目录改为本地路径mapreduce.jobtracker.staging.root.dir file:///home/zr/lab/hbase-lab/mr-staging并在 TableMapReduceUtil 初始化之后执行 job.getConfiguration().unset(tmpjars)修改后作业正常完成。题目文档中学生表第 2、3 行的学号都写作 2015003而 HBase 的行键必须唯一因此按 2015002、2015003 处理。五、实验总结通过本次实验完成了 HBase 的安装配置与常用操作掌握了在 HDFS 之上搭建伪分布式 HBase 的方法熟悉了 list、scan、alter、delete、truncate、count 等常用 Shell 命令理解了行键与列族的设计对HBase 表结构的影响通过 Java API 的五个方法掌握了 HBaseAdmin、HTable、Put、Get、Scan、Delete 等类的使用方式通过 HBase 与 MapReduce 的结合掌握了 TableMapper、TableReducer 以及以行键顺序实现排序的思路。实验过程中遇到的虚拟机资源限制、ZooKeeper 会话超时、MapReduce 本地运行器依赖分发等问题也加深了对 Hadoop 与 HBase 运行机制的理解。
返回列表