《OD学HBase》20160814
一、HBase引入
http://hbase.apache.org/
大数据的数据库
1. 概述
Hadoop生态系统中的一个分布式、可拓展、面向列、可伸缩,具有自动容错功能的数据库。
NoSQL数据库
BigTable:一种分布式海量结构化数据存储系统
HBase基于google论文实现的开源数据库框架
场景: 对海量数据进行随机读写、实时查询(对上亿条数据能够在秒级进行访问)
表:上亿行百万列 ———TB级别甚至PB级别
设备:廉价的商用服务器
HBase:真正存储数据还是在HDFS,数据分析处理还是依赖于MapReduce
2. 搭建HBase
1)hbase-env.sh
2)hbase-site.xml
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
3)regionservers
指定hbase数据存储节点regionserver的主机名
4)backup-masters:指定master节点的备份节点
5)启动
bin/start-hbase.sh
6)检测
bin/start-hbase.sh
HMaster进程
HRegionServer继承
webui 端口:60010
http://beifeng-hadoop-02:60010
8)hbase shell 交互式命令
bin/hbase shell
list:查看HBase中的所有表
create 'test', 'cf':创建一张hbase表,名称test,表的列簇为'cf'
put 'test', 'rowkey001', 'cf:name','zhangshan':往test表插入一条数据,行健rowkey为rowkey001,列簇(column family)、列标签(column qualifier),值为'zhanshan'
scan 'test' : 扫描表数据
回退使用ctrl + delete回退
rowkey:
column=列主键=列簇column family 列标签column qualifier timestarp value
exit退出
3. 整合Hue
通过HBase Thrift servers
问题:无法联系到 HBase Thrift 1 服务器:Could not connect to beifeng-hadoop-02:9090
解决方法:在HBASE上启动thrift服务
启动:bin/hbase-daemon.sh start thrift
二、HBase的表
Table 逻辑模型:
rowkey 行键 --> 类似于RDBMS的主键,唯一标识一行记录
根据rowkey进行排序
列簇column family: 创建HBASE表的时候要预先指定,类似于schema的概念
cf1、cf2、cf3、cf4
列标签: column qualifier
列标签可随意添加,真实使用的时候,根据具体业务来定义,由业务来进行约束。
列标签在不同行的同一个列簇下是可以不相同的。
timestamp:时间戳,单元格的版本号
单元格: {table、rowkey、column family、column qualifier、timestamp} --> value
hbase的Update:并不是真正意义上对原来的数据进行修改,仅仅只是做了新增操作,只是新增了一个单元格,与原来的单元格仅仅只是时间戳和value不同。
describe 'test' ---> 查看hbase表的详细信息
版本:
create 'test01', {NAME => 'cf1', VERSIONS => '3', MIN_VERSIONS => '2' }
scan 'test01', {VERSIONS => 2}
table
rowkey
column family
column qualifier
并发:假如数据都是不可变的
并发编程:将所有对象不可变
Table物理模型:
HBase组件:
1)HMaster:
(1)主节点
(2)为Region Server分配Region
(3)发现失效的Region Server并重新分配其上的region
(4)管理用户对HBASE表的增删改查操作
(5)数据不经过Master
2)Regionserver:
(1)HBase表的分区
(2)按照行 rowkey将表数据进行划分,每划分出来的部分称为region,HBASE负载均衡的最小单元。
默认情况下,表创建时只有一个Region,而且Region空间大小默认是256M。
随着数据的增加,Region会自动切分,均分成两个Region。
(3)负责region,处理对这些region的IO请求
3)Zookeeper
(1)通过选举,保证任何时候,急群众只有一个master,Master与Region Servers启动时会向Zookeeper注册
(2)存储Region的寻址入口:
Zookeeper上面存储hbase:meta这张表有哪些region,这些region在哪些RegionServer上面,Region包含哪些rowkey
zk上 /hbase/meta-region-server
(3)表由哪些Region,这些Region在哪些RegionServers上,Region包含哪些rowkey(起始rowkey,截止rowkey)
这些信息,HBASE有张默认的系统表
hbase:meta 元数据表,记录以上描述的信息。和普通表是一样的
(4)实时监控Region server的上线和下线信息,并实时通知给Master
client -> zookeeper
(1)从/hbase/meta-region-server节点获取关于hbase:meta表的信息,hbase:meta这张表有哪些region,这些region分布在哪些RegionServer上,每个Region包含哪些rowkey
(2)从获取到RegionServer信息,直接连接到该RegionServer上,hbase:meta表数据,获取到test表相关信息
(3)从test表获取真正数据
Zookeeper上面
ls /hbase/
meta-region-server:
backup-masters: 存储的是backup master信息
table:存储的是HBASE上表信息
draining:表示哪些RegionServer下线了
region-in-transition: 事务
table-lock:锁信息,只有行锁
running:
master:master节点的状态信息
namespace:表的命名空间
hbaseid:
online-snapshot:
replication:
splitWAL:
recovering-regions:
rs:RegionServers
hbase表都属于某个namespace,默认default
系统namespace:hbase
create 'test02', 'cf1', '', SPLITS => ['10', '20', '30' , '40' ]
表名,region起始rowkey,时间戳,md5编码
Region内部结构:
Region根据表的Column Family列簇划分Store,
Store: MemStore,StoreFile
put 'test02', '25', 'cf1:name', 'value222'
1)访问zookeeper获取hbase:meta表的位置信息
2)访问hbase:meta表的数据,获取到test02的位置信息
3)访问test02表
(1)根据rowkey找到对应的region
(2)根据cf1列簇名称找到Region中Store
(3)插入到Store李米娜MemStore
(4)MemStore达到最大空间值,刷写到磁盘生成一个StoreFile(本质就是HFile)。
滚动刷写:当MemStore空间满后,HBASE另外分配一块MemStore来接收数据,而原来的不再接收新数据,只是在进行持久化到磁盘的操作。
MemStore:一块内存空间,默认128M。
StoreFile:物理是上DataNode上的一个block
Region的容错:
Region的数据本质是HDFS上的文件,(备份),所有Region上的数据其实是由备份的。
只要Region的信息还在,Region就可以在其他RegionServer上重生。
当正在往memstore写数据时,RegionServer挂掉;数据丢失。
WAL机制: Write Ahead Log
HLog: 本质也是一个HDFS文件。当memstore将数据刷写到磁盘上生成storefile后,对应的数据也会从HLog上删掉。
hbase往memstore写数据,写到HLog(顺序写),再往memstore上写。
http://www.cnblogs.com/frydsh/archive/2013/04/13/3018666.html
HLog日志文件,HLog始终是与MemStore中的数据一致,
hdfs block是一个逻辑概念
LSM算法:http://www.cnblogs.com/yanghuahui/p/3483754.html
三、HDFS上的HBASE
/hbase
/WALS --->HLog文件存储路径
/data ---> HBASE表数据存储路径
/oldWALS ---> 当MemStore将数据刷写到磁盘生成StoreFile时,HLog会将对应的这部分数据移到oldWALs中,后面再进行删除。
HBase获取不到zookeeper上的master信息问题:
http://blog.csdn.net/zwx19921215/article/details/41824751
四、HBase表的特性
五、HBase shell
JRuby实现:
help
命令组:
COMMAND GROUPS:
Group name: general
Commands: status, table_help, version, whoami
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, show_filters
删除表:disable 'test02',drop 'test02'
Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
创建namespace:create_namespace 'ns1'
查看namespace:list_namespace
Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, incr, put, scan, truncate, truncate_preserve
scan 'test01'
get 'test01','rowkey001'
get 'test01','rowkey005', 'cf:name'
get 'test01','rowkey005', 'cf'
Group name: tools
Commands: assign, balance_switch, balancer, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, flush, hlog_roll, major_compact, merge_region, move, split, trace, unassign, zk_dump
create 'test03','cf1'
put 'test03','rowkey001','cf1:name','zhangsan'
put 'test03','rowkey001','cf1:sex,'M'
flush 'test03' 刷写memstore数据到storefile
Group name: replication
Commands: add_peer, disable_peer, enable_peer, list_peers, list_replicated_tables, remove_peer, set_peer_tableCFs, show_peer_tableCFs
Group name: snapshots
Commands: clone_snapshot, delete_snapshot, list_snapshots, rename_snapshot, restore_snapshot, snapshot
Group name: quotas
Commands: list_quotas, set_quota
Group name: security
Commands: grant, revoke, user_permission
Group name: visibility labels
Commands: add_labels, clear_auths, get_auths, set_auths, set_visibility
六、JavaAPI
http://mvnrepository.com/
HBase支持SNAPPY压缩:
1)需要将hadoop lib native里面的文件copy到hbase解压安装下lib目录
cp -r $HADOOP_HOME/lib/native $HBASE/lib/
2)在hbase-env.sh添加属性
LD_LIBRARY_PATH =
可以从hadoop-env.sh中拷贝过来
3)将native下的.so文件拷贝的jdk的jre目录中
cp native/*.so /jdk/jre/lib/
4)重启hbase
5)检验是否支持snappy
bin/hbase ...CompressionTest ~/mkdir SNAPPY
6)创建表的时候指定SNAPPY压缩
create 'test-snappy', {NAME=>'cf1', COMPRESSION => 'SNAPPY'}
shell命令要点
属性{'key' => 'value'},如果key为hbase的常量,则不用引号
使用脚本形式执行HBASE shell命令
echo 'list' | bin/hbase shell
《OD学HBase》20160814的更多相关文章
- 《OD学HBase》20160821
一.HBase性能调优 1. JVM内存调优 MemStore内存空间,设置合理大小 memstore.flush.size 刷写大小 134217728 = 128M memstore.mslab. ...
- 《OD学HBase》20160820
一.案例 微博: 微博内容: 关注用户和粉丝用户: 添加或移除关注用户 查看关注用户的微博内容 微博数据存储: 响应时间 秒级 无延迟 (1)mysql分布式 (2)hbase数据库 使用HBase数 ...
- 《OD学hive》第四周0717
一.Hive基本概念.安装部署与初步使用 1. 后续课程 Hive 项目:hadoop hive sqoop flume hbase 电商离线数据分析 CDH Storm:分布式实时计算框架 Spar ...
- 《OD学hadoop》20160903某旅游网项目实战
一.大数据的落地点 1.数据出售 数据商城:以卖数据为公司的核心业务 2. 数据分析 百度统计 友盟 GA IBM analysis 3.搜索引擎 4. 推荐系统 mahout 百分比 5.精准营销 ...
- 《OD学Sqoop》数据转换工具Sqoop
一. 第二阶段课程回顾 hadoop 2.x HDFS YARN MapReduce Zookeeper Hive 二.大数据协作框架 对日志类型的海量数据进行分析 hdfs mapreduce/hi ...
- 《OD学hadoop》第二周0702
大数据离线计算hadoop2.x 三周(6天) markdown文本剪辑器 罗振宇--跨年演讲,时间的朋友 http://tech.163.com/16/0101/11/BC87H8DF000915B ...
- 《OD学hadoop》第一周0625
一.实用网站 1. linux内核版本 www.kernel.org 2. 查看网站服务器使用的系统 www.netcraft.com 二.推荐书籍 1. <Hadoop权威指南> 1- ...
- 一起学HBase——总结HBase中的PUT、GET、DELETE操作
传统的关系型数据库有CRUD增删改查操作,同样对于NoSQL列式数据库也有CRUD操作.本文对HBase中常用的Scan.GET.PUT.DELETE操作的用法做个总结. Put操作 Put相当于传统 ...
- 一起学HBase——简单介绍HBase各种组件
HBase是谷歌BigTble的开源实现.谷歌的三篇论文拉开了大数据江湖的序幕,铸就了现在以Hadoop为主的大数据技术生态圈.而HBase是开源的大数据数据库,和传统的行式数据库不同的是,HBase ...
随机推荐
- .NET设计模式(18):迭代器模式(Iterator Pattern)(转)
概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据. ...
- 腾讯开源的轻量级CSS3动画库:JX.Animate
JX.Animate 是由腾讯前端团队 AlloyTeam 推出的一个 CSS3 动画库,通过 JX(腾讯的前端框架)插件的形式提供. Why CSS3 众所周知在支持HTML5的浏览器中 ...
- POJ 1006 Biorhythms (中国剩余定理)
在POJ上有译文(原文右上角),选择语言:简体中文 求解同余方程组:x=ai(mod mi) i=1~r, m1,m2,...,mr互质利用中国剩余定理令M=m1*m2*...*mr,Mi=M/mi因 ...
- POJ 1870 Bee Breeding(找规律)
题目链接 题意 : 给你一个蜂巢状图形,让你找出两个点之间的距离. 思路 : 在做这个题之前可以看一下2265,因为是一种题来着,规律就是我在2265里写的那样,然后就是求距离了,求距离的时候只需考虑 ...
- SOLID 原则
世纪的前几年里,“ Uncle Bob”Robert Martin 引入了用OOP 开发软件的五条原 则,其目的是设计出更易于维护的高质量系统.无论是设计新应用程序,还是重构现有基 本代码,这些 S ...
- JAVA容器
JAVA容器 一.容器体系结构 java.util 二.迭代器Iterator<E> 迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发人员并不需要了解该序列的底层结构.迭代器通常被 ...
- CoreData的简单使用(一)数据库的创建
iOS有多种数据持久化得方式 plist文件(属性列表) preference(偏好设置,NSUserDefaults) NSKeyedArchiver(归档,用的不多) SQLite 3 (需要导入 ...
- iOS App 唤醒另一个App
网上也有讲这块的,感觉讲得都不是很好.而且有一些细节根本没有讲清楚.这里重写整理一下相关知识点. 主要内容 URL Scheme 是什么? 项目中关键的配置 注意事项 URL Scheme 是什么? ...
- PHP使用CURL详解
CURL是一个非常强大的开源库,支持很多协议,包括HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS ...
- iOS8 Size Classes的理解与使用
在iOS8中,新增了Size Classes特性,它是对当前所有iOS设备尺寸的一个抽象,也是该抽象了,想想现在多少种iOS尺寸的设备吧:iPhone4-5-6-6plus.iPad.iPad min ...