HBase学习小节v1.2

1. HBase

一个构建在HDFS上的高可靠、高性能、面向列、可伸缩、分布式列存储开源数据库,主要用于存储海量数据,同时使用mapreduce处理HBase中的数据,利用zookeeper作为协同服务。读写相对简单,不支持条件查询

2. HBase与HDFS对比

都具有良好的容错性和扩展性

HDFS适合批处理场景,但是不支持数据随即查找,不适合增量数据处理,不支持数据更新

3. HBase的特点:

海量数据:可支持上百万列,分成多个region

无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列

面向列存储:面向列的存储和权限控制,列独立检索

记录稀疏:列为空(NULL),并不占用存储空间

数据多版本:每个单元的数据可以有多个版本,通过timestamp区分

数据类型单一:所有数据都是字符串

4. HBase结构组成

Row key:

Byte array

表中每条记录的“主键”

方便快速查找

Timestamp:

每次数据操作对应的时间戳,看作数据的version number

Column Family:

拥有一个名称(string)

包含一个或者多个相关列(Column)

Column:

value:

5. 支持的操作

所有操作基于rowkey的

支持CRUD(create、read、update、delete)以及put、get、multiput、scan

没有内置join操作,可使用MapReduce实现

6. HBase为每个值维护了多级索引,即<key,column family,column name,timestamp>

Table中的所有行都按照row key的字典序排列,在行的方向上分割为多个region,region是HBase中分布式存储与负载均衡的最小单元,不同的Region分布到不同RegionServer上;

region增大到一个阀值的时候,region就会分为两个新的region,之后会有越来越多的region

region由一个或多个store组成,每个store保存一个columns family

每个store又由一个memStore和0至多个StoreFile组成;

memStore存储在内存中,StoreFile存储在HDFS上

7. HBase的基本组件

Client:通过RPC与HMaster及HRegionServer进行通信,并维护cache加快对HBase的访问

Zookeeper:

保证集群中总是存在一个HMaster

存储所有Region的寻址入口

实时监控Region server的上线和下线信息,并实时通知给Master

存储HBase的schema和table元数据

HMaster:

为Region server分配region

复杂Region server的负载均衡

发现失效的Region server并重新分配其上的region

管理用户对table的增删改查操作

HRegionServer:

维护region,处理对region的I/O请求

负责切分在运行过程中变得过大的region

8.HBase容错机制

HMaster:zookeeper重新选择一个新的Master

无Master过程中,数据读取仍照常进行

无Master过程中,region切分、负载均衡等无法进行

HRegionServer容错:定时向Zookeeper汇报心跳,如果一定时间内未出现心跳

HMaster将该HRegionServer上的Region重新分配到其他RegionServer上

失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer上

9. HBase访问方式

Native Java API:常规高效

创建一个Configuration对象(包含各种配置信息hbase-default.xml,hbase-site.xml)

Configuration conf=HbaseConfiguration.create()

构建一个HTable句柄(提供Configuration对象,提供待访问Table的名称)

HTable table=new HTable(conf,tableName)

仅提供行级事务,严格的行一致性,并发读,顺序写

执行操作(支持put,get,delete,scan等的批处理)

table.getTableName();

关闭HTable句柄(内存数据刷新到磁盘上,释放资源)

table.close()

HBase Shell:用于管理

Thrift Gateway:序列化,支持C++,Python等语言

启动thrift server:hbase-daemon.sh start thtift

生成Hbase thrift client接口文件

thrift --gen xxx Hbase.thrift

编写客户端代码

eg:1. thrift --gen py hbase.thrift

2. ${HBASE_HOME}/src/examples/thrift/DemoClient.py

3. python DemoClient.py

Rest Gateway:Rest风格的Http API

Mapreduce:使用Mapreduce作业处理Hbase数据

提供TableMapper、TableReducer、TableInputFormat、TableOutputFormat等api

10.HBase Shell的主要用法

进入控制台:bin/hbase shell

创建表:create TABLE_NAME,COLUMN_Family1, COLUMN_Family2,...COLUMN_FamilyN

添加记录:put TABLE_NAME,ROW_NAME,COLUMN_Family:COLUMN_NAME,VALUE

查看记录:get  TABLE_NAME,ROW_NAME  #默认返回最近的值

统计记录数:count TABLE_NAME

删除表:

disable TABLE_NAME

drop TABLE_NAME

删除记录:

delete  TABLE_NAME,ROW_NAME,COLUMN_Family:COLUMN_NAME  #删除一条

delete  TABLE_NAME,ROW_NAME  #删除所有

删除一个列簇

disable TABLE_NAME

alter TABLE_NAME, {NAME=>‘tab1_add‘, METHOD=>‘delete‘}

enable TABLE_NAME

全表扫描:

scan TABLE_NAME

指定列中的所有数据:scan TABLE_NAME,COLUMN_Family

查看所有表:list

查看服务器状态:status

查看hbase版本:version

查看表结构:descirbe TABLE_NAME

判断表是否存在:exists TABLE_NAME

判断表是否为enable is_enabled TABLE_NAME

清空表:truncate TABLE_NAME

时间: 2024-10-22 02:40:15

HBase学习小节v1.2的相关文章

MapReduce学习小节v1.1

1.  MapReduce的几个特点: 易编程,良好的扩展性,高容错性 适合海量数据的离线处理 2.  应用场景: 简单的数据统计.搜索引擎建索引.海量数据查找.复杂数据分析算法实现 3. MapReduce的主要几个过程 Input->splitting->mapping->shuffling->reducing->output 4.  map阶段:由一定数量的Map Task组成,而 Map Task通常包括input,splitting,mapping及shufflin

hbase 学习(十五)缓存机制以及可以利用SSD作为存储的BucketCache

下面介绍Hbase的缓存机制: a.HBase在读取时,会以Block为单位进行cache,用来提升读的性能 b.Block可以分类为DataBlock(默认大小64K,存储KV).BloomBlock(默认大小128K,存储BloomFilter数据).IndexBlock(默认大小128K,索引数据,用来加快Rowkey所在DataBlock的定位) c.对于一次随机读,Block的访问顺序为BloomBlock.IndexBlock.DataBlock,如果Region下面的StoreFi

hbase 学习(十二)集群间备份原理

集群建备份,它是master/slaves结构式的备份,由master推送,这样更容易跟踪现在备份到哪里了,况且region server是都有自己的WAL 和HLog日志,它就像mysql的主从备份结构一样,只有一个日志来跟踪.一个master集群可以向多个slave集群推送,收到推送的集群会覆盖它本地的edits日志. 这个备份操作是异步的,这意味着,有时候他们的连接可能是断开的,master的变化不会马上反应到slave当中.备份个格式在设计上是和mysql的statement-based

HBase学习笔记之HFile格式

主要看Roger的文档,这里作为文档的补充 HFile的格式-HFile的基本结构 Trailer通过指针找到Meta index.Data index.File info. Meta index保存每一个元数据在HFile中的位置.大小.元数据的key值. Data index保存每一个数据块在HFile中的位置.大小.块第一个cell的key值. File Info保存HFile相关信息. Meta块保存的是HFile的元数据,比如布隆过滤器. Data块保存的为具体的数据,每个数据块有个M

Hbase学习笔记之一 | Hbase Shell命令篇

最近在XX项目的测试过程中,接触到一些HBase的东西,希望能站在测试的角度,把过程记录下来,期望对快速了解它有点帮助.作为一个初次接触它的人来说,需要迫切掌握其中基本的概念,这里就不赘述了. HBase Shell是HBase提供的便捷的访问方式,首先你需要搭建HBase的环境,可以参考 http://hbase.apache.org/book/quickstart.html 和http://hbase.apache.org/book/notsoquick.html. 1.进入Hbase Sh

HBase学习总结(3):HBase的数据模型及工作机制

一.HBase数据模型 HBase模式里的逻辑实体包括: (1)表(table):HBase用表来组织数据.表名是字符串(String),由可以在文件系统路径里使用的字符组成. (2)行(row):在表里,数据按行存储.行由行键(rowkey)唯一标识.行键没有数据类型,总是视为字节数组byte []. (3)列族(column family):行里的数据按照列族分组,列族也影响到HBase数据的物理存放,因此,它们必须事前定义并且不轻易修改.表中每行拥有相同列族,尽管行不需要在每个列族里存储数

hbase学习系列1——伪分布模式安装

1 在hadoop上解压缩.重命名.设置环境变量HBASE_HOME,参考hadoop学习系列2 2 修改文件$HBASE_HOME/conf/hbase-env.sh,修改内容如下 export JAVA_HOME=/usr/local/jdk export HBASE_MANAGES_ZK=true #export HBASE_CLASSPATH=/usr/local/hadoop/conf(不知是否有效,HadoopInAction中看到的) 3 修改文件hbase-site.xml,修改

Hbase学习笔记01

最近做项目接触到了HDFS.mapreduce以及Hbase,有了实战机会,今天打算将这些知识好好总结下,以备不时之需.首先从Hbase开始吧. Hbase是建立在HDFS上的分布式数据库,下图是Hbase表的模型: Hbase这个数据库其实和传统关系数据库还是有很多类似之处,而不是像mongodb,memcached以及redis完全脱离了表的概念,只不过hbase是以列为中心的数据库,而传统关系数据库则是以行为中心的数据库.不过hbase这个列并非我们传统意义的列,而是列族.列族是hbase

HBase学习总结(1):HBase的下载与安装

(HBase是一种数据库:Hadoop数据库,它是一种NoSQL存储系统,专门设计用来高速随机读写大规模数据.本文介绍HBase的下载与安装的整个过程. ) 一.HBase的下载 1.登录HBase官网http://hbase.apache.org/,可看到如图1所看到的的页面: 图1 登录HBase官网的页面 2.点击图1中的红色小框中的"here".进入如图2所看到的的页面. 图2 下载链接 3.点击图2中的红色小框中的链接,进入如图3所看到的的下载页面. 图3 下载页面 点击文件