Hbase概述及基本命令
一、HBase概述
HBase是一个领先的NoSQL数据库
a)是一个面向列存储的数据库
b)是一个分布式hash map
c)基于Google Big Table论文
d)使用HDFS作为存储并利用其可靠性
HBase特点
a)数据访问速度快,响应时间约2-20毫秒
b)支持随机读写,每个节点20k~100k+ ops/s
c)可扩展性,可扩展到20,000+节点
二、应用场景
增量数据-时间序列数据
高容量,高速写入
信息交换-消息传递
高容量,高速读写
内容服务-Web后端应用程序
高容量,高速读写
三、Apache HBase生态圈
HBase生态圈技术
Lily – 基于HBase的CRM
penTSDB – 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架构
1. HMaster
2. RegionServer
3. Zookeeper
4. HBase Client
5. Region
五、HBase物理架构 - HMaster
HMaster的作用
是HBase集群的主节点,可以配置多个,用来实现HA
管理和分配Region
负责RegionServer的负载均衡
发现失效的RegionServer并重新分配其上的Region
六、HBase物理架构 - RegionServer
RegionServer负责管理维护Region
一个RegionServer包含一个WAL、一个BlockCache (读缓存)和多个Region
一个Region包含多个存储区,每个存储区对应一个列簇
一个存储区由多个StoreFile和MemStore组成
一个StoreFile对应于一个HFile和一个列簇
HFile和WAL作为序列文件保存在HDFS上
Client与RegionServer交互
七、HBase物理架构 - Region和Table
单个Table(表)被分区成大小大致相同的Region
Region是HBase集群分布数据的最小单位
Region被分配给集群中的RegionServer
一个Region只能分配给一个RegionServer
八、HBase逻辑架构 - Row
Rowkey(行键)是唯一的并已排序
Schema可以定义何时插入记录
每个Row都可以定义自己的列,即使其他Row不使用
相关列定义为列簇
使用唯一时间戳维护多个Row版本
在不同版本中值类型可以不同
HBase数据全部以字节存储
九、HBase数据管理
数据管理目录
a)系统目录表hbase:meta
作用:存储元数据等
b)HDFS目录中的文件
c)Servers上的region实例
HBase数据在HDFS上
a)可以通过HDFS进行修复File
b)修复路径
RegionServer->Table->Region->RowKey->列簇
十、HBase架构特点
强一致性
自动扩展
a)当Region变大会自动分割
b)使用HDFS扩展数据并管理空间
写恢复
使用WAL(Write Ahead Log)
与Hadoop集成
十一、HBase Shell
hbase安装教程:link
启动hbase:
hbase-deamon.sh start master
hbase shell
HBase Shell是一种操作HBase的交互模式
支持完整的HBase命令集
十二、Hbase基本命令
用户权限:
user_permission [‘表名’…]
赋权:
grant ‘用户名’,‘RWXCA’
创建表:
create ‘表名’,{NAME=>‘列簇名’},{NAME=>‘列簇名’}…
删除表:
disable ‘表名’ ----->drop ‘表名’
清空表数据:
truncate ‘表名’
修改表名:
snapshot ‘表名’,‘镜像名’
clone_snapshot ‘镜像名’,‘新表名’
delete_snapshot ‘镜像名’
查表名:list
描述表:desc ‘表名’
查看表内容:scan ‘表名’
查看表中的记录总数:count ‘表名’
行操作:
put:put ‘表名’,‘行键’,‘列簇:列名’,‘值’[,时间戳]
可以单独删除行,行内的数据全部删除 delete ‘表名’,‘行键(rowkey)’,‘列簇名:列名’
删除整行 deleteall ‘表名’,‘rowkey’
列簇操作:
增 alter ‘表名’,NAME=>‘列簇名’
删 alter ‘表名’,NAME=>‘列簇名’,METHOD=>‘delete’
改 先加后删
查 :
获取某个列簇 get ‘表名’,‘行键(rowkey)’,‘列簇名’
获取某个列簇的某个列 get ‘表名’,‘行键(rowkey)’,'列簇:列名’
十三、批量导入文件
添加配置hbase-site.xml:
确认superuser
在hbase中输入:whoami查看
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.superuser</name>
<value>root</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>
1.文件传入hdfs
2.在hbase中创建表结构
3.在linux中上传文件到hbase
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv
-Dimporttsv.separator=","
-Dimporttsv.columns="HBASE_ROW_KEY,
emp:name,emp:job_title,emp:company,time:sDate,time:eDate"
"emp_basic" /root/emp_basic.csv //表名 hdfs中文件路径
4.查看表