天天看点

hbase 整理

时间同步设置

ntpdate.cn.pool.ntp.org

zookeeper

分布式系统协调工具 高可用协调工具

zookeeper 上的数据存在于每个server节点上 每个节点上的zookeeper节点上保存的数据都是全量数据zookeeper上保存的数据的方式和文件系统保存数据一样

hbase的数据模型

sql 在sql的数据库中包含两种元素

即 模式和元组

nosql:在nosql里面一般更强调元组而弱化模式 有些nosql中没有模式 有些nosql有比较弱的模式 比方说有些表而没有明确字段 或者有表有更为冠以上的字段

hbase 是nosql中的一种 它的设计和他使用都是反模式的。它里面不是完全没有模式 ,它的模式分为三层。

1.namespace 类似于mysql 的database

2.table 类似于MySQL的table

3.column 雷速与mysql的table

把他认为是mysql里面一个表的多个字段按照找某个条件分成多组

一个hbase 中可以创建若干个2namespace namespace一般用来做部门或者应用之间的数据隔离

一个namespace下可以创建若干个table table做不通种类的数据之间的隔离

一个列簇下面可以有若干个列簇

hbase 的劣质可以使任意类型

hbase对其中所有存储的数据不做任何类型上的限制

hbase在存储数据的位置不作任何类型上的限制

hbase在存储书籍肚饿位置处统一的吧数据转换成字节数组来进行保存的。

namespace的基本操作

create_namespace 'bd2o'

list_namespace 展示hbase有多少个namespace

list_namespace_table 'bd20' 展示bd20数据下有多少张表

drop_namespace 'bd20'

table 的基本操作

创建表

create 'bd20:table_name' ,'column_family'

describe 'bd20:table_name'

disable 'bd20:table_name'

drop 'bd20:table_name'

--alter table

alter 'bd20:table1',NAME=>'c1',method=>'delete'

alter table 'bd20:tale1',NAME=>'c2'

create

create 'cms_link','primary_info','system_info'

mysql 上所说的一条数据值的是一行数据

hbase中所说的一条数据值的是一行数据中的单元格

put ‘cms_link’,'1','primary_info:category_id','19'

hbase 底层数据存储

hbase 的底层数据是按照挑来保存的,每一条数据在底层数据文件里面占据一个存储空间。每条数据的格式如下

rowkey

timestamp

family_column

hbase的数据文件是吧每条数据以kv的形式来存储的

因为key上的大部分数据都是冗余的,范式我们自己设计的kety上的数据 尽可能的限定他们的长度

rowkey在设计师要舍得尽可能的端

列簇在设计上要尽可能的端,要尽可能的表达劣质的数据内容的意义,比方说姓名,年龄等。

hbase架构原理

hbase中的没一张表都是分布式存储的

hbase 吧一张表的tale划分为多个region 每个rigion可以散布在不同的regionserver 上来对外提供服务,hbase 是根据兴业划分region 也就是说hbase是根据rowkey 来划分region的。

每个region都有自己的rowkey上下线,第一个region没下线,最后一个region 没有上下限,当一条记录需要保存在habse 中,hmaster 会判断这条记录的rowkey应该分布在哪个region上,然后转交给这个region所负责的regionserver来执行读写操作。

hbase 的region 的大小会随着里面的数量的增加而增加。当以region的体谅超过256M时,这个region就会分裂。分裂的过程有hmaster主导,由hregionserver执行,在分裂的过程中,不对外提供读写服务。

hbase 中如果在定义表示不对表进行预分区。那么整个hbase 表就只有一个region 为了尽可能的皮面分裂最好。

create ‘stable1’,‘i’,SPLITS=>['100','200','300','400','500']

hbase 根据rowkey查找一个表tableA数据的过程 根据root表来确定meta的位置,root表存在于zookeeper 中 根据元数据定位taleA的位置,元数据保存在hbase的meta 表中。

定位tableA的位置,然后根据rowkey来确定要查找记录的准确region 根据region定位其所在。

regionserver regionserver根据rowkey就检索数据文件中记录的位置从而获取数据。

hbase中的数据来源

1.来源自自己有的数据文件

mapreduce

hive

spark

bulk loading

2.来自业务系统不断增加的数据记录。

java api

shell

其他语言 +thrift服务

hbase api操作

1.构建配置参数对象,使用hbaseConfiguration来创建。

2.创建Connection 对象。使用ConnectionFactory 来创建。

3.如果执行ddl来操作的话需要Admin对象。通过Connection来获取。

4.如果执行dml操作的话需要Table对象,通过Connection来获取。

往hbase里面插入数据 需要Put对象,一个Put对象代表一行数据。

mapreduce读写hbase

TableInoutFormat

TableOutputFotmat

TableMapper

TableReducer

TableMapReduceUtil

写hbase 需要在job上配置输出格式为

TableOutputFormat,reduce 的输出kv必须满足写入hbase表的kv类型

可以通过写reduce继承TabeReducer来解决这个kv类型的限定。

在Job中还得设置目标表,可以通过调用。