1.9 HBase

1.9.1 HBase存储结构

1.9.2 RowKey设计原则

1)rowkey长度原则

2)rowkey散列原则

3)rowkey唯一原则

1.9.3 RowKey如何设计

1)生成随机数、hash、散列值

2)字符串反转

大数据技术之phoenix

第1章phoenix的安装

对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄。对于较大的表,全表扫瞄的代价是不可接受的。

但是,很多情况下,需要从多个角度查询数据。例如,在定位某个人的时候,可以通过姓名、身份证号、学籍号等不同的角度来查询,要想把这么多角度的数据都放到rowkey中几乎不可能(业务的灵活性不允许,对rowkey长度的要求也不允许)。

所以,需要secondary index来完成这件事。secondary index的原理很简单,但是如果自己维护的话则会麻烦一些。现在,Phoenix已经提供了对HBase secondary index的支持,下面将说明这样用Phoenix来在HBase中创建二级索引。

1.1、下载地址http://www.apache.org/dyn/closer.lua/phoenix/apache-phoenix-4.14.1-HBase-1.3/bin/apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz

1.2上传到/opt/software/ 解压tar -zxvf apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz -C /opt/module 并改名为phoenix

1.3 在/opt/module/phoenix/下将core和client这俩个包拷贝到各个节点的hbase的lib下面

scp ./phoenix-core-4.14.1-HBase-1.3.jar  slave02:/opt/module/hbase-1.3.1/lib/

scp ./phoenix-core-4.14.1-HBase-1.3.jar  slave03:/opt/module/hbase-1.3.1/lib/

scp ./phoenix-4.14.1-HBase-1.3-client.jar  slave03:/opt/module/hbase-1.3.1/lib/

scp ./phoenix-4.14.1-HBase-1.3-client.jar  slave02:/opt/module/hbase-1.3.1/lib/

1.4将hbase的conf下的hbase-site.xml,和hadoop下面的core-site.xml和hdfs-site.xml拷贝到phoenix的bin/下面

1.5在root权限下配置phoenix的环境变量 在/etc/profile 下添加如下内容

#phoenix

export PHOENIX_HOME=/opt/module/phoenix

export PHOENIX_CLASSPATH=$PHOENIX_HOME

export PATH=$PATH:$PHOENIX_HOME/bin

1.6启动zookeeper,hadoop,hbase

1.7启动phoenix,bin/sqlline.py master01,slave02,slave03:2181

 第二章phoenix表操作

2.1     创建表

CREATE TABLE IF NOT EXISTS us_population (

stateCHAR(2) NOT NULL,

cityVARCHAR NOT NULL,

populationBIGINT

CONSTRAINTmy_pk PRIMARY KEY (state, city));

      在phoenix中,默认情况下,表名等会自动转换为大写,若要小写,使用双引号,如"us_population"。

2.2     显示所有表

!table或

!tables

2.3     插入记录

      upsert into us_population values('NY','NewYork',8143197);

2.4     查询记录

      select * from us_population ;

       select * from us_population wherestate='NY';

2.5     删除记录

       delete from us_population wherestate='NY';

2.6     删除表

       drop table us_population;

2.7     退出命令行

      !quit

      具体语法参照官网

https://phoenix.apache.org/language/index.html#upsert_select

2.8    phoenix表映射

默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的,如图1和图2,US_POPULATION是在phoenix中直接创建的,而test是在hbase中直接创建的,默认情况下,在phoenix中是查看不到test的。

图1 phoenix命令行中查看所有表

图2 hbase命令行中查看所有表

如果需要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射。

hbase 中test的表结构如下,两个列簇name、company.

Rowkey

name

company

empid

firstname

lastname

name

address

2.8.1   hbase命令行中创建表

       $ cd /home/hadoop/hbase/bin

       $ ./hbase shell 进入hbase命令行

       create 'test','name','company' 创建表,如下图

     

      下面的视图映射和表映射均基于该表。

2.8.2    视图映射

    Phoenix创建的视图是只读的,所以只能用来做查询,无法通过视图对源数据进行修改等操作。而且相比于直接创建映射表,视图的查询效率会低,原因是:创建映射表的时候,Phoenix会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。

       1)创建视图

create view"test"(empid varchar primarykey,"name"."firstname" varchar,"name"."lastname"varchar,"company"."name"     varchar,"company"."address"varchar);

       2)删除视图

       drop view "test";

2.8.3   表映射

  使用Apache Phoenix创建对HBase的表映射,有两种方法:

    1) 当HBase中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。

    2)当HBase中不存在表时,可以直接使用create table指令创建需要的表,并且在创建指令中可以根据需要对HBase表结构进行显示的说明。

    第1)种情况下,如在之前的基础上已经存在了test表,则表映射的语句如下:

create table "test"(empid varchar primarykey,"name"."firstname"varchar,"name"."lastname"varchar,"company"."name" varchar,"company"."address"varchar);

     第2)种情况下,直接使用与第1)种情况一样的create table语句进行创建即可,这样系统将会自动在Phoenix和HBase中创建person_infomation的表,并会根据指令内的参数对表结构进行初始化。

使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。

2.8.4 使用spark对phoenix的读写

请参考http://phoenix.apache.org/phoenix_spark.html

select * from STOCK_SYMBOL

scan "STOCK_SYMBOL"

第三章 利用Phoenix为Hbase表创建二级索引

3.1配置Hbase支持Phoenix创建二级索引

https://blog.csdn.net/u011491148/article/details/45749807

对于Hbase,如果想精确定位到某行记录,唯一的办法就是通过rowkey查询。如果不通过rowkey查找数据,就必须逐行比较每一行的值,对于较大的表,全表扫描的代价是不可接受的。

3.1.1、修改Hbase的regionserver节点的hbase-site.xml配置文件

<property>

<name>hbase.regionserver.wal.codec</name>

<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>

</property>

<property>

<name>hbase.region.server.rpc.scheduler.factory.class</name>

<value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>

<description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>

</property>

<property>

<name>hbase.rpc.controllerfactory.class</name>

<value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>

<description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>

</property>

注意:网上配置文档里有这一条,但在实际测试中(测试环境hbase-1.3.1,网上0.98.6),加入该条的regionserver会在hbase启动时失败,对应节点上没有HregionServer进程,去掉该配置后正常启动,且能正常创建local index。

<property>

<name>hbase.coprocessor.regionserver.classes</name>

<value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value>

</property>

还有一点,hbase-site.xml的zookeeeper的配置信息不能加2181,否则在创建local index的时候会报以下异常:

正常配置

3.1.2、修改Hbase的master节点的hbase-site.xml配置文件

注意,如果master节点上也有regionserver,那么master节点配置如下,否则不需要regionserver的配置参数。

<!-- phoenix master 配置参数 -->

<property>

<name>hbase.master.loadbalancer.class</name>

<value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>

</property>

<property>

<name>hbase.coprocessor.master.classes</name>

<value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>

</property>

<!-- phoenix regionserver 配置参数 -->

<property>

<name>hbase.regionserver.wal.codec</name>

<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>

</property>

3.2创建索引

配置好以上配置信息之后,重启Hbase,以下测试环境通过Phoenix映射Hbase中已有的表,数据量743569行,202M,当然也可以通过Bulkload直接在Phoenix创建表并插入数据影响Hbase。

3.2.1、未创建索引信息时,用时6.08s

select "uploader" from "hive_hbase_youtube" where "uploader"='karianahhk';

3.2.2、创建索引,用时0.014s

create index "youtube_index2" on "hive_hbase_youtube" ("info"."uploader");

3.3关于Phoenix创建的HBase二级索引的更新问题

3.3.1、在使用Phoenix创建Hbase的二级索引表之后,在Phoenix中看不到新建的索引表,但是

在Hbase表中可以看到索引表。

现在,有一个问题,可以看到同一个表中查询的数据却不同,原因是Jarry是直接向Hbase表插入的数据,而Phoenix已经为name字段创建索引,这时就查询不到Jarry,但是通过Phoenix的映射表向Hbase插入的数据数据查询索引字段可以查询到。

3.3.2、问题是,如果绕开Phoenix向Hbase表插入数据,那么索引表就不会动态更新。

解决方案:

现有的解决方案是,在通过Hbase向表中插入数据时,我们要向索引表中也插入一条索引数据。那么查看以下索引表数据:

其实索引的rowkey就是索引字段+rowkey,那么我们插入一条:

put 'name',"Jarry\x001003",'0:_0','x'

3.3.3、再次查询Phoenix中的索引字段,可以显示索引字段了。

有关索引的扩展请访问

https://blog.csdn.net/qq_41665356/article/details/80278125

大数据hbase nosql数据库相关推荐

  1. 天翼云从业认证(1.3)了解数据库的概念、SQL、关系型数据库、大数据和 NoSQL 数据库

    数据库的概念 SQL 简单举例 create \ insert \ update \ delete\select WHERE\BETWEEN\IS NULL\LIKE avg\count\max gr ...

  2. 解惑一---大数据与Oracle数据库

    今天针对于我的学生经常问我的问题,我简单的给大家解答一下,纯粹是主观的个人观点. 1.Oracle数据库现在在市场上还有竞争力吗? 回答这个问题,首先大家要了解去IOE的概念. 它是阿里巴巴造出的概念 ...

  3. 大数据——HBase数据库操作实例

    大数据--四种数据库(MySQL,HBase,MongoDB,Redis)操作实例 问题描述: Student学生表 1. 根据上面给出的表格,用Hbase Shell模式设计student学生表格. ...

  4. 2021年大数据HBase(八):Apache Phoenix的基本介绍

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 前言 系列历史文章 Apache Phoenix的基本介绍 Apache ...

  5. 从曾经的一家独大到现在的群雄逐鹿,大数据时代的数据库圈为啥如此之乱?

    前言 最近家里事情比较多,逃了很久的更.终于找到了点时间继续写一写,好不容易坚持下来的写东西的习惯可不能半途而废了. 上一篇文章吐槽了下技术快速发展对技术人员带来的各种深远影响,但是主要是从总体上来说 ...

  6. 2021年大数据HBase(十六):HBase的协处理器(Coprocessor)

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase的协处理器(Coprocessor) 一.起源 二 ...

  7. 2021年大数据HBase(四):HBase的相关操作-客户端命令式!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-客户端命令式 1.进入HBase ...

  8. DBA观点分享:大数据对传统数据库的影响

    文章讲的是 DBA观点分享:大数据对传统数据库的影响, 大数据趋势在2012年开始变得明显,Hadoop.NoSQL等技术的兴起,令传统数据库稳固的江山开始动摇."以不变应万变"不 ...

  9. 【云周刊】第135期:云栖大会珍贵技术资料:20+覆盖容器技术、智能工业、大数据、开源数据库

    摘要: 云栖大会珍贵技术资料合集:覆盖容器技术.智能工业.大数据.开源数据库等,阿里公开内部超大规模分布式机器学习平台,机器学习能为你的业务做什么?有些事情你肯定猜不到!...更多精彩技术资讯,尽在云 ...

最新文章

  1. JSONObject 和 JSONArray 获取value 的方法
  2. PHP 调用C的代码
  3. 倒梁法matlab,在编制措施项目清单时,关于钢筋混凝土模版及支架费项目,应在清单中列明(    )...
  4. [转]Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法
  5. 数学建模——线性规划模型详解Python代码
  6. java静态和动态的区别是什么意思_Java中的动态和静态多态性有什么区别?
  7. Python爬虫教程(二)
  8. Fliptile (二进制压缩)
  9. 学会阅读硬件的原理图、数据手册大全
  10. Mac 登陆 去掉 其他用户
  11. mysql工作实用经验_SQL SERVER实用经验技巧集 [一]_mysql
  12. linux集群中mpi的并行计算环境简单配置,linux集群中MPI的并行计算环境简单配置...
  13. Arcgis Javascript那些事儿(九)--自定义infowindow
  14. html固定表格宽度代码,如何固定HTML表格的宽度
  15. 抖音小店怎么去添加淘宝链接?哪种推广适合淘客丨国仁网络资讯
  16. 电信路由器用linux开发板,WRTnode: WRTnode是基于家用无线路由器芯片的开源Linux开发板,想法源于我之前的项目和产业经验...
  17. 2018年终总结,忙碌充实的一年
  18. android二维码制作
  19. Phonics 自然拼读法 ou ow oi oy au aw oo oo ea Teacher:Lamb
  20. 不渴望得到,不害怕失去|佛系态度|无所谓,无欲无求 状态分析

热门文章

  1. 涨点神器!南航提出AFF:注意力特征融合,即插即用!可用于分类、检测和分割等...
  2. 基于粤嵌6818开发板上通过网络连接实现文件传输
  3. 爱签电子合同:2021年电子签章、电子合同政策汇总
  4. matlab如何下载对应版本的runtime
  5. python3 opencv 基于二值化图像素投影的图片切割方法
  6. 购书 (C++)简单贪心
  7. 华医通显示连接服务器失败,华医通app怎么用 华医通app使用教程
  8. 计算机自考考研学校有哪些专业,自考生考研9大热门专业,你知道是哪些吗?...
  9. 生物信息学简介 -整理综合
  10. 开发App,如何更好的进行技术选型