博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase进阶
阅读量:4159 次
发布时间:2019-05-26

本文共 5437 字,大约阅读时间需要 18 分钟。

文章目录

一.HBase REST API

使用REST API操作HBase

  • 1.start/stop rest service
./hbase-daemon.sh start rest -p 9081./hbase-daemon.sh stop rest -p 9081

示例

http://localhost:9081/versionhttp://localhost:9081/
/schemahttp://localhost:9081/
/

在这里插入图片描述

二.Phoenix概述

Phoenix简介

  • 构建在HBase上的SQL层
  • 使用标准SQL在HBase中管理数据
  • 使用JDBC来创建表,插入数据、对HBase数据进行查询
  • Phoenix JDBC Driver容易嵌入到支持JDBC的程序中

Phoenix无法代替RDBMS

  • 缺乏完整约束,很多领域尚不成熟

Phoenix使HBase更易用

Phoenix应用场景

  • 1)Phoenix适合场景
  • 2)快速而容易地构建基于HBase的应用程序
  • 3)需要极大的规模、性能和并发性的SQL应用程序
  • 4)在转换到Hadoop时重用已有的SQL技能
  • 5)BI工具(对SQL支持较好)

Phoenix不适合场景

  • 1)涉及大型Join操作或高级SQL特性的复杂SQL查询
  • 2)Full-Table Scans
  • 3)ETL jobs
  • 4)Application Drivers/Interface

Phoenix支持类SQL语法

Phoenix支持的关键字类型

Standard SQL Data Types	--标准SQL 数据类型SELECT, UPSERT, DELETE	--UPSERT与标准SQL不同 更新和插入都是一样的JOINs: Inner and OuterSubqueriesSecondary IndexesGROUP BY, ORDER BY, HAVINGAVG, COUNT, MIN, MAX, SUMPrimary Keys, ConstraintsCASE, COALESCEVIEWsPERCENT_RANK, LAST|FIRST VALUEUNION ALLCross JoinsWindowing Functions		--窗口函数Transactions		--事务AuthorizationReplication Management

Phoenix操作HBase

  • 1)安装Phoenix
  • 2)拷贝相关Jar包到RegionServer的HBase的lib目录
cp phoenix-4.14.0-cdh5.14.2-server.jar /opt/install/hbase/lib/
  • 3)进入Phoenix的bin目录启动
./sqlline.py  localhost   -- 其中localhost为Zookeeper所在节点的主机名/opt/install/phoenix/bin/sqlline.py

命令行操作

!tables  	-- 查看所有表,类似于beeline操作CREATE TABLE company (COMPANY_ID INTEGER PRIMARY KEY, NAME VARCHAR(225)); 	 --创建表操作UPSERT INTO company VALUES(1, 'Microsoft');  	-- 插入数据不支持插入多条数据SELECT * FROM Company;	--查看数据

三.Hive与HBase集成使用场景

将HBase作为Hive数据源,让HBase支持类SQL操作

将Hive ETL数据存入HBase,便于快速查询
构建低延时的数据仓库,利用HBase快速读写能力,实现数据实时查询
在这里插入图片描述

1.Hive与HBase集成原理

通过两者本身对外的API接口互相通信完成

  • 由Hive的lib目录中hive-hbase-handler-*.jar工具类实现

HBaseStorageHandler

  • 实现Hive与HBase集成的类
  • 对HiveStorageHandler接口的实现

HBase作为Hive的数据源

  • 创建Hive表映射HBase原有的表,实现HBase表更新后,Hive能获取到更新后的结果

Hive ETL结果存入HBase

  • 创建Hive表映射HBase表,可以实现将Hive ETL后的结果被HBase访问

练习:

  • 实现Hive中创建表hive_hbase_emp_table关联HBase
  • 在Hive中插入数据,通过HBase查询
  • 在HBase中插入数据,通过Hive查询
-- hbase表CREATE TABLE emp(emp_id INTEGER PRIMARY KEY,emp_name varchar(20),age INTEGER);UPSERT INTO emp VALUES (1,'zhangsan',20);UPSERT INTO emp VALUES (2,'ls',21);UPSERT INTO emp VALUES (3,'ww',22);select * from emp;-- hivecreate external table emp(emp_id int,emp_name string,age int)ROW FORMAT SERDE  'org.apache.hadoop.hive.hbase.HBaseSerDe' stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,0:emp_name,0:age")tblproperties("hbase.table.name"="EMP");-- hive 插入 hbase 查询insert into emp values(1,'zs',21),(2,'zs',22),(3,'ls',23),(4,'ww',24),(5,'zl',25);scan 'EMP'-- hbase 插入 hive 查询put 'EMP', '1001','0:age','20'put 'EMP' ,'1001','0:emp_name','test01'select * from emp;

三.Hbase常用命令

1.名称空间(NameSpace)

NameSpace:一种易于表管理的机制:可以创建、删除或更改NameSpace

#创建namespace语法create_namespace '名称'#列出所有namespacelist_namespace#namespace下创建表语法create 'namespace名字:表名', '列族名' #删除namespacedrop_namespace '名称' #更改namespace属性语法alter_namespace 'namespace名称', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'} #删除属性alter_namespace 'test01',{METHOD=>"unset",NAME=>"author"}

2.安全权限(Security with GRANT)

使用grant命令进行授权管理:如读、写、执行和管理等

我们可以为用户赋予RWXCA权限中的一个或多个

R -  read privilege	读权限W - write privilege	写权限C - create privilege	创建权限	A - admin privilege	管理权限X - execute		执行权限# 示例:给will用户赋予读写创建管理权限grant 'will', 'RWCA', 'my_hbase_table'

3.权限管理命令(revoke & user_permission)

  • 使用grant命令授权
语法:grant 
[
]] 示例:grant 'will', 'RWCA', 'my_hbase_table'
[
  • 使用revoke命令删除权限
语法:revoke 
[
]]示例:revoke 'will', 'my_hbase_table'
[
  • 使用user_permission查看用户对表所拥有的权限
语法:user_permission 'tablename'示例:user_permission 'my_hbase_table'

四.Region管理

Region拆分

  • 当一个Region大到一定程度,会进行分裂(split)
  • HBase可以通过Region Split达到负载均衡

Region Split策略

  • 1)自动拆分
  • ConstantSizeRegionSplitPolicy
  • IncreasingToUpperBoundRegionSplitPolicy(默认)
  • 2)手动指定拆分点(或按代码预分割)

Region预拆分

  • 指定拆分算法linux命令行运行
hbase org.apache.hadoop.hbase.util.RegionSplitter my_split_table HexStringSplit -c 10 -f mycf其中:my_split_table:我们指定要新建的表名。HexStringSplit:指定的拆分点算法为HexStringSplit。-c:要拆分的Region数量。-f:要建立的列族名称。
  • 手动指定拆分点-hbase shell执行
#指定拆分点create 'test_split2','mycf2',SPLITS=>['aaa','bbb','ccc','ddd','eee','fff']#指定拆分文件 #splits文件中内容为aaa bbb ccc ddd eee fff (有换行)create 'students','baseinfo',SPLITS_FILE => '/root/splits'

Region合并

  • 如果删除了大量数据,很多Region变小,这时候分成多个Region就很浪费,可以把Region合并起来,Region的合并不是为了性能考虑,主要是出于维护的目的

五.HBase Compaction - LSM

1.Log-Structured Merge (LSM)

  • 区别于传统数据库的更新现有数据
  • 使用类似日志结构合并(LSM)的方式
  • 只需要将值写到Log的末尾然后进行排序
  • 优点:插入和更新数据非常快
  • 缺点:占用更多空间
传统数据库 LSM系统
特点 直接更新现有数据 将值写到Log末尾并合并
随机读写 通过顺序读写提高性能
示例 Hello my name is Bruce(Heather) Hello my name is Bruce Hello my name is Heather

2.HBase Compaction - 实现

在这里插入图片描述

Compaction分为Minor和Major两种

  • Minor Compaction:将小文件合并成更少的大型文件
  • Major Compaction:将一个HStore中的所有文件合并成一个文件

每次触发compact检查时,系统自动决定执行哪一种

  • 有三种情况会触发compact检查
  • 1)MemStore被刷写到磁盘
  • 2)执行shell命令compact、major_compact或调用相应API
  • 3)HBase后台线程周期性触发检查

3.HBase Compaction - Control

Minor一般由事件触发,Major一般由时间触发

相关控制

  • Minor(1.2.0-cdh5.14.2版本)
  • 1)hbase.hregion.memstore.flush.size 缓存阈值大小
  • 2)hbase.hstore.compaction.max :每次compact的HFile的最大数目,默认是10
  • 3)hbase.hstore.compaction.kv.max:compact时批量读取和写入KeyValue数据的数量,默认是10
  • Major Compaction
  • 1)hbase.hregion.majorcompaction 时间间隔

4.Flush和Compact操作

  • flush操作
flush 'tablename'flush 'regionname'
  • compact操作
#compact一个表的所有regionscompact 't1'#compact某个空闲的regioncompact 'r1'#compact一个region中的某个列族compact 'r1', 'c1'#compact一个表中的某个列族compact 't1', 'c1'

转载地址:http://ecjxi.baihongyu.com/

你可能感兴趣的文章
设计模式-命令模式
查看>>
设计模式-状态模式
查看>>
PowerDesigner快捷键
查看>>
Java多线程之高并发的一些概念
查看>>
Java多线程之基础概念
查看>>
Java多线程之volatile详解
查看>>
Java多线程之synchronized详解
查看>>
Java多线程之ThreadLocal线程局部变量详解
查看>>
Java多线程之无锁原子类和CAS算法
查看>>
Java多线程之并发工具类的使用
查看>>
Java多线程之AbstractQueuedSynchronizer原理解析
查看>>
Java多线程之常用并发容器的使用
查看>>
Docker安装报错container-selinux >= 2.5-11
查看>>
ELK介绍和集群环境安装
查看>>
Java多线程之线程池Executor
查看>>
Java虚拟机之自动内存管理
查看>>
Java虚拟机之内存分配详解
查看>>
Java虚拟机之垃圾收集器
查看>>
Java虚拟机之常见参数配置
查看>>
Java虚拟机之性能监控工具
查看>>