HBase

HBase简介

本文以分析Web日志统计每天的PV和UV为例,介绍如何在百度智能云平台使用HBase。

HBase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,能够利用HDFS的分布式处理模式和Hadoop的MapReduce程序模型。HBase融合key/value存储模式带来实时查询的能力,以及通过MapReduce进行离线处理或者批处理的能力。总的来说,HBase能够让您在大量的数据中查询记录,也可获得综合分析报告。

HBase不是一个关系型数据库,需要不同的方法定义数据模型,HBase定义了一个四维数据模型:行键、列簇、列修饰符以及版本,以便获取指定数据:

  • 行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。
  • 列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列簇存储在自身的数据文件中,因此,列簇需要事先被定义。
  • 列修饰符:列簇定义真实的列,被称之为列修饰符,可认为列修饰符就是列本身。
  • 版本:每列都可以有一个可配置的版本数量,可通过列修饰符的制定版本获取数据。

程序准备

您可以直接使用样例程序。也可设计自己的程序,并上传到对象存储BOS(具体操作详见对象存储BOS入门指南)。

集群准备

  1. 准备数据,请参考数据准备
  2. 准备百度智能云环境
  3. 登录控制台,选择“产品服务->百度MapReduce BMR”,点击“创建集群”,进入集群创建页,并做如下配置:
    • 设置集群名称
    • 设置管理员密码
    • 关闭日志开关
    • 选择镜像版本“BMR 0.2.0(hadoop 2.6)”
    • 选择内置模板“hbase”。
  4. 请保持集群的其他默认配置不变,点击“完成”可在集群列表页可查看已创建的集群,当集群状态由“初始化中”变为“空闲中”时,集群创建成功。

运行Java作业

提取Web访问日志内容到HBase Table

  1. 在“产品服务>MapReduce>百度MapReduce-作业列表”页中,点击“创建作业”,进入创建作业页。
  2. 配置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的名称。)
  3. 在“集群适配”区,选择适配的集群。
  4. 点击“完成”,则作业创建完成。运行中的作业状态会由“等待中”更新为“运行中”,当作业运行完毕后状态会更新为“已完成”。

统计每天的PV

  1. 在“产品服务>MapReduce>百度MapReduce-作业列表”页中,点击“创建作业”,进入创建作业页。
  2. 配置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上必须不存在。
  3. 在“集群适配”区,选择适配的集群。
  4. 点击“完成”,则作业创建完成。当作业状态会由“等待中”更新为“运行中”状态,作业运行完毕后状态更新为“已完成”。

统计每天的UV

  1. 在“产品服务>MapReduce>百度MapReduce-作业列表”页中,点击“创建作业”,进入创建作业页。
  2. 请在创建作业页选择已创建的集群、选择“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上必须不存在。
  3. 配置好作业参数后,点击“完成”,则作业创建完成。运行中的作业状态会由“等待中”更新为“运行中”,当作业运行完毕后状态会更新为“已完成”。

查看结果

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