hbase存储相关浅析

​Hbase存储相关介绍

Region Server: 不同Region数据互斥(Table+StartKey+Time);Region数量不能低于集群节点数量

数据的高可用:内存

通过HLog及MemStore实现数据的高可用,具体设计如下:

HLog(WAL:预写日志===binlog,解决高可用、远程备份):HLog是WAL的实现,HLogKey、HLogSyncer(异步刷日志到H)、HLogRoller(生成新的Hlog、删除多余的Hlog)

MemStore:默认64M,每个列族对应一个Store(含一个MemStore及不定数StoreFile)

不可靠数据的持久化:落盘

通过StoreFile进行数据固化,StoreFile重点涉及Hfile及HBase Compaction的处理;刷磁盘的触发方式包含3种方式。

StoreFile

HFile:存储的最小单元;Data Block存Key-Val(KeyLength、ValueLength、Key、Value),删除是逻辑删除,不会真的删除

HBase Compaction:将小的StoreFile合并成大的StoreFile,包括MinorCompaction、MajorCompaction两类

触发方式

(1) flush操作(整个regin的StoreFile都会执行);

(2) 手动触发

(3) 后台线程周期检查触发(文件数超过阈值;最早更新时间是否超出某个值

设置hbase.hregion.majorcompaction及hbase.hregion.majorcompaction.jitter,在指定闭区别)

【hbase.hregion.majorcompaction-hbase.hregion.majorcompaction*hbase.hregion.majorcompaction.jitter,hbase.hregion.majorcompaction+hbase.hregion.majorcompaction*hbase.hregion.majorcompaction.jitter】

分类

(1) MinorCompaction:耗时相对较短,小的相邻的StoreFile合并

(2) MajorCompaction:耗时长,合并成一个StoreFile,会删除三类数据:ttl过期数据、版本号超过设定的版本数的数据(设置了version数的前提下)、被删除的数据(自动触发的配置在生产环境经常被禁掉,改手动操作--触发的是MajorCompaction)

数据存储过程

数据查询过程

Hbase的具体操作

前置

namespace对应mysql的db

创建带namespace(ns1)的表(t1)

create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}

创建使用默认namespace的多个列族的表(f1、f2、f3)

create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}    等价于    create 't1', 'f1', 'f2', 'f3'

创建带配置的表

create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}

create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}

带拆分信息的表

hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']

hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']

hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'

hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mkey' => 'myvalue' }

hbase> # Optionally pre-split the table into NUMREGIONS, using

hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)

hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', REGION_REPLICATION => 2, CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}

hbase> create 't1', {NAME => 'f1', DFS_REPLICATION => 1}

Hbase的表结构

Table= RowKey + Family + Column + Timestamp + Value( RowKey + Family + Column + Timestamp) →  Value

Row Key

Row key行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。

列族 (column family)

hbase表中的每个列都归属某个列族列族是表的chema的一部分(列不是);

列族必须在使用表之前定义;

列名都以列族作为前缀(例如courses:history , courses:math 都属于 courses 这个列族)

时间戳

HBase中通过row和columns确定的cell为存储单元;

每个 cell都保存着同一份数据的多个版本,版本通过时间戳来索引

时间戳的类型是 64位整型:可以由hbase(在数据写入时自动 )赋值(精确到毫秒的当前系统时间);时间戳也可以由客户显式赋值

每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供两种数据版本回收方式:保存数据的最后n个版本;保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

对Hbase而言,表结构设计会对系统的性能以及开销上造成很大的区别;

Rowke排序+Column排序进行存储

hbase shell操作

数据存表中

put ‘t1’ ,‘col_f’, 'val-取值'

查看表中所有数据

scan ‘表名’

查询表中一行数据

get '表名', 'rowkey'

查询表中一行的指定列

get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}

删除一行中所有cell

deleteall ‘<table name>’, ‘<row>’

使用 delete 命令,可以在一个表中删除特定cell

delete ‘’, ‘’, ‘’, ‘’

手工合并hfile

compact 't1'

查看表结构

describe 't1' / desc  't1'

修改表结构(修改表结构必须先disable)

alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

disable 'test1'

alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}

enable 'test1'

分配权限

语法 grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔

权限用五个字母表示:"RWXCA".其中分别表示READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')例如,给用户‘test'分配对表t1有读写的权限,hbase(main)> grant 'test','RW','t1'

查看权限

语法:user_permission <table>

# 例如,查看表t1的权限列表hbase(main)> user_permission 't1'

收回权限

与分配权限类似,

语法:revoke <user> <table> <column family> <column qualifier>

# 例如,收回test用户在表t1上的权限revoke 'test','t1'

Region管理

1)移动region

语法:move 'encodeRegionName', 'ServerName'

encodeRegionName指的regioName后面的编码,ServerName指的是master-status的Region Servers列表

示例

hbase(main)>move'4343995a58be8e5bbc739af1e91cd72d','db-41.xxx.xxx.org,60020,1390274516739'

2)开启/关闭region

语法:balance_switch true|false

hbase(main)>balance_switch

3)手动split

 语法:split 'regionName', 'splitKey'

4)手动触发major compaction

Compact all regions in a table:

#hbase> major_compact't1'

Compact an entire region:

#hbase> major_compact'r1'

Compact a single column family within a region:

#hbase> major_compact'r1','c1'

Compact a single column family within a table:

#hbase> major_compact't1','c1'

配置管理及节点重启

1)修改hdfs配置

hdfs配置位置:/etc/hadoop/conf,同步hdfs配置

cat/home/hadoop/slaves|xargs -i -t scp /etc/hadoop/conf/hdfs-site.xml hadoop@{}:/etc/hadoop/conf/hdfs-site.xml

#关闭:

cat/home/hadoop/slaves|xargs -i -t ssh hadoop@{} "sudo /home/hadoop/cdh4/hadoop-2.0.0-cdh4.2.1/sbin/hadoop-daemon.sh --config /etc/hadoop/conf stop datanode"

#启动:

cat/home/hadoop/slaves|xargs -i -t ssh hadoop@{} "sudo /home/hadoop/cdh4/hadoop-2.0.0-cdh4.2.1/sbin/hadoop-daemon.sh --config /etc/hadoop/conf start datanode"

2)修改hbase配置

同步hbase配置

cat/home/hadoop/hbase/conf/regionservers|xargs -i -t scp /home/hadoop/hbase/conf/hbase-site.xml hadoop@{}:/home/hadoop/hbase/conf/hbase-site.xml

# graceful重启

cd~/hbase

bin/graceful_stop.sh--restart --reload --debug inspurXXX.xxx.xxx.org

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • 原文地址:http://www.cnblogs.com/nexiyi/p/hbase_shell.html 进入h...
    Albert陈凯阅读 3,015评论 0 2
  • 一、简介 Hbase:全名Hadoop DataBase,是一种开源的,可伸缩的,严格一致性(并非最终一致性)的分...
    菜鸟小玄阅读 2,392评论 0 12
  • 一、Region 概念 Region是表获取和分布的基本元素,由每个列族的一个Store组成。对象层级图如下: T...
    达微阅读 1,505评论 0 1
  • HBase工作原理学习 1 HBase简介 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用...
    miss幸运阅读 769评论 0 11
  • 新年的第一周已经过去,2018年还剩下358天,不是在散布什么时间过得快,增加各位的时间焦虑感。而是,在新年的第一...
    流动盛宴爱码士阅读 296评论 0 1