HBase学习笔记 (三)

三、HBase高级使用


HBase学习笔记 (三)_第1张图片



1HBase Shell创建表(多个列簇和设置属性)


HBase学习笔记 (三)_第2张图片


创建命名空间:

HBase学习笔记 (三)_第3张图片

例如:

Createa table with namespace=ns1 and table qualifier=t1

  hbase> create 'ns1:t1', {NAME => 'f1',VERSIONS => 5}

 

Createa table with namespace=default and table qualifier=t1

  hbase> create 't1', {NAME => 'f1'},{NAME => 'f2'}, {NAME => 'f3'}

  hbase> # The above in shorthand would bethe following:

  hbase> create 't1', 'f1', 'f2', 'f3'

  hbase> create 't1', {NAME => 'f1',VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}

  hbase> create 't1', {NAME => 'f1',CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}

  hbase> create 't1', {NAME => 'f1',IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY=> 'weekly'}


要设置属性可参考如下格式:

HBase学习笔记 (三)_第4张图片

HBase学习笔记 (三)_第5张图片

 


2HBase表创建时的预分区及创建方式一


HBase学习笔记 (三)_第6张图片




案例:

假设rowkey为年月日时分秒毫秒。


方式一:

HBase学习笔记 (三)_第7张图片

hbase(main):015:0> create 'bflogs','info',SPLITS =>['20180201000000000','20180211000000000','20180221000000000']

HBase学习笔记 (三)_第8张图片

 

方式二(最常用):

HBase学习笔记 (三)_第9张图片

HBase学习笔记 (三)_第10张图片

hbase(main):016:0> create'bflogs2','info',SPLITS_FILE => '/opt/datas/bflogs-split.txt'

HBase学习笔记 (三)_第11张图片

 

方式三:

使用自定义的类进行分割,这里我们用官方提供的

HBase学习笔记 (三)_第12张图片

create 't11', 'f11', {NUMREGIONS =>5, SPLITALGO => 'HexStringSplit'} 采用十六进制

HBase学习笔记 (三)_第13张图片

 

create 't22', 'f22', {NUMREGIONS =>5, SPLITALGO => ' UniformSplit'}

HBase学习笔记 (三)_第14张图片


当创建表无反应时:

可能是分的Region太多了,修改Region数量。

查看日志,因为创建表归master管,所以查看hbase-root-master-hadoop-senior.log。

 

.tmp目录的作用:

HBase学习笔记 (三)_第15张图片

 


3.依据【话单】查询需求分析HBase的表设计


HBase学习笔记 (三)_第16张图片

每天的通话记录上亿条,保存在hbase中。

HBase学习笔记 (三)_第17张图片

HBase学习笔记 (三)_第18张图片

HBase学习笔记 (三)_第19张图片

HBase学习笔记 (三)_第20张图片


4.  设计【话单】数据存储表的rowkey设计


HBase学习笔记 (三)_第21张图片

rowkey:本人电话+日期。日期在rowkey上,需要的话,可分割rowkey取出时间。图中假设查询2015410日到412日的通话记录。

HBase学习笔记 (三)_第22张图片 

 

5.  设计【话单】数据存储索引表的设计及数据同步解决方案


HBase学习笔记 (三)_第23张图片

hbase不像关系型数据库自动建立索引,所以需要自己建立索引表。

HBase学习笔记 (三)_第24张图片

 HBase学习笔记 (三)_第25张图片

关系型数据库主表和索引表数据自动同步。

 


6.  HBase 表属性压缩配置讲解


HBase学习笔记 (三)_第26张图片

VERSIONS:表示列的版本数,超过版本数的老版本在合并时将被忽略,即被删除。

MIN_VERSIONS0:表示可以一个列也没有。

案例:

VERSIONS可用作是否检测套牌,即在很短的时间内,有多个相同的车牌的信息。

HBase学习笔记 (三)_第27张图片

执行了以上操作,在进入hbase shell时不能加载native的警告就会消失。

HBase学习笔记 (三)_第28张图片


  1. HBase学习笔记 (三)_第29张图片HBase学习笔记 (三)_第30张图片

只在创建表的时候设置压缩格式还不行,必须在hbase-site中设置hbase.regionserver.codecs(这个一开始就要设置)告诉RegionServer压缩格式。


HBase学习笔记 (三)_第31张图片

 


7.  HBase  BlockCache配置


HBase学习笔记 (三)_第32张图片

除了meta表,一般的表IN_MEMORY通常为false

作用域可在代码中覆盖掉:

HBase学习笔记 (三)_第33张图片


RegionServer内存的使用:

HBase学习笔记 (三)_第34张图片

HBase学习笔记 (三)_第35张图片


MemstoreBlockCache

HBase学习笔记 (三)_第36张图片

HBase学习笔记 (三)_第37张图片

HBase学习笔记 (三)_第38张图片

meta元数据保存到IN_MEMORY可加快查询速度。

 

查看meta表:

HBase学习笔记 (三)_第39张图片 


8.  HBase 表的Compaction深入剖析讲解


HBase学习笔记 (三)_第40张图片

HBase学习笔记 (三)_第41张图片

HBase学习笔记 (三)_第42张图片


hbase表中会被删除的三类数据:

① 被打上删除标记的数据

② 超过版本号限制的数据

③ 生存周期结束的数据



9.  HBase 集群及表的管理讲解


HBase学习笔记 (三)_第43张图片

 

使用Web UI管理表:

HBase学习笔记 (三)_第44张图片

为什么store的数量大于storeFile

因为我们创建了很多空表,并且有的表的数据还在memStore中没有写到storeFile中。


设置日志的级别:

ps -ef |grep java

HBase学习笔记 (三)_第45张图片

HBase学习笔记 (三)_第46张图片

HBase学习笔记 (三)_第47张图片

HBase学习笔记 (三)_第48张图片


使用hbase shell管理表:


HBase学习笔记 (三)_第49张图片

HBase学习笔记 (三)_第50张图片

HBase学习笔记 (三)_第51张图片

查看regionscan 'hbase:meta' 或者查看web ui。

 

使用hbase shell管理hbase数据:


为什么在删除表的时候要禁用(disable)表?

因为表被regionregionserver管理,要告诉它们。


使用hbase shell管理集群:

可见使用hbase shell管理hbase表。

 

hbase shell使用JAVA方法:

例如: 

HBase学习笔记 (三)_第52张图片


Row counter

HBase学习笔记 (三)_第53张图片


管理预写日志WAL

HBase学习笔记 (三)_第54张图片

HBase学习笔记 (三)_第55张图片

HBase学习笔记 (三)_第56张图片

HBase学习笔记 (三)_第57张图片

 

管理hfile

HBase学习笔记 (三)_第58张图片

HBase学习笔记 (三)_第59张图片


检查整个集群的状态:

bin/hbase hbck

HBase学习笔记 (三)_第60张图片


hbase表的修复:

HBase学习笔记 (三)_第61张图片

HBase学习笔记 (三)_第62张图片

HBase学习笔记 (三)_第63张图片

(最常用的是-fix-fixMeta)


10.  HBase Hive集成使用讲解

 

本质:

HiveHBase的客户端,需要HBase的一些配置和jar包。

HBase学习笔记 (三)_第64张图片

handler:数据的处理。


查看文档:

https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

HBase学习笔记 (三)_第65张图片


①  复制hbasejar包到hivelib

需要的jar包:

HBase学习笔记 (三)_第66张图片

hive-hbase-handler-1.1.0-cdh5.13.0.jar(hive lib已存在)

hbase-client-1.2.0-cdh5.13.0.jar

hbase-server-1.2.0-cdh5.13.0.jar

hbase-protocol-1.2.0-cdh5.13.0.jar

hbase-common-1.2.0-cdh5.13.0.jar

hbase-it-1.2.0-cdh5.13.0.jar

htrace-core-3.2.0-incubating.jar

zookeeper-3.4.5-cdh5.13.0.jarhive lib已存在)

(建立软链接时查看jar包是否已存在ls lib |grep xxx,而且建立软连接一定要是全路径。否则在查看时,链接就会变成红色,代表链接错误如下图:

HBase学习笔记 (三)_第67张图片

ln -s /opt/cdh5.13.0/hbase-1.2.0-cdh5.13.0/lib/hbase-client-1.2.0-cdh5.13.0.jar /opt/cdh5.13.0/hive-1.1.0-cdh5.13.0/lib/hbase-client-1.2.0-cdh5.13.0.jar

 

ln -s /opt/cdh5.13.0/hbase-1.2.0-cdh5.13.0/lib/hbase-server-1.2.0-cdh5.13.0.jar /opt/cdh5.13.0/hive-1.1.0-cdh5.13.0/lib/hbase-server-1.2.0-cdh5.13.0.jar

 

ln -s /opt/cdh5.13.0/hbase-1.2.0-cdh5.13.0/lib/hbase-it-1.2.0-cdh5.13.0.jar /opt/cdh5.13.0/hive-1.1.0-cdh5.13.0/lib/hbase-it-1.2.0-cdh5.13.0.jar

 

②  hive-site.xml中添加hbase client zookeeper

HBase学习笔记 (三)_第68张图片

HBase学习笔记 (三)_第69张图片


 

         hbase.zookeeper.quorum

         hadoop-senior

 

(这里是伪分布式)


hive Cli查看:


③  如果开启了远程metastore,要开启metastore服务

hive --service metastore

否则会报以下异常:

执行sql报错:

HBase学习笔记 (三)_第70张图片


 创建一个hive表,指定数据存储在hbase

HBase学习笔记 (三)_第71张图片


CREATE TABLE hbase_table_1(key int, value string)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")

TBLPROPERTIES ("hbase.table.name" = "xyz", "hbase.mapred.output.outputtable" = "xyz");

":key,cf1:val"":key, 列簇:列名"。


通过shell查看表是否存在:

hive shell:

HBase学习笔记 (三)_第72张图片

HBase学习笔记 (三)_第73张图片

 

hbase shell:

HBase学习笔记 (三)_第74张图片

HBase学习笔记 (三)_第75张图片


通过hdfs查看文件是否存在:

HBase学习笔记 (三)_第76张图片

HBase学习笔记 (三)_第77张图片


可能出现的异常:

HBase学习笔记 (三)_第78张图片

HBase学习笔记 (三)_第79张图片

将以下两个jarcphive lib

netty-all-4.1.6.Final.jar

metrics-core-2.2.0.jar


 插入数据

HBase学习笔记 (三)_第80张图片

HBase学习笔记 (三)_第81张图片

报了该错误说明少了jar包。

解决:hbase lib目录下的hbase-hadoop-compat-1.2.0-cdh5.13.0.jar放到hivelib下(最好建立软链接ln -s


HBase学习笔记 (三)_第82张图片

HBase学习笔记 (三)_第83张图片


⑥  查看

查看hive表数据:

HBase学习笔记 (三)_第84张图片


查看hbase表数据:

HBase学习笔记 (三)_第85张图片


hdfs

HBase学习笔记 (三)_第86张图片

(没有文件是因为数据都存在hbase表了)

HBase学习笔记 (三)_第87张图片

(没有文件是因为数据还在memStore中)


flush数据到storefile

HBase学习笔记 (三)_第88张图片

HBase学习笔记 (三)_第89张图片


⑦  删除表

HBase学习笔记 (三)_第90张图片

HBase学习笔记 (三)_第91张图片

删除hive表时,hbase表也被删除了。因为该表是管理表。也就是说要看hive管理表和外部表的本质。


创建hive外部表,数据在HBase表中:

HBase学习笔记 (三)_第92张图片

HBase学习笔记 (三)_第93张图片

HBase学习笔记 (三)_第94张图片

(命令下方又输出了一遍sql是因为我们在开启hive服务的时候加了-v参数)

CREATE EXTERNAL TABLE hbase_basic(id int, name string, age int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")
TBLPROPERTIES ("hbase.table.name" = "basic");

 

删除hive外部表,外部表的数据不会被删除:

HBase学习笔记 (三)_第95张图片

HBase学习笔记 (三)_第96张图片

 

HiveHBase集成的应用场景:


HBase学习笔记 (三)_第97张图片

(一号店就是这么做的)



11.  使用Sqoop导入数据到HBase表中


HBase学习笔记 (三)_第98张图片

sqoop只有map任务没有reduce任务。

HBase学习笔记 (三)_第99张图片

HBase学习笔记 (三)_第100张图片


mysql数据迁移到hbase

HBase学习笔记 (三)_第101张图片

sqoop import \

--connect jdbc:mysql://hadoop-senior:3306/test \

--username "root" \

--password "123456" \

--table "my_user" \

--columns "id,acount,password" \

--column-family "info" \

--hbase-table "hivetohbase" \

--hbase-create-table // hbase表不存在时,创建表

--hbase-row-key "id" -m 1

HBase学习笔记 (三)_第102张图片

 


12.  HBase 如何与Hue集成使用


HBase学习笔记 (三)_第103张图片 

什么是Thrift

Thriftapache的一个顶级项目。比如我用java编写的hbase框架,我现在只会python,可以通过Thrift去读写hbase的数据。Thrift起到桥梁的作用。huehbase来说是个客户端,但是hue走的不是API而是Thrift Server去读取表中的数据。查看hue源码可知,hue后台使用的是python。很多公司都用pythonhbase进行交互。

 

①  启动Thrift服务

HBase学习笔记 (三)_第104张图片

不启动Thrift会报如下异常:

HBase学习笔记 (三)_第105张图片


②  修改hue.ini

HBase学习笔记 (三)_第106张图片

 

③  启动hue,并查看HBase

build/env/bin/supervisor

HBase学习笔记 (三)_第107张图片


13.  企业实战之HBase 集群安装部署


HBase学习笔记 (三)_第108张图片


修改hbase配置文件,并把hadoop的配置文件软链接到hbase下:

HBase学习笔记 (三)_第109张图片

HBase学习笔记 (三)_第110张图片

 

 

14.  企业实战之【电商订单】存储分析


HBase学习笔记 (三)_第111张图片

 

订单显示页:

HBase学习笔记 (三)_第112张图片

订单和子订单:用户买的多个商品属于一个订单,这些商品有的是京东自营的有的是京东合作的商家的,这些作为子订单。


订单详情页:

HBase学习笔记 (三)_第113张图片

 

RDBMSHBase结合使用:

HBase学习笔记 (三)_第114张图片

当订单完成时,就把数据从rdbms迁移到hbase

其他还用到一些内存的数据库比如:RedisMongoDB等,便于多次查询,例如双十一发货慢,用户经常查询自己的订单。


HBase学习笔记 (三)_第115张图片

Cache一般缓存:比较畅销、发货速度较慢的用户经常查的。


HBase学习笔记 (三)_第116张图片


HBase学习笔记 (三)_第117张图片


HBase学习笔记 (三)_第118张图片

订单编码为了方便查询。


HBase学习笔记 (三)_第119张图片


订单显示页的rowkey为什么要加上orderId字段?

方便二次查询。

 

创建索引表:

HBase学习笔记 (三)_第120张图片

该图中根据查询设计的表都是索引表。例如根据商品编号查询的rowkey设计:商品编号+用户id+订单号/订单创建时间。这样才能保证唯一,因为一个用户可能多次购买同一个商品。




你可能感兴趣的:(HBase学习笔记 (三))