HBase表结构和Phoenix 使用

前言


我们通过业务系统将爬虫的数据写入了HBase,这篇文章说说HBase的表结构,及在HBase上利用Phoenix进行SQL操作。

HBase表结构


先看看官网对于HBase的数据模型说明:

In HBase, data is stored in tables, which have rows and columns. This is a terminology overlap with relational databases (RDBMSs), but this is not a helpful analogy. Instead, it can be helpful to think of an HBase table as a multi-dimensional map.

上面这段话的大概意思是:和传统关系型数据库的数据模型(由 Row 和 Column 产生的二维储存空间)相比,HBase 是一个多维度的数据储存架构。详细的说就是,HBase中的表是通过 行键(Rowkey)、列簇(Column Family)、列限定符(Column Qualifier)、时间版本(Version)四个维度组织数据。
我们设计一个webtable表:
两个行键(baidu和google),有两个个列簇(基本信息和详细信息),第一个列簇(基本信息)包括两个列限定符(域名),第二个列簇(详细信息)包括一个限定符(内容和作者)。概念视图如下:

概念视图

Rowkey Time Stamp ColumnFamily——基本信息 ColumnFamily——详细信息
baidu t1 基本信息:域名=“baidu.com”
baidu t2 详细信息:内容=“www.sss.....”
baidu t3 详细信息:作者=“老刘”
google t4 基本信息:域名=“google.com”
google t5 详细信息:内容=“www.baggg.....”
google t6 详细信息:作者=“bush”

物理视图

  • 列簇——基本信息

|Rowkey|Time Stamp|ColumnFamily 基本信息|
|:--------:|:--------------:|:-------:|:-----------:|
| baidu | t1| 基本信息:域名=“baidu.com”|
| google| t4| 基本信息:域名=“google.com”|

  • 列簇——详细信息
Rowkey Time Stamp ColumnFamily——详细信息
baidu t2 详细信息:内容=“www.sss.....”
baidu t3 详细信息:作者=“老刘”
google t5 详细信息:内容=“www.baggg.....”
google t6 详细信息:作者=“bush”

Phoenix安装与使用


由于HBase数据库只提供了Java和shell两种接口,并不支持SQL,所以诞生了Phoenix 工具。

Phoenix安装

我们的HBase版本是1.2.5,下载对应版本是apache-phoenix-4.10.0-HBase-1.2


Phoenix下载地址.png

下载后如何与HBase集群集成,看看官网的说明:

  • Download and expand the latest phoenix-[version]-bin.tar.
  • Add the phoenix-[version]-server.jar to the classpath of all HBase region server and master and remove any previous version. An easy way to do this is to copy it into the HBase lib directory (use phoenix-core-[version].jar for Phoenix 3.x)
  • Restart HBase.
    *Add the phoenix-[version]-client.jar to the classpath of any Phoenix client.

这里我们重新创建一个Phoenix容器,将apache-phoenix-4.10.0-HBase-1.2 bin拷贝到该容器,这里配置Phoenix容器的hots文件,使该容器可以用zookeeper的主机名连接HBase集群。

172.17.0.5    master
172.17.0.6    slave01
172.17.0.10   slave02

然后将phoenix-[version]-server.jar拷贝到Hbase集群的三个容器的HBase lib目录下,重启HBase集群。

Phoenix 使用

# Sqlline.py 最简单的使用方法,就是直接以 Zookeeper 机器名(一个就可以)为参数即可,我们的zookeeper集群和hbase集群名称相同,
./sqlline.py master
Sqlline.py使用示意图.png

上图中,我们还使用了 sqlline.py 支持的 table 命令,该命令可以列出 HBase 中所有的表。这里需要注意 Phoenix 不支持直接显示 HBase Shell 中创建的表格。原因很简单,当在 Phoenix 创建一张表时,Phoenix 是将表进行了重组装。而对 HBase Shell 创建的表 Phoenix 并未进行加工,所以无法直接显示。如果需要将 HBase Shell 中创建的表格关联到 Phoenix 中查看,就需要在 Phoenix 中创建一个视图(View)做关联。
我们先在HBase中查看已经创建的webpage表结构

HBase shell 查看表结构.png

上图中webpage是我们用HBase Java API在业务系统创建的表(其中spiderBase和spiderInfo是表webpage的列族,然后我们需要在Phoenix创建一个名称相同的视图

# 注意视图名称和列名如果不带引号,创建后的视图名称是大写
 CREATE VIEW "webpage" (
  pk VARCHAR PRIMARY KEY,
  "spiderBase"."siteTitle" VARCHAR ,
  "spiderBase"."url" VARCHAR ,
 "spiderBase"."domain" VARCHAR ,
 "spiderBase"."spiderInfoId" VARCHAR ,
 "spiderBase"."spiderUUID" VARCHAR ,
 "spiderInfo"."title" VARCHAR ,
 "spiderInfo"."content" VARCHAR ,
 "spiderInfo"."category" VARCHAR ,
 "spiderInfo"."rawHTML" VARCHAR ,
 "spiderInfo"."gatherTime" VARCHAR ,
  "spiderInfo"."keywords" VARCHAR ,
  "spiderInfo"."publishTime" VARCHAR ,
  "spiderInfo"."summary" VARCHAR
  );

在Phoenix用sql操作webpage视图

利用sq操作HBase.png

报错问题


HBase 和Phoenix Shell 终端中文乱码,java api操作无问题,暂时没有找到解决办法。

总结


参考文献

[1] Apache Phoenix介绍(SQL on HBase)
[2] HBase Shell 常用操作
[3] HBase 深入浅出
[4] HBase 官网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,368评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,941评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,369评论 0 326
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,848评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,719评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,505评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,904评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,528评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,819评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,848评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,652评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,468评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,912评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,095评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,389评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,906评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,120评论 2 339

推荐阅读更多精彩内容

  • 入门指南 1. 简介 Quickstart会让你启动和运行一个单节点单机HBase。 2. 快速启动 – 单点HB...
    和心数据阅读 4,505评论 1 41
  • HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...
    分痴阅读 3,921评论 3 17
  • 比特科技: 存储、数据库、大数据技术 » HBase原理和设计 http://www.bitstech.net/...
    葡萄喃喃呓语阅读 723评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,523评论 18 139
  • 孤独,从不在意几个人 看似一群 实质一个 喧哗,从没道理几段情 过去式,现在时,将来时 都是一个人 希望,从头到尾...
    猜火车979阅读 168评论 0 1