25Hbase理论基础——好程序

为什么要hbase
随着数据量越来越大,传统的关系型数据库不能满足需求,hive虽然能够满足存储,但是不满足非结构化的存储和高效的查询

hbase是什么
hbase是一个开源的、分布式的、可扩展的、多版本的非关系型数据库。not-only

hbase是bigtable的java开源版本,是建立在hdfs之上的,提供高可靠性、高性能、列存储、可伸缩、实时读写的nosql的数据库系统

阿帕奇HBase伊什是Hadoop数据库,一个分布式、可伸缩的大数据存储。

使用Apache HBase是在当您需要对大数据进行随机、实时读/写访问时。这个项目的目标是在商品硬件集群上托管非常大的表——数十亿行×数百万列。Apache HBase是一个开源的、分布式的、版本化的、非关系型数据库,它的模型是Google的Bigtable:Chang等人的结构化数据分布式存储系统。正如Bigtable利用Google文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS之上提供了类似Bigtable的功能。

hbase的适用场景
需要处理海量非结构化的数据的场景,进行存储,随机近实时的读写管理数据

hbase和hadoop的关系
hbase基于hadoop,hbase的存储依赖于hdfs。

hbase的架构
client、zookeeper、hmaster、hregionserver、hlog、hregion、store、memstore、storefile、hfile

client:
hbase的客户端,包含访问hbase的接口(shell、java api)
client维护一些cache来加速对hbase的访问,比如region的位置信息

zookeeper:
监控master的状态,保证有且仅有一个active的master,达到高可用
存储所有的hregion的寻址入口 -- root表所在的位置(服务器)
实时监控hregionserver的状态,将hregionserver的上下线信息实时通知hmaster
存储hbase的所有表的信息(hbase的schema数据),包含有哪些表,每个表有哪些列簇

hmaster(hbase的老大)
为regionserver分配region(新建表的时候)
负责hregion的重新分配(regionserver异常、hregion变大一分为二)
负责regionserver的负载均衡
hdfs上的垃圾文件回收
处理schema的更新请求

hregionserver(hbase的小弟)
regionserver负责维护master分给给他的region(管理region)
处理client对这些region的io请求,并和hdfs进行交互
regionserver负责切分运行过程中变大的region

hlog:
对hbase的操作进行记录,使用WAL写数据优先写到hLog里,然后再写到memstore(内存),以防数据丢失时可以进行回滚。hlogs属于hregionserver的进程,一个regionserver可以管理多个region,操作日记会写到一个log里,log在region外面

hregion:
hbase中分布式存储和负载均衡的最小单元。表或者表的一部分。()

store:相当于一个列簇。(列是存储的,每一个列簇存到一个文件里面)

memstore:内存缓冲区,用户进行批量刷新数据到hdfs上。(阀值达到128M,则落地到磁盘,上传到hdfs上)

hstorefile:
hbase中的数据以hfile的形式存储到hdfs上(逻辑上的概念,只是在hfile上封装而已)

hfile:

各组件的数量关系
master:regionserver = 1:n
regionserver:log = 1:1
regionserver:region = 1:n
region:store = 1:n
store:memstore = 1:1
store:storefile = 1:n
storefile:hfile = 1:1

hbase的关键字
rowkey:行健(跟mysql的主键一样),不允许重复,有顺序
columnfamily:列簇(列的集合)
column:列
timestamp:时间戳(默认显示最新的时间戳)
version:版本号
cell:单元格(一个单元格表示一个列的key-value值)

hbase的特点
线性和模块化的可扩展性。
严格一致的读写。
表的自动可配置分片
区域服务器之间的自动故障转移支持。
使用Apache HBase表支持Hadoop MapReduce作业的方便基类。
易于使用Java API进行客户端访问。
用于实时查询的块缓存和Bloom筛选器。

模式:无模式
数据类型:单一 byte[](hbase唯一支持的数据类型,所有的数据都会转化为byte)
多版本:每一个值都可以有多个版本
存储:稀疏存储。当key-value的值为null时,整个都不会占用存储空间

hbase的安装步骤
1、Standalone HBase
2、Pseudo-Distributed Local Install
3、Advanced - Fully Distributed(全分布)
    1、上传安装包,解压并配置环境变量  然后source一下
    2、配置hive的环境
           vi hbase-env.sh   (jdk的路径,要全路径,因为ssh登录的时候不会加载环境变量)   
           export  HBASE_MANGES_ZK=false,  如果是true的话,则会自己去启动zookeeper,企业中一般为false
    3、vi conf/regionservers  (配置小弟文件,要告诉小弟在那   也就是所有子节点  hadoop0001hadoop0002hadoop0003)
    4、vi conf/backup-masters(备用master设置,hadoop0001是老大,则hadoop002,hadoop003可以作为备用的)
    5、配置hbase的主配置文件
    vi hbase-site.xml

<!--是否开启分布式模式-->
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>

<!--指定hbase在hdfs的根目录-->
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://gp1923/hbase</value>
</property>

<!-- 指定zk的地址,多个用“,”分割 -->
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop0001:2181,hadoop0002:2181,hadoop0003:2181</value>
</property>

<!-- 指定hbase的监控页面端口 -->
<property>
    <name>hbase.master.info.port</name>
    <value>60010</value>
</property>

    6、如果hdfs是高可用的,需要将hadoop的core-site.xml和hdfs-site.xml拷贝到hbase/conf目录下(hbase是hdfs的客户端)

    7、分发安装包到集群的其他节点
    local] scp -r hbase-1.2.1 root@hadoop0003:$PWD

    8、启动(注意时间同步)
    先启动zk
    再启动hdfs(依赖于存储,操作依赖JavaAPI操作)
    然后启动hbase
    
    监控端口:60010
    hmaster:16010
    hregionserver监控端口:16030
    hregionserver的服务端口:16020

 

hbase的shell操作
启动客户端
hbase shell
help "COMMAND"
help "COMMAND_GROUP"

Group name: namespace
  Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
  
 hbase中没有库的概念,但是有名称空间或者组的概念,namespace相当于库
 hbase默认有两个组
 default
 hbase

alter_namespace 'ns1', {METHOD => 'set', 'NAME' => 'NS2'}

alter_namespace 'ns1', {METHOD => 'unset', NAME=>'gp1923'}


DDL:()
Group name: ddl
Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters

创建表:
create 't2', {NAME => 'info'}, {NAME => 'log'}, {NAME => 'extra'}
create 'ns1:t2',{NAME => 'base_info'},{NAME => 'extra_info',BLOOMFILTER => 'ROWCOL', VERSIONS => '3',IN_MEMORY => 'true'}
 BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', K
EEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', C
OMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6
5536', REPLICATION_SCOPE => '0'

修改表:(有则更新,无则新增)
alter 'ns1:t2',{NAME => 'info'},{NAME => 'base_info',BLOOMFILTER => 'ROWCOL', VERSIONS => '3', IN_MEMORY => 'true'}

排序规则:先排rowkey(有序的),然后排列簇,再在列名上排序

删除列簇:
alter 'ns1:t2',{NAME => 'info',METHOD => 'delete'}

删除表:
disable 'ns1:t1' (1.2以前的版本)
drop 'ns1:t1'

Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
  
 修改数据:(有则修改,无则新增)  修改更新都是put命令
put 'ns1:t2','rk000001','base_info:name','gyy'

表扫描:
scan 'ns1:t1'

get查询数据:(指定行键)
get 'ns1:t2','rk000001',{COLUMNS=>['base_info:name','extra_info:addr']}

删除数据:

delete / deleteall

incr:(自增)
incr 'ns1:t2', 'rk000002', 'base_info:age', 1

清空表:
truncate   (先会disabling table 先删除表,按照原来的结构再创建表 truncating)

 

复习:
zookeeper上存储的hbase的信息
shell命令:
ddl
dml
namspace
tools

help 'command'
help 'group'


HBaseConfiguration
ConnectionFactory
Connection
Admin
Table

DDL
namespace
create
listnamespace
listnamespacetables
alterNamespace
deleteNamespace

Table操作
create
modify
describe
deleteTable
tableExists
isTableEnabled
isTableDisabled
EnableTable
DisableTable

DML
Table
put
get
scan
delete

Result[]
ResultScanner

hbase的api
预习:
http://hbase.apache.org/book.html#client.filter

跟mr的结合
跟hive结合
hbase和hive和hdfs的关系
二级索引
hbase的rowkey
phoenix操作hbase(像sql一样操作)
hbase的优化


rowKey:rk00001    base_info:name:gaoyuanyuan    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值