一 HBase概述
HBase是一个领先的NoSQL数据库
是一个面向列存储的数据库 是一个分布式hash map 基于Google Big Table论文 使用HDFS作为存储并利用其可靠性 HBase特点
数据访问速度快,响应时间约2-20毫秒 支持随机读写,每个节点20k~100k+ ops/s 可扩展性,可扩展到20,000+节点
二 HBase应用场景
1 增量数据-时间序列数据
高容量,高速写入
2 信息交换-消息传递
高容量,高速读写
3 内容服务-Web后端应用程序
三 Apache HBase生态圈
HBase生态圈技术
Lily – 基于HBase的CRM OpenTSDB – HBase面向时间序列数据管理 Kylin – HBase上的OLAP Phoenix – SQL操作HBase工具 Splice Machine – 基于HBase的OLTP Apache Tephra – HBase事务支持 TiDB – 分布式SQL DB Apache Omid - 优化事务管理 Yarn application timeline server v.2 迁移到HBase Hive metadata存储可以迁移到HBase Ambari Metrics Server将使用HBase做数据存储
四 HBase物理架构
HBase采用Master/Slave架构
HMaster RegionServer Zookeeper HBase Client Region
1 HMaster的作用
是HBase集群的主节点,可以配置多个,用来实现HA 管理和分配Region 负责RegionServer的负载均衡 发现失效的RegionServer并重新分配其上的Region
2 RegionServer
RegionServer负责管理维护Region
一个RegionServer包含一个WAL、一个BlockCache (读缓存)和多个Region 一个Region包含多个存储区,每个存储区对应一个列簇 一个存储区由多个StoreFile和MemStore组成 一个StoreFile对应于一个HFile和一个列簇 HFile和WAL作为序列文件保存在HDFS上 Client与RegionServer交互
3 Region和Table
单个Table(表)被分区成大小大致相同的Region Region是HBase集群分布数据的最小单位 Region被分配给集群中的RegionServer 一个Region只能分配给一个RegionServer
4 Row
Rowkey(行键)是唯一的并已排序 Schema可以定义何时插入记录 每个Row都可以定义自己的列,即使其他Row不使用
使用唯一时间戳维护多个Row版本
HBase数据全部以字节存储
5 数据管理
数据管理目录
系统目录表hbase:meta
HDFS目录中的文件 Servers上的region实例 HBase数据在HDFS上
可以通过HDFS进行修复File 修复路径
RegionServer->Table->Region->RowKey->列簇
6 架构特点
强一致性 自动扩展
当Region变大会自动分割 使用HDFS扩展数据并管理空间 写恢复
与Hadoop集成
五 HBase Shell
HBase Shell是一种操作HBase的交互模式
支持完整的HBase命令集
基操
用户权限:
实现用户权限操作前需要往hbase-site.xml
添加配置
< property>
< name> hbase. security. authorization < / name>
< value > true < / value >
< / property>
< property>
< name> hbase. coprocessor. master. classes< / name>
< value > org. apache. hadoop. hbase. security. access. AccessController< / value >
< / property>
< property>
< name> hbase. coprocessor. region. classes< / name>
< value > org. apache. hadoop. hbase. security. token. TokenProvider, org. apache. hadoop. hbase. security. access. AccessController< / value >
< / property>
< property>
< name> hbase. superuser< / name>
< value > hadoop< / value >
< / property>
user_permission [ '表名' . . . . ]
grant '用户名' , 'RWXCA'
create '表名' , {NAME= > '列簇名' }, {NAME= > '列簇名' }
disable '表名'
snapshot '表名' , '镜像名'
clone_snapshot '镜像名' , '新表名'
delete_snapshot '镜像名'
list
put '表名' , '行键' , '列簇名:列名' , '值' , [ , 时间戳]
alter '表名' , NAME= > '列簇名'
alter '表名' , NAME= > '列簇名' , METHOD= > 'delete'
get '表名' , '行键' , '列簇名'
将文档导入HBase
crerate 'emp_basic' , {NAME= > 'emp' }, {NAME= > 'time' }
hdfs dfs - put / root/ emp_basic. csv / test2/
hbase org. apache. hadoop. hbase. mapreduce. ImportTsv \
- D importtsv. separator= "," \
- D importtsv. columns = \
"HBASE_ROW_KEY,emp:name,emp:job_title,emp:company,time:sDate,time:eDate" \
"emp_basic" / test2/ emp_basic. csv