HBase
更新时间:2022-06-01
HBase简介
本文以分析Web日志统计每天的PV和UV为例,介绍如何在吉利智能云使用HBase。
HBase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,能够利用HDFS的分布式处理模式和Hadoop的MapReduce程序模型。HBase融合key/value存储模式带来实时查询的能力,以及通过MapReduce进行离线处理或者批处理的能力。总的来说,HBase能够让您在大量的数据中查询记录,也可获得综合分析报告。
HBase不是一个关系型数据库,需要不同的方法定义数据模型,HBase定义了一个四维数据模型:行键、列簇、列修饰符以及版本,以便获取指定数据:
- 行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。
- 列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列簇存储在自身的数据文件中,因此,列簇需要事先被定义。
- 列修饰符:列簇定义真实的列,被称之为列修饰符,可认为列修饰符就是列本身。
- 版本:每列都可以有一个可配置的版本数量,可通过列修饰符的制定版本获取数据。
程序准备
您可以直接使用样例程序。也可设计自己的程序,并上传到对象存储BOS(具体操作详见对象存储BOS入门指南)。
集群准备
- 准备数据,请参考数据准备。
- 准备环境。
-
登录控制台,选择“产品服务->MapReduce BMR”,点击“创建集群”,进入集群创建页,并做如下配置:
- 设置集群名称
- 设置管理员密码
- 关闭日志开关
- 选择镜像版本“BMR 0.2.0(hadoop 2.6)”
- 选择内置模板“hbase”。
- 请保持集群的其他默认配置不变,点击“完成”可在集群列表页可查看已创建的集群,当集群状态由“初始化中”变为“空闲中”时,集群创建成功。
说明:Hbase集群支持在创建集群时将deep storage设置为BOS,可以获得更高的数据可靠性。请注意,所选择的BOS路径必须是不存在的,并且后续无法修改该路径及切换为HDFS存储。请合理选择您的存储方式。具体设置方式,如下图所示。
运行Java作业
提取Web访问日志内容到HBase Table
- 在“产品服务>MapReduce>MapReduce-作业列表”页中,点击“创建作业”,进入创建作业页。
-
配置Java作业参数,具体如下:
- 作业类型:选择“Java作业”。
- 作业名称:输入作业名称,长度不可超过255个字符。
- 应用程序位置:可输入样例程序路径
bos://bmr-public-data/apps/hbase/bmr-hbase-samples-1.0-SNAPSHOT.jar
。 - 失败后操作:继续。
- MainClass:输入
com.baidubce.bmr.hbase.samples.logextract.AccessLogExtract
。 - 应用程序参数:输入
-D mapreduce.job.maps=6 -D mapreduce.job.reduces=2 bos://bmr-public-data/logs/accesslog-1k.log AccessTable
。(最后一个参数"AccessTable",是HBase Table的名称。)
- 在“集群适配”区,选择适配的集群。
- 点击“完成”,则作业创建完成。运行中的作业状态会由“等待中”更新为“运行中”,当作业运行完毕后状态会更新为“已完成”。
统计每天的PV
- 在“产品服务>MapReduce>MapReduce-作业列表”页中,点击“创建作业”,进入创建作业页。
-
配置Java作业参数,具体如下:
- 作业类型:选择“Java作业”。
- 作业名称:输入作业名称,长度不可超过255个字符。
- 应用程序位置:可输入样例程序路径
bos://bmr-public-data/apps/hbase/bmr-hbase-samples-1.0-SNAPSHOT.jar
。 - 失败后操作:继续。
- MainClass:输入
com.baidubce.bmr.hbase.samples.pv.PageView
。 - 应用程序参数:输入
-D mapreduce.job.maps=6 -D mapreduce.job.reduces=2 AccessTable bos://${USER_BUCKET}/pv
。bos://${USER_BUCKET}/pv必须具有写权限且该路径中所指定的目录不能在bos上存在,例如,输出路径为bos://test/sqooptest,则sqooptest目录在bos上必须不存在。
- 在“集群适配”区,选择适配的集群。
- 点击“完成”,则作业创建完成。当作业状态会由“等待中”更新为“运行中”状态,作业运行完毕后状态更新为“已完成”。
统计每天的UV
- 在“产品服务>MapReduce>MapReduce-作业列表”页中,点击“创建作业”,进入创建作业页。
-
请在创建作业页选择已创建的集群、选择“Java作业”并配置对应的参数。
- 作业名称:输入作业名称,长度不可超过255个字符。
- 应用程序位置:可输入样例程序路径
bos://bmr-public-data/apps/hbase/bmr-hbase-samples-1.0-SNAPSHOT.jar
。 - 失败后操作:继续。
- MainClass:输入
com.baidubce.bmr.hbase.samples.uv.UniqueVisitor
。 - 应用程序参数:输入
-D mapreduce.job.maps=6 -D mapreduce.job.reduces=2 AccessTable bos://${USER_BUCKET}/uv
。bos://${USER_BUCKET}/uv必须具有写权限且该路径中所指定的目录不能在bos上存在,例如,输出路径为bos://test/sqooptest,则sqooptest目录在bos上必须不存在。
- 配置好作业参数后,点击“完成”,则作业创建完成。运行中的作业状态会由“等待中”更新为“运行中”,当作业运行完毕后状态会更新为“已完成”。
查看结果
bos://${USER_BUCKET}/pv/下的最终reduce结果示例:
03/Oct/2015 139
05/Oct/2015 372
04/Oct/2015 375
06/Oct/2015 114
bos://${USER_BUCKET}/uv/下的最终reduce结果示例:
03/Oct/2015 111
05/Oct/2015 212
04/Oct/2015 247
06/Oct/2015 97