Hbase学习笔记复习过程

合集下载

HBASE学习笔记(一)

HBASE学习笔记(一)

HBASE学习笔记(⼀)⼀、数据库OLAP和OLTP简单的介绍⽐较 1.OLTP:on-line transaction processing在线事务处理,应⽤在传统关系型数据库⽐较多,执⾏⽇常基本的事务处理,⽐如数据库记录的增删改查,如银⾏的⼀笔交易记录,就是⼀个典型的事务处理,强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;OLTP 有以这⼏个特点:实时性要求⾼;数据量不是很⼤;交易⼀般是确定的;⾼并发;满⾜ACID 对于OLTP来说⼀般都是⾼可⽤的在线系统,以⼩的事务以及⼩的查询为主,评估其系统的时候,⼀般看其每秒执⾏的 Transaction 以及Execute SQL 的数量。

在这样的系统中,单个数据库每秒处理的 Transaction 往往超过⼏百个,或者是⼏千个, Select 语句的执⾏量每秒⼏千甚⾄⼏万个。

典型的 OLTP 系统有电⼦商务系统、银⾏、证券等,如美国 eBay 的业务数据库,就是很典型的 OLTP 数据库。

OLTP 系统最容易出现瓶颈的地⽅就是 CPU 与磁盘⼦系统。

(1) CPU 出现瓶颈常表现在逻辑读总量与计算性函数或者是过程上,逻辑读总量等于单个语句的逻辑读乘以执⾏次数,如果单个语句执⾏速度虽然很快,但是执⾏次数⾮常多,那么,也可能会导致很⼤的逻辑读总量。

设计的⽅法与优化的⽅法就是减少单个语句的逻辑读,或者是减少它们的执⾏次数。

另外,⼀些计算型的函数,如⾃定义函数、 decode 等的频繁使⽤,也会消耗⼤量的 CPU 时间,造成系统的负载升⾼,正确的设计⽅法或者是优化⽅法,需要尽量避免计算过程,如保存计算结果到统计表就是⼀个好的⽅法。

(2)磁盘⼦系统在 OLTP 环境中,它的承载能⼒⼀般取决于它的 IOPS 处理能⼒. 因为在 OLTP 环境中,磁盘物理读⼀般都是 db file sequential read,也就是单块读,但是这个读的次数⾮常频繁。

hbase基础知识培训

hbase基础知识培训

HBase常见故障处理方法
数据损坏
当HBase表数据损坏时,可以尝试使用HBase的恢复工具 进行修复。如果无法修复,则需要从备份中恢复数据。
集群性能问题
如果集群性能出现下降,可以检查集群资源使用情况,如 CPU、内存和磁盘I/O等,并根据实际情况进行调整。
节点故障
当某个HBase节点出现故障时,集群会自动进行切换,并 将故障节点上的数据重新分发到其他可用节点上。如果故 障节点无法恢复,则需要手动替换该节点。
HMaster主要负责管理 HRegionServer,包括分配和 迁移HRegion等。
HRegionServer负责存储和管 理数据,包括数据的读写、压 缩、存储等。
HRegionServer通过 ZooKeeper集群与HMaster进 行通信,实时汇报自己的状态。
HBase的客户端和服务端通信
常见过滤器
HBase提供了多种内置的过滤器,如比较过滤器 (CompareFilter)、限制行数过滤器(LimitFilter)等。用户 还可以自定义过滤器以满足特定的需求。
06
HBase性能优化
调整HBase参数优化性能
调整HBase参数
根据实际应用场景和数据量,合理配 置HBase参数,如表数量、Region 服务器数量、存储容量等,以提高 HBase性能。
02
HBase基本概念
HBase的数据模型
HBase的数据模型是基于列的,而不 是基于行的。这意味着数据在HBase 中是按照列族进行组织的,而不是按 照行进行组织。
HBase中的数据是按照键值对的形式 存储的。每个键值对都包含一个行键、 一个列族、一个列限定符和一个值。
HBase中的每个表都有多个列族,每 个列族可以有多个列。列族在创建表 时定义,而列可以在任何时候添加。

Hbase记录-HBase基本操作(一)

Hbase记录-HBase基本操作(一)

Hbase记录-HBase基本操作(⼀)HBase创建表可以使⽤命令创建⼀个表,在这⾥必须指定表名和列族名。

在HBase shell中创建表的语法如下所⽰。

create ‘<table name>’,’<column family>’⽰例下⾯给出的是⼀个表名为emp的样本模式。

它有两个列族:“personal data”和“professional data”。

Row key personal data professional data在HBase shell创建该表如下所⽰。

hbase(main):002:0> create 'emp', 'personal data', ’professional data’它会给下⾯的输出。

0 row(s) in 1.1300 seconds=> Hbase::Table - emp验证创建可以验证是否已经创建,使⽤ list 命令如下所⽰。

在这⾥,可以看到创建的emp表。

hbase(main):002:0> listTABLEemp2 row(s) in 0.0340 seconds使⽤Java API创建⼀个表可以使⽤HBaseAdmin类的createTable()⽅法创建表在HBase中。

这个类属于org.apache.hadoop.hbase.client 包。

下⾯给出的步骤是来使⽤Java API创建表在HBase中。

第1步:实例化HBaseAdmin这个类需要配置对象作为参数,因此初始实例配置类传递此实例给HBaseAdmin。

Configuration conf = HBaseConfiguration.create();HBaseAdmin admin = new HBaseAdmin(conf);第2步:创建TableDescriptorHTableDescriptor类是属于org.apache.hadoop.hbase。

Hadoop之Hbase从入门到精通2

Hadoop之Hbase从入门到精通2

一、HBase性能调优我们经常看到一些文章吹嘘某产品如何如何快,如何如何强,而自己测试时却不如描述的一些数据。

其实原因可能在于你还不是真正理解其内部结构,对于其性能调优方法不够了解。

本文转自TaoBao的Ken Wu同学的博客,是目前看到比较完整的HBase调优文章。

原文链接:HBase性能调优因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果。

所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正。

配置优化zookeeper.session.timeout默认值:3分钟(180000ms)说明:RegionServer与Zookeeper间的连接超时时间。

当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管.调优:这个timeout决定了RegionServer是否能够及时的failover。

设置成1分钟或更低,可以减少因等待超时而被延长的failover时间。

不过需要注意的是,对于一些Online应用,RegionServer从宕机到恢复时间本身就很短的(网络闪断,crash等故障,运维可快速介入),如果调低timeout 时间,反而会得不偿失。

因为当ReigonServer被正式从RS集群中移除时,HMaster 就开始做balance了(让其他RS根据故障机器记录的WAL日志进行恢复)。

当故障的RS在人工介入恢复后,这个balance动作是毫无意义的,反而会使负载不均匀,给RS带来更多负担。

特别是那些固定分配regions的场景。

hbase.regionserver.handler.count默认值:10说明:RegionServer的请求处理IO线程数。

Hbase学习笔记

Hbase学习笔记

Hbase存储模式行式存储维护索引随机读存储成本高使用环境:表关联特性强,数据量不大,千万量级,OLTP列式存储压缩效率高并行查询使用环境:获取单列,多列大数据环境,读取场景不高,事务性不高OLAPHbase列族式存储列族概念多列数据组合,列名以列族作为前缀,hbase是列族数据库hbase表数据结构是key-value模式:列数据版本一列数据可保存三个版本:时间版本Hbase数据存储原型例子HBase数据表解析语句解析name列族version 时间版本默认是3reolication_scope: 复制机制为了远程复制compression: 压缩类型snappy:压缩率数据存储目录解析hbase-site.xml 保存Hbase的各种设置系统目录:.tmp 临时交换表临时存储数据结果WALs 存储操作日志archive 存储归档和快照分割和合并操作维护管理数据corrupt 存储损坏的日志文件一般是空data 核心目录hbase.id 标识hbase进程hbase.version: 集群文件格式的版本信息oldWALs : 持久化日志用户目录:dataHbase元信息表其属于Hbase的系统表Row key:包含table key timevalue:对应region 指向region server的地址value中最主要的列族是infoinfo包括三个属性列:region_info :region基本信息的存储server:存储region_server的服务器地址和端口server_start_code:存储region_server的shtart_timemeta table是hbase的第一级索引,Hbase的存储设计Hbase中的LSM存储思想什么是LSMLSM树:有C0和C1两个树状结构C0数据存储在内存中C1数据存储在磁盘上存储数据先插入到内存,内存满了后会插入到C1第一级数据插入C0,即内存中第二层数据刷写到硬盘第三层对第二层数据进行聚合合并LSM如何应用到Hbase中Hbase数据存储模块简介分层次设计思想regionserverregion:存储数据的最小单元,一个regionserver包含多个region,每个region中包含的数据都是互斥的store:region中包含了多个store,一个store对应Hbase中的列族,一个Hbase有多少列族则每个region里就有多少个storememStore:每个store都包含一个memStore,内存式数据结构,数据会先刷写到memstore 里,store的内存缓冲storeFile:memStore里的数据满了后,数据会刷写到storeFile中,Hfile的简单封装Hfile:将storeFile中的数据封装成Hfile,一种存储格式,所有数据最终都存储到Hfile中HDFS:将Hfile中的数据刷写成正真的Hfile文件HLog WAL:一个regionserver只有一个HLog实例Hlog:预写日志,用户存储的数据会最先保存在这里,目的高可用,宕机时可以回放回复Level0:快速写入,降低延迟,实时交互level1:实现不可靠数据的持久化,(不可靠数据:存储在level0中的数据)Hbase region解析数据——》region server——》region什么是region?一个region对应一个regionserver 一个regionserver有多个region每个表的一行对应一个region,所以region是Hbase中分布式存储的最小单元当数据行不断插入,到达列族的阈值,region会被水平拆分成两个regionregion在regionserver中可能会出现移动——》master的附带均衡策略当宕机或者挂掉时,regionserver上的region会被master转移到其他regionserver上每个region会有3个信息标识自己身份:table_name start_row_key create_time region的特点是负载单元和分布式存储的最小单元,但不是存储的最小单元(存储的最小单元是Hfile)region数量太多会造成数量下降region数目太少会妨碍可扩展性降低并行能力不能做到覆盖均衡region的数量不能低于集群中节点的数量region的拆分策略不可见master不参与分割操作Hbase Hfile解析store:和列族一对一store也就代表列族有region对其进行管理memstore:和store一对一其是内存处理结构storefile:一个store包含0个或者多个storefile 是文件系统级别的处理结构是memstore中的内存数据刷写到内存中Hbase被称为列族式数据库的原因:因为在region中有几个列族就有几个store,会将要访问的数据放在一个store里,而且Hbase会根据store的大小来判断是否要去切分regionHfile是hadoop的二进制文件key-value类型用户数据存储在scanned block section 更具体一点是 data block 中Hfile 是数据存储的最小单元,更具体一点,Hfile 内的data block 是存储的最基本单元 是实际存储用户的结构 存储的key-value 数据 hbase 中每个数据都是以key-value 形式进行存储 data block 结构keytype的作用:hbase主要是插入性能高,但是hbase在删除时,并没有真正删除数据,hfile一旦刷写数据成功,将不可做修改,但如果真的需要删除数据怎么办呢?靠keytype,实际上打上删除标志Hbase WAL解析什么时WAL?日志机制---灾难恢复服务器崩溃—重放log---恢复远程备份如何实现:修改操作封装在key-value实例中---rpc调用发送给regionserver---写log---写region写入regionserver时也必须写入Wal 否则被认为写入失败什么是Hlog一个regionserver对应一个Hlog实例一台服务器只有一个hlog什么是Hlogkey:WAL:序列号文件记录是key-value 形式value:put delete等操作记录key:就是Hlog 的keyHlogkey包含的内容什么是HlogSyncer:日志同步刷写类写入WAL是默认直接写入到文件系统,有时候为了性能也会暂时保存在内存中此时需要hlogsyncer,这个异步线程实现数据刷写到文件系统中什么是Hlogroller?每经过60分钟会打开一个新的日志文件一段时间后会有很多文件需要维护Hlogroller则是负责这个在特定时间滚动日志,避免单个文件过大同时删除旧的不需要的日志Hbase Compaction解析与LSM的第三层有关合并Hfile文件:读key-value---由大到小写入新文件---新文件取代旧文件对外提供服务数据刷写导致存储目录保存了过多文件导致维护困难查找困难需要compaction将文件由多变少打开关闭文件十分消耗资源小合并:minorCompaction 合并成多个storefile大合并:majorCompaction 合并成一个storefile 同时删除三类无意义数据:delete数据过期数据版本号超过列族设定的数据时间持续长,消耗时间长三种触发因素:1.memstore flash出发就是内存中的数据往硬盘中刷写时触发 2. 后台线程周期性检查后台定期检查是否需要执行compaction3. 手动触发为了执行minorCompaction 因为majorCompaction 会影响性能Hbase 数据存储解析Hbase 数据存取的流程1. 数据存储2.数据获取客户端的流程和存入的流程一致不同点再服务器端的操作Hbase数据存取优化1.存储优化使用memstore和WAL机制进行存储优化实现了数据顺序快速的插入,极大降低了数据存取的延迟这实际上是利用的LSM的多级存储原理2.检索(获取)优化主要用BloomFilter优化什么是BloomFilter?BloomFilter实际上是一个很长的二进制矢量和一系列随机的映射函数其作用是检索一个元素是否在一个集合中其优点在于空间效率和查询时间都远远高于其他算法,缺点是有一定的误识别率和删除困难是一种多哈希函数快速查找算法,通常用于快速判断某个元素是否属于某个集合,但是并不要求100%确定Hbase通过bloomfilter实现随机读的优化Bloomfilter是一个列族级别的属性:如果在表中涉及了bloomfilter,那么Hbase会在生成storefile的过程中,包含一份bloomfilter的数据来作为数据的索引,所以当开启bloomfilter属性时,会有一定的内存开销在bloomfilter中有两种类型Hbase数据存取api介绍总结。

Hbase学习笔记

Hbase学习笔记

参考书籍:Hadoop in action, 吴超沉思录1.Hbase简介1.面向列的分布式数据库2. 以HDFS作为文件系统3. 利用MapReduce处理Hbase中海量数据4. ZookKeeper作为协调工具5. sqoop提供Hbase到关系型数据库中数据导入功能6. Hive和pig提供高层语言支持如HSQL2. 伪分布式安装准备:安装Hadoop 详细见上一篇日志:hadoop分布式安装hbase版本: hbase-0.94.7-security.tar.gz安装目录/usr/local步骤:1. 安装tar -zxvf hbase-0.94.7-security.tar.gz2. 重命名:mv hbase-0.94.7-security hbase3. 配置环境变量hbase_home (vi /etc/profile)4. 修改配置文件1.hbase_home/conf/hbase_env.sh修改java_home exportJAVA_HOME=/usr/local/jdk/修改zookeeper(最后一行)export HBASE_MANAGES_ZK=true(使用Hbase托管的ZooKeeper)2.hbase_home/conf/hbase-site.xml文件configuration 中加入:<property><name>hbase.rootdir</name><value>hdfs://hadoop0:9000/hbase</value></property><property> <name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop0</value></property><property><name>dfs.replication</name><value>1</value></property>5. 启动hbase先启动hadoop(start-all.sh)启用hbase (start-hbase.sh)jps查看进程(HMaster,HRegionServer, HQuorumPeer)http://hadoop0:60010可以查看管理界面,如下:6. 进程说明:HMaster: 管理Hbase table的DDL操作给region分配工作HResionServer:原则上每个slave对应一个HRegionServer HQuorumPeer:ZooKeeper的守护进程,此处我们使用的是Hbase内置的ZooKeeper(在hbase-env.sh中有配置)3. 分布式安装准备条件:hadoop分布式环境已安装,查看hadoop分布式安装hadoop0主机上hbase伪分布已安装完成安装:1. scp -rp /usr/local/hbase hadoop1:/usr/local2. 在hadoop0上更改hbase_home/conf/regionservers 将localhost更改为hadoop13. 在hadoop0上启动hbase4. jps查看,如下:hadoop0上进程:hadoop1上进程:同理可通过hostname:60010访问hbase管理界面,同分布式安装部分4. 数据模型1. Hbase数据库采用了和Bigtable非常类似的数据类型,表格是稀疏的;1. row key 行键,table的主键2. timestamp 时间戳,数据操作时对应的时间戳,可以看成数据的version number3. Column Family 列簇,每个family可以由任意多个column组成,列名是<族名>:<标签>形式;一个表格的族名时固定的,除非使用管理员权限来改变表格的族名;不过可以在任何时候添加新的标签;eg:course对于表来说是一个有两个列的列族(该列族由两个列组成math 和art);4.两张特殊的表 -ROOT- 和 .META.作用如下:(即-ROOT-记录.META.的region信息,.META.记录用户表的region信息)关系如下:基本操作(注意操作后不要加分号,习惯了sql,总是在后面加分号,然后发现执行语句后都一直没有反应,去掉分号后成功)(表名和列名都需要加引号,不区分单双引号)Hbase shell,是Hbase的命令行工具,命令行中执行hbase shell即可进入hbase shell命令行1)list 查看hbase中所有表2)创建表:create '表名','列簇1','列簇2'....create'student', 'name','grade','course'在管理界面中查看student3)describe 查看表结构describe '表名'eg: describe 'student'hbase(main):003:0>describe "student"DESCRIPTION ENABLED 'student', {NAME =>'course', DATA_BLOCK_ENCODING =true >'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY=>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'grade', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'name', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}4)插入数据和查看数据put '表名','行键名','列名','value','列名2','value2','family:列名1','value3'....... put 'student','wish','name:','wish'查询数据:get '表名','行名'get'student','wish'插入更多数据hbase(main):004:0>put 'student','wish','course:English','100'hbase(main):005:0>put 'student','wish','course:Chinese','60'hbase(main):006:0>put 'student','rain','course:Chinese','100'hbase(main):007:0>put 'student','rain','course:English','200'查看表中数据:scan 'student'其他get例子:get'student','wish','course'get'student','wish',['course']get'student','wish',['course','name']5)删除数据delete'student','wish','course:Math'6)删除表需停止表的可用性,再删除表disable 'student'drop'student' 7) 统计行数count'student'。

Hbase学习总结

Hbase学习总结

HBase学习报告0 引言随着互联网的发展,用户的使用量和使用范围变得越来越广,因此会产生大量的数据,对于这些数据的储存、处理,传统的数据库表现出越来越多的问题,从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,查询效率随着数据量的增长变得越来越低。

面对这些问题,一些新型的数据库应运而生,对海量数据的存储和处理提出了解决方案,HBase就是其中之一。

1 HBase简介Hbase是Apache Hadoop的数据库,能够对大数据提供随机、实时的读写访问,具有开源、分布式、可扩展及面向列存储的特点。

HBase的目标是处理大型的数据,具体来说就是使用普通的硬件配置即可处理成千上万行的列和行组成的大数据。

HBase是一个分布式的,多版本的,面向列的存储模型。

它可以使用本地文件系统。

也可以使用HDFS文件存储系统,但是,为了提高系统的健壮性和可靠性,并充分发挥HBase的大数据处理能力,使用HDFS作为文件存储系统更合适,使用MapReduce来处理海量数据,利用Zookeeper作为协同服务。

另外,HBase的存储结构是松散性数据,它使用简单的key和value的映射关系,但又不是简单的映射关系,这种关系为超大规模的高并发的海量数据实时响应系统提供了一个很好的解决方案。

HBase的存储的数据从逻辑上来看就像是一张很大的表,并且,它的数据可以根据需求动态地增加。

HBase还具有这样的特点:它向下提供了存储,向上提供了运算。

这样的特点使它将数据存储和并行计算完美地结合在了一起。

2 HBase体系结构HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器群和HBase Master服务器构成。

HBase Master服务器负责管理所有的HRegion服务器,而HBase中的所有服务器都是通过ZooKeeper来进行协调并处理HBase服务器运行期间可能遇到的错误。

HBase Master本身并不储存HBase中的任何数据。

HBase核心知识点总结

HBase核心知识点总结

HBase核⼼知识点总结⼀、HBase介绍1、基本概念HBase是⼀种Hadoop数据库,经常被描述为⼀种稀疏的,分布式的,持久化的,多维有序映射,它基于⾏键、列键和时间戳建⽴索引,是⼀个可以随机访问的存储和检索数据的平台。

HBase不限制存储的数据的种类,允许动态的、灵活的数据模型,不⽤SQL语⾔,也不强调数据之间的关系。

HBase被设计成在⼀个服务器集群上运⾏,可以相应地横向扩展。

2、HBase使⽤场景和成功案例互联⽹搜索问题:爬⾍收集⽹页,存储到BigTable⾥,MapReduce计算作业扫描全表⽣成搜索索引,从BigTable中查询搜索结果,展⽰给⽤户。

抓取增量数据:例如,抓取监控指标,抓取⽤户交互数据,遥测技术,定向投放⼴告等内容服务信息交互3、HBase Shell命令⾏交互:启动Shell $ hbase shell列出所有的表 hbase > list创建名为mytable的表,含有⼀个列族hb hbase > create ' mytable' , 'hb'在‘mytable’表的'first'⾏中的‘hb:data’列对应的数据单元中插⼊字节数组‘hello HBase’hbase > put 'mytable' , 'first' , 'hb:data' , 'hello HBase'读取mytable表 ‘first’⾏的内容 hbase > get 'mytable' , 'first'读取mytable表所有的内容 hbase > scan ‘mytable'⼆、⼊门1、API和数据操作有关的HBase API有5个,分别是 Get(读),Put(写),Delete(删),Scan(扫描)和Increment(列值递增)2、操作表⾸先要创建⼀个configuration对象 Configuration conf = HBaseConfiguration.create();使⽤eclipse时的话还必须将配置⽂件添加进来。

Hadoop学习文档

Hadoop学习文档

Had oop学习文档Hbase学习总结(一)Hbase的安装与运行1.下载并解压hbase-0.94.6.1.tar.gztar xfz hbase-0.94.6.1.tar.gz2.编辑conf/hbase-site.xml在configuration标签中添加:<property><name>hbase.rootdir</name><value>file:///var/lib/tcommsvr/Hbase_lin/hbase</value></property>说明:该项配置了数据写入的目录,默认 hbase.rootdir 是指向 /tmp/hbase-${} ,也就说你会在重启后丢失数据(重启的时候操作系统会清理/tmp目录)。

3.编辑conf/hbase-env.sh修改JAVA_HOME路径export JAVA_HOME=/usr/java/jdk1.6.0_29说明:该项默认是注释掉的,需要放开并修改4.进入bin目录,运行start-hbase.sh进入logs目录下查看hbase-root-master-slave2.log日志,查看运行情况5.查看hbase文件夹,可以看到如上图所示的内容生成。

Hbase的shell操作1.进入bin目录,运行sh hbase shell进入shell命令输入help可查看常用命令下面测试建立一个表并添加几条数据,并查询,然后删除该表create 'test_lin' ,'cf'然后执行list,可以看到该表已创建,该表名称为test_lin , 这个表只有一个column family 为 cf,注意:表名称和column family 都必须加上单引号下面插入一些记录:put 'test_lin','lucy','cf:name_lucy','New York_lucy'put 'test_lin','lily','cf:name_lily','London_Lily'put 'test_lin','Jack','cf:name_Jack','Beijing_Jack'查看该表:scan 'test_lin'获取一行(行为Jack的)数据get 'test_lin', 'Jack'清除该表(删掉)disable 'test_lin'然后drop 'test_lin'关闭shell:exit停止HbaseBin目录中有相应的脚本:stop-hbase.sh(二)Hbase的存储结构数据在Hbase中是以表的方式存储的,所有的表(由行和列构成)从属于某一个column family。

hbase~基础知识梳理

hbase~基础知识梳理

hbase~基础知识梳理HBase的组成在这⾥,让我们了解下 HBase 都有哪些模块,以及⼤致的⼯作流程。

前⾯我们提到过 HBase 也是构建于 HDFS 之上,这是正确的,但也不是完全正确。

HBase 其实也⽀持直接在本地⽂件系统之上运⾏,不过这样的 HBase 只能运⾏在⼀台机器上,那么对于分布式⼤数据的环境是没有意义的(这也是所谓的HBase 的单机模式)。

⼀般只⽤于测试或者验证某⼀个 HBase 的功能,后⾯我们在详细的介绍 HBase 的⼏种运⾏模式。

这⾥我们只要记得在分布式的⽣产环境中,HBase 需要运⾏在 HDFS 之上,以 HDFS 作为其基础的存储设施。

HBase 上层提供了访问的数据的 Java API 层,供应⽤访问存储在 HBase 的数据。

在 HBase 的集群中主要由 Master 和 Region Server 组成,以及 Zookeeper,具体模块如下图所⽰。

MasterHBase Master ⽤于协调多个 Region Server,侦测各个 Region Server 之间的状态,并平衡 Region Server 之间的负载。

HBase Master 还有⼀个职责就是负责分配 Region 给 Region Server。

HBase 允许多个 Master 节点共存,但是这需要 Zookeeper 的帮助。

不过当多个 Master 节点共存时,只有⼀个 Master 是提供服务的,其他的 Master 节点处于待命的状态。

当正在⼯作的 Master 节点宕机时,其他的 Master 则会接管 HBase 的集群。

Region Server对于⼀个 Region Server ⽽⾔,其包括了多个 Region。

Region Server 的作⽤只是管理表格,以及实现读写操作。

Client 直接连接 Region Server,并通信获取HBase 中的数据。

HBase基础知识培训

HBase基础知识培训
1、 维护master分配给他的region,处理对这些region的io请求。 2、 负责切分正在运行过程中变的过大的region。可以看到,client访问hbase上的数据并不需要 master参与(寻址访问zookeeper和region server,数据读写访问region server),master仅仅维 护table和region的元数据信息(table的元数据信息保存在zookeeper上),负载很低。 HRegionServer存取一个子表时,会创建一个HRegion对象,然后对表的每个列族创建一个 Store实例,每个Store都会有一个MemStore和0个或多个StoreFile与之对应,每个StoreFile都会 对应一个HFile, HFile就是实际的存储文件。因此,一个HRegion有多少个列族就有多少个Store。 一 个HRegionServer会有多个HRegion和一个HLog。。
每个region由以下信息标识:
1、< 表名,startRowkey,创建时间> 2、由目录表(-ROOT-和.META.)记录该region的endRowkey
HRegion定位:Region被分配给哪个Region Server是完全动态的,所以 需要机制来定位Region具体在哪个region server。
第20页,共21页。
9、全表扫描 scan
scan 'member'
10、获得一行的所有数据 get 'member', 'scutshuxue' 11、 获得某行,某列族的所有数据 get 'member', 'scutshuxue', 'info 12、 更新一条记录 put(把scutshuxue年龄改为99) put 'member', 'scutshuxue', 'info:age', 99

HBaseHadoop学习笔记

HBaseHadoop学习笔记

HBaseHadoop学习笔记HBase/Hadoop学习笔记学习⽬标:⾄少掌握五点:1. 深⼊理解HTable,掌握如何结合业务涉及⾼性能的HTable。

2. 掌握与HBase的交互,通过HBase Shell命令及Java API进⾏数据的增删改查。

3. 掌握如何⽤MapReduce分析HBase⾥的数据4. 掌握如何测试HBase MapReduce。

HBase简介:HBase在产品中还包含了Jetty,在HBase启动时采⽤嵌⼊式的⽅式来启动Jetty,因此可以通过web界⾯对HBase进⾏管理和查看当前运⾏的⼀些状态,⾮常轻巧。

简单来说,你在HBase中的表创建的可以看做是⼀张很⼤的表,⽽这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。

列存储HStore存储是HBase存储的核⼼了,其中由两部分组成,⼀部分是MemStore,⼀部分是StoreFiles。

MemStore是Sorted Memory Buffer,⽤户写⼊的数据⾸先会放⼊MemStore,当MemStore满了以后会Flush成⼀个StoreFile(底层实现是HFile),当StoreFile⽂件数量增长到⼀定阈值,会触发Compact合并操作,将多个StoreFiles合并成⼀个StoreFile,合并过程中会进⾏版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进⾏的,这使得⽤户的写操作只要进⼊内存中就可以⽴即返回,保证了HBase I/O的⾼性能。

当StoreFilesCompact后,会逐步形成越来越⼤的StoreFile,当单个StoreFile⼤⼩超过⼀定阈值后,会触发Split操作,同时把当前Region Split成2个Region,⽗Region会下线,新Split出的2个孩⼦Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压⼒得以分流到2个Region上。

hbase的读流程

hbase的读流程

hbase的读流程
HBase的读流程如下:
1. Client先访问Zookeeper,获取hbase:meta表位于哪个Region Server。

2. 访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。

并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。

3. 与目标Region Server进行通讯。

4. 分别在Block Cache(读缓存),MemStore和Store File(HFile)中查询目标数据,并将查到的所有数据进行合并。

此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。

5. 将从文件中查询到的数据块(Block,HFile数据存储单元,默认大小为64KB)缓存到Block Cache。

以上内容仅供参考,建议查阅HBase官方文档或咨询专业技术人员以获取更准确的信息。

hbase概念学习笔记

hbase概念学习笔记

hbase概念学习笔记Hbase 是⼀个开源的、分布式的、版本化的⾮关系型数据库,它利⽤ Hadoop 分布式⽂件系统(HDFS)提供分布式数据存储。

HBase 是⼀个可以进⾏随机访问的存取和检索数据的存储平台,存储结构化和半结构化的数据。

HBase 是⾮关系型数据库,它不具备关系型数据库的⼀些特点,例如,它不⽀持 SQL 的跨⾏事务,也不要求数据之间有严格的关系,同时它允许在同⼀列的不同⾏中存储不同类型的数据。

(ps:个⼈理解主要⽤得⼤数据存储,在关系性数据库在数据量⼤有明显性能瓶颈作为解决⽅式)HBase的优势HBase 是典型的 Nosql 数据库,通常被描述成稀疏的、分布式的、持久化的,由⾏键、列键和时间戳进⾏索引的多维有序映射数据库,主要⽤来存储⾮结构化和半结构化的数据。

容量⼤HBase 的单表可以有百亿⾏、百万列,可以在横向和纵向两个维度插⼊数据,具有很⼤的弹性。

当关系型数据库的单个表的记录在千万级时,查询和写⼊的性能都会呈现指数级下降。

⽽ HBase 在限定某个列的情况下对于单表存储百亿甚⾄更多的数据都没有性能问题。

列存储与很多⾯向⾏存储的关系型数据库不同,HBase 是⾯向列的存储和权限控制的,它⾥⾯的每个列是单独存储的,且⽀持基于列的独⽴检索。

⾏存储⾥的⼀张表的数据都放在⼀起,但在列存储⾥是按照列分开保存的。

在这种情况下,进⾏数据的插⼊和更新,⾏存储会相对容易。

⽽进⾏⾏存储时,查询操作需要读取所有的数据,列存储则只需要读取相关列,可以⼤幅降低系统 I/O 吞吐量。

扩展性HBase ⽀持分布式表,也继承了 HDFS 的可扩展性。

HBase 的扩展是横向的,横向扩展是指在扩展时不需要提升服务器本⾝的性能,只需添加服务器到现有集群即可。

HBase 表根据 Region ⼤⼩进⾏分区,分别存在集群中不同的节点上,当添加新的节点时,集群就重新调整,在新的节点启动 HBase 服务器,动态地实现扩展。

HBase学习笔记之HFile格式

HBase学习笔记之HFile格式

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块保存的为具体的数据,每个数据块有个Magic头,存储偏移量和⾸Key。

hfile中索引块的⼤⼩默认值是128K,当索引的信息超过128K后,就会新分配⼀个索引块。

hbase对于hfile的访问都是通过索引块来实现的,通过索引来定位所要查的数据到底在哪个数据块⾥⾯。

hfile中的索引块可以分成三中,根索引块,枝索引块,叶索引块。

根索引块是⼀定会有的,但是如果hfile中的数据块⽐较少的话,枝索引块和叶索引块就可能不存在。

当单个的索引块中没有办法存储全部的数据块的信息时,索引块就会分裂,会产⽣叶索引块和根索引块,根索引块是对叶索引块的索引,如果数据块继续增加就会产⽣枝索引块,整个索引结果的层次也会加深。

查看⼀个HFile的内容:hbase org.apache.hadoop.hbase.io.hfile.HFile -f /hbase/v_dm_user_app_d_201406/c64c6f7f7caf7f6d5a3f6bbc209dd2cb/c/0ebf8900a669462c8a9d9d908622928f -v -m -p14/07/10 10:23:33 INFO util.ChecksumType: Checksum can use java.util.zip.CRC32Scanning -> /hbase/v_dm_user_app_d_201406/c64c6f7f7caf7f6d5a3f6bbc209dd2cb/c/0ebf8900a669462c8a9d9d908622928f14/07/10 10:23:33 INFO hfile.CacheConfig: Allocating LruBlockCache with maximum size 246.9m14/07/10 10:23:33 ERROR metrics.SchemaMetrics: Inconsistent configuration. Previous configuration for using table name in metrics: true, new configuration: falseK: 135********|20140608-1/c:Q/1402368323157/Put/vlen=32/ts=0 V: 20140608\x0913519304818\x09\xE5\x85\xB6\xE4\xBB\x96\x090.38K: 135********|20140608-2/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519304818\x09\xE5\x85\xB6\xE4\xBB\x96-TCP\x0913.87K: 135********|20140608-32/c:Q/1402368323157/Put/vlen=36/ts=0 V: 20140608\x0913519304818\x09vivo\xE5\xAE\x98\xE7\xBD\x91\x0912.0K: 135********|20140608-23/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519306776\x09HTTP\xE4\xB8\x8A\xE7\xBD\x91\x09205.0K: 135********|20140608-24/c:Q/1402368323157/Put/vlen=36/ts=0 V: 20140608\x0913519306776\x09360\xE7\xBD\x91\xE7\xAB\x99\x09165.0K: 135********|20140608-25/c:Q/1402368323157/Put/vlen=31/ts=0 V: 20140608\x0913519306776\x09\xE6\xB7\x98\xE5\xAE\x9D\x098.0K: 135********|20140608-29/c:Q/1402368323157/Put/vlen=44/ts=0 V: 20140608\x0913519306776\x09\xE5\x8F\x8B\xE7\x9B\x9F\xE6\x9C\x8D\xE5\x8A\xA1\xE5\xB9\xB3\xE5\x8F\xB0\x0915.0K: 135********|20140608-3/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519306776\x09\xE5\x85\xB6\xE4\xBB\x96\x0925.89K: 135********|20140608-33/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519306776\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\xA4\xB4\xE5\x83\x8F\x0963.0K: 135********|20140608-34/c:Q/1402368323157/Put/vlen=35/ts=0 V: 20140608\x0913519306776\x09\xE8\x85\xBE\xE8\xAE\xAF\xE7\xBD\x91\x0990.0K: 135********|20140608-39/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519306776\x09\xE5\xA2\xA8\xE8\xBF\xB9\xE5\xA4\xA9\xE6\xB0\x94\x0911.0K: 135********|20140608-4/c:Q/1402368323157/Put/vlen=39/ts=0 V: 20140608\x0913519306776\x09\xE5\x85\xB6\xE4\xBB\x96-TCP\x091442.83K: 135********|20140608-52/c:Q/1402368323157/Put/vlen=39/ts=0 V: 20140608\x0913519306776\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\x9B\xBE\xE7\x89\x87\x09266.0K: 135********|20140608-5/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519609801\x09\xE5\x85\xB6\xE4\xBB\x96-TCP\x09338.97K: 135********|20140608-26/c:Q/1402368323157/Put/vlen=39/ts=0 V: 20140608\x0913519700318\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\xA4\xB4\xE5\x83\x8F\x09521.0K: 135********|20140608-31/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519700318\x09\xE8\x85\xBE\xE8\xAE\xAF\xE5\x9B\xBE\xE7\x89\x87\x0931.0K: 135********|20140608-43/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519700318\x09\xE8\x85\xBE\xE8\xAE\xAF\xE7\xBD\x91\x091391.0K: 135********|20140608-47/c:Q/1402368323157/Put/vlen=32/ts=0 V: 20140608\x0913519700318\x09\xE6\x90\x9C\xE7\x8B\x90\x0976.0K: 135********|20140608-48/c:Q/1402368323157/Put/vlen=47/ts=0 V: 20140608\x0913519700318\x09\xE4\xB8\xAD\xE5\x9B\xBD\xE8\x81\x94\xE9\x80\x9A\xE6\xB2\x83\xE5\x95\x86\xE5\xBA\x97\x0921.0 K: 135********|20140608-57/c:Q/1402368323157/Put/vlen=32/ts=0 V: 20140608\x0913519700318\x09\xE8\xBF\x85\xE9\x9B\xB7\x0965.0K: 135********|20140608-58/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519700318\x09HTTP\xE4\xB8\x8A\xE7\xBD\x91\x09730.0K: 135********|20140608-59/c:Q/1402368323157/Put/vlen=31/ts=0 V: 20140608\x0913519700318\x09\xE7\x99\xBE\xE5\xBA\xA6\x098.0K: 135********|20140608-6/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519700318\x09\xE5\x85\xB6\xE4\xBB\x96\x0931.04K: 135********|20140608-62/c:Q/1402368323157/Put/vlen=31/ts=0 V: 20140608\x0913519700318\x0910086\x0925.0K: 135********|20140608-7/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519700318\x09\xE5\x85\xB6\xE4\xBB\x96-TCP\x09685.59K: 135********|20140608-8/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519700318\x09\xE5\xBD\xA9\xE4\xBF\xA1\x0930.77K: 135********|20140608-10/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519700638\x09\xE5\x85\xB6\xE4\xBB\x96-TCP\x092820.1K: 135********|20140608-11/c:Q/1402368323157/Put/vlen=34/ts=0 V: 20140608\x0913519700638\x09\xE5\xBD\xA9\xE4\xBF\xA1\x09485.94K: 135********|20140608-30/c:Q/1402368323157/Put/vlen=36/ts=0 V: 20140608\x0913519700638\x09\xE8\x85\xBE\xE8\xAE\xAF\xE7\xBD\x91\x09351.0K: 135********|20140608-35/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519700638\x09\xE6\x96\xB0\xE6\xB5\xAA\xE5\xBE\xAE\xE5\x8D\x9A\x0920.0K: 135********|20140608-36/c:Q/1402368323157/Put/vlen=31/ts=0 V: 20140608\x0913519700638\x09\xE6\xB7\x98\xE5\xAE\x9D\x098.0K: 135********|20140608-37/c:Q/1402368323157/Put/vlen=31/ts=0 V: 20140608\x0913519700638\x09\xE7\x82\xB9\xE5\xBF\x83\x093.0K: 135********|20140608-38/c:Q/1402368323157/Put/vlen=35/ts=0 V: 20140608\x0913519700638\x09360\xE7\xBD\x91\xE7\xAB\x99\x0988.0K: 135********|20140608-45/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519700638\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\xA4\xB4\xE5\x83\x8F\x0919.0K: 135********|20140608-49/c:Q/1402368323157/Put/vlen=40/ts=0 V: 20140608\x0913519700638\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\x9B\xBE\xE7\x89\x87\x091251.0K: 135********|20140608-53/c:Q/1402368323157/Put/vlen=32/ts=0 V: 20140608\x0913519700638\x09\xE6\x96\xB0\xE6\xB5\xAA\x0913.0K: 135********|20140608-54/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519700638\x09HTTP\xE4\xB8\x8A\xE7\xBD\x91\x09122.0K: 135********|20140608-55/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519700638\x09\xE7\x99\xBE\xE5\xBA\xA6\x09697.0K: 135********|20140608-56/c:Q/1402368323157/Put/vlen=44/ts=0 V: 20140608\x0913519700638\x09\xE5\xAE\x89\xE6\x99\xBA\xE5\xB8\x82\xE5\x9C\xBA\xE4\xB8\x8B\xE8\xBD\xBD\x0926.0K: 135********|20140608-9/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519700638\x09\xE5\x85\xB6\xE4\xBB\x96\x0975.75K: 135********|20140608-12/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519701290\x09\xE5\x85\xB6\xE4\xBB\x96\x0933.79K: 135********|20140608-13/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519701290\x09\xE5\x85\xB6\xE4\xBB\x96-TCP\x09703.16K: 135********|20140608-14/c:Q/1402368323157/Put/vlen=32/ts=0 V: 20140608\x0913519701290\x09\xE5\xBD\xA9\xE4\xBF\xA1\x092.59K: 135********|20140608-18/c:Q/1402368323157/Put/vlen=39/ts=0 V: 20140608\x0913519701290\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\x9B\xBE\xE7\x89\x87\x09941.0K: 135********|20140608-19/c:Q/1402368323157/Put/vlen=47/ts=0 V: 20140608\x0913519701290\x09\xE7\x99\xBE\xE5\xBA\xA6\xE5\xBC\x80\xE6\x94\xBE\xE4\xBA\x91\xE5\xB9\xB3\xE5\x8F\xB0\x0929.0 K: 135********|20140608-21/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519701290\x09\xE9\xAB\x98\xE5\xBE\xB7\xE5\x9C\xB0\xE5\x9B\xBE\x098.0K: 135********|20140608-27/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519701290\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\xA4\xB4\xE5\x83\x8F\x094.0K: 135********|20140608-44/c:Q/1402368323157/Put/vlen=36/ts=0 V: 20140608\x0913519701290\x09\xE8\x85\xBE\xE8\xAE\xAF\xE7\xBD\x91\x09484.0K: 135********|20140608-50/c:Q/1402368323157/Put/vlen=31/ts=0 V: 20140608\x0913519701290\x09\xE6\x90\x9C\xE6\x90\x9C\x092.0K: 135********|20140608-60/c:Q/1402368323157/Put/vlen=36/ts=0 V: 20140608\x0913519701290\x09HTTP\xE4\xB8\x8A\xE7\xBD\x91\x0981.0K: 135********|20140608-61/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519701290\x09\xE7\x99\xBE\xE5\xBA\xA6\x09255.0K: 135********|20140608-15/c:Q/1402368323157/Put/vlen=33/ts=0 V: 20140608\x0913519702500\x09\xE5\x85\xB6\xE4\xBB\x96\x0917.38K: 135********|20140608-16/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519702500\x09\xE5\x85\xB6\xE4\xBB\x96-TCP\x09174.14K: 135********|20140608-17/c:Q/1402368323157/Put/vlen=34/ts=0 V: 20140608\x0913519702500\x09\xE5\xBD\xA9\xE4\xBF\xA1\x09443.75K: 135********|20140608-20/c:Q/1402368323157/Put/vlen=36/ts=0 V: 20140608\x0913519702500\x09\xE8\x85\xBE\xE8\xAE\xAF\xE7\xBD\x91\x09457.0K: 135********|20140608-22/c:Q/1402368323157/Put/vlen=34/ts=0 V: 20140608\x0913519702500\x09360\xE7\xBD\x91\xE7\xAB\x99\x099.0K: 135********|20140608-28/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519702500\x09\xE8\x85\xBE\xE8\xAE\xAF\xE5\x9B\xBE\xE7\x89\x87\x0951.0K: 135********|20140608-40/c:Q/1402368323157/Put/vlen=38/ts=0 V: 20140608\x0913519702500\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\xA4\xB4\xE5\x83\x8F\x0974.0K: 135********|20140608-41/c:Q/1402368323157/Put/vlen=40/ts=0 V: 20140608\x0913519702500\x09\xE5\xBE\xAE\xE4\xBF\xA1\xE5\x9B\xBE\xE7\x89\x87\x091134.0K: 135********|20140608-46/c:Q/1402368323157/Put/vlen=37/ts=0 V: 20140608\x0913519702500\x09HTTP\xE4\xB8\x8A\xE7\xBD\x91\x09407.0K: 135********|20140608-51/c:Q/1402368323157/Put/vlen=31/ts=0 V: 20140608\x0913519702500\x09\xE6\x97\xBA\xE6\x97\xBA\x091.0K: 135********|20140608-42/c:Q/1402368323157/Put/vlen=36/ts=0 V: 20140608\x0913519702564\x09HTTP\xE4\xB8\x8A\xE7\xBD\x91\x0916.0Block index size as per heapsize: 424reader=/hbase/v_dm_user_app_d_201406/c64c6f7f7caf7f6d5a3f6bbc209dd2cb/c/0ebf8900a669462c8a9d9d908622928f,compression=none,cacheConf=CacheConfig:enabled [cacheDataOnRead=true] [cacheDataOnWrite=false] [cacheIndexesOnWrite=false] [cacheBloomsOnWrite=false] [cacheEvictOnClose=false] [cacheCompressed=false],firstKey=135********|20140608-1/c:Q/1402368323157/Put,lastKey=135********|20140608-42/c:Q/1402368323157/Put,avgKeyLen=36,avgValueLen=36,entries=62,length=5841Trailer:fileinfoOffset=5199,loadOnOpenDataOffset=5102,dataIndexCount=1,metaIndexCount=0,totalUncomressedBytes=5768,entryCount=62,compressionCodec=NONE,uncompressedDataIndexSize=49,numDataIndexLevels=1,firstDataBlockOffset=0,lastDataBlockOffset=0,comparatorClassName=org.apache.hadoop.hbase.KeyValue$KeyComparator,majorVersion=2,minorVersion=0Fileinfo:BULKLOAD_SOURCE_TASK = attempt_201406091028_0019_r_000000_0BULKLOAD_TIMESTAMP = \x00\x00\x01F\x83\xAA\xD9EDELETE_FAMILY_COUNT = \x00\x00\x00\x00\x00\x00\x00\x00EARLIEST_PUT_TS = \x00\x00\x01F\x83\xAAnUEXCLUDE_FROM_MINOR_COMPACTION = \x00KEY_VALUE_VERSION = \x00\x00\x00\x01MAJOR_COMPACTION_KEY = \xFFMAX_MEMSTORE_TS_KEY = \x00\x00\x00\x00\x00\x00\x00\x00TIMERANGE = 1402368323157 (1402368323157)hfile.AVG_KEY_LEN = 36hfile.AVG_VALUE_LEN = 36STKEY = \x00\x1713519702564|20140608-42\x01cQ\x00\x00\x01F\x83\xAAnU\x04 Mid-key: \x00\x1613519304818|20140608-1\x01cQ\x00\x00\x01F\x83\xAAnU\x04Bloom filter:Not presentDelete Family Bloom filter:Not presentScanned kv count -> 62。

大数据基础-Hbase学习笔记

大数据基础-Hbase学习笔记

Hbase 基础INDEXhbase shell 命令 (2)hbase数据读写过程 (3)为何读取速度较关系型数据库较快? (3)Hbase filter (4)Hbase filter shell (4)创建表 (4)导入数据 (4)ValueFilter&binary (5)ValueFilter&substring (5)ColumnPrefixFilter&ValueFilter (5)PrefixFilter (5)FirstKeyOnlyFilter&KeyOnlyFilter (6)STARTROW&STOPROW (6)查询rowkey里面包含ts的 (6)RegexStringComparator (6)phoenix (7)Hbase 协处理器(Coprocessor) (7)EndPoint (7)Observer (7)数据在线备份(hbase replication) (8)几种在线备份方案 (8)简单备份模式 (8)主从模式 (8)主主模式 (8)数据迁移 (8)静态迁移 (8)动态迁移 (9)replicaion 备份方案 (9)Export and Import 方案 (9)手动方式 (10)Hbase 数据导入 (10)Hbase快照(snapshot) (10)快照的操作 (11)快照应用场景 (11)Hbase特点及应用场景适用于:1.表数据量大:2. 一次大批量写入,多次读取,且读取场景见打,不适合:全表查询;二次查询;复杂的多条件查询hbase shell 命令exists 'test1'判断该表是否存在create 'test1','id','add','info'建表,三个列族list查看当前表格describe 'test1'描述该表格is_enabled 'test1'该表格是否使能disable 'test1'非使能该表格enable 'test1'使能该表格alter 'test1',{NAME=>'add',METHOD=>'delete'}改变表格结构,删除一个列族put 'test1','licent','info:id','0'插入数据,此时带上行键,列名和值,每次只能插入一个列的值put 'test1','licent','info:name','chris'put 'test1','licent','info:age','24'put 'test1','licent','info:gender','male'put 'test1','chris','info:id','0'put 'test1','chris','info:name','chris'put 'test1','chris','info:age','24'put 'test1','chris','info:gender','male'scan 'test1'扫面全表的数据,类似与select *get 'test1','licent' 读取某个行键的所有数据get 'test1','licent','info'读取某个行键,某个列族的所有数据get 'test1','licent','info:name'读取某个行键,某个列族,列名的所有数据put 'test1','licent','info:age','28'更改一个记录,实质上添加一个新的记录scan 'test1'count 'test1'表中所有记录的个数incr 'test1','xiaoming','info:age'增加一个行键xiaoming,并使得age自增deleteall 'test1','licent'删除该行键的所有数据,如果删除某一条记录deletescan 'test1'get 'test1','xiaoming','info:age'disable 'test1'drop ‘test1’ 必须先非使能才能drophbase数据读写过程客户端可以直接定位到要查数据所在的HRegion server 服务器,然后直接在服务器的一个region 上查找要匹配的数据,并且这些数据部分是经过cache 缓存的。

hbase总结笔记

hbase总结笔记

Hbase学习笔记第1章初识Hbase1.1 Hbase简介hbase是bigtable的开源clone。

是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。

主要用来存储非结构化和半结构化的松散数据。

与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBase中的表一般有这样的特点:1 大:一个表可以有上亿行,上百万列2 面向列:面向列(族)的存储和权限控制,列(族)独立检索。

3 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀1.2Hbase的逻辑视图逻辑上看,HBase以表的形式存储数据。

表有行和列组成。

列划分为若干个列族(row family)第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。

而后两个表才是真正的表,物理视图,他们是实际的存储形式,而且它们是按列族进行存储的。

表1表32.a Row Key与nosql数据库们一样,row key是用来检索记录的主键。

访问hbase table中的行,只有三种方式:1.通过单个row key访问2.通过row key的range3.全表扫描Row key行键(Row key)可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-100bytes),在hbase内部,row key保存为字节数组。

存储时,数据按照Row key的字典序(byte order)排序存储。

设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。

(位置相关性) 注意:字典序对int排序的结果是:“1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99”要保持整形的自然序,行键必须用0作左填充。

hbase读写过程

hbase读写过程

hbase读写过程
HBase 读写过程如下:
1、读取流程:
客户端向 HMaster 请求读取数据,根据 RowKey 计算Region位置。

HMaster 通过 Zk 接口查询 MetaTable,找到包含 RowKey 的Region。

HMaster 返回带有Region位置信息的列表,客户端从列表中选
择一个 RegionServer 请求读取数据。

RegionServer 读取并返回数据到客户端。

2、写入流程:
客户端向 HMaster 发送写入请求,根据 RowKey 计算 Region
位置。

HMaster 通过 Zk 接口查询 MetaTable,找到包含 RowKey 的Region。

HMaster 返回带有 Region 位置信息的列表,客户端选择一个RegionServer 发送写入请求。

RegionServer 接收写入请求后,将数据写入 MemStore。

当 MemStore 中的数据超过阈值时(HBase 默认为 128MB),MemStore 中的数据将被刷新到磁盘(HFile)。

RegionServer 告诉 HMaster 写入成功。

写入过程还包括预写日志(WAL)和数据的持久化。

预写日志记
录每个写操作,以确保即使在写入过程中出现故障,数据也可以恢复。

数据持久化包括 HFile 的创建和数据缓存的刷新到磁盘,以确保数据
永久存储。

HBase学习之路(十)HBase表的设计原则

HBase学习之路(十)HBase表的设计原则

HBase学习之路(⼗)HBase表的设计原则建表⾼级属性 下⾯⼏个 shell 命令在 hbase 操作中可以起到很⼤的作⽤,且主要体现在建表的过程中,看下⾯⼏个 create 属性1、 BLOOMFILTER 默认是 NONE 是否使⽤布隆过虑及使⽤何种⽅式,布隆过滤可以每列族单独启⽤使⽤ HColumnDescriptor.setBloomFilterType(NONE | ROW | ROWCOL) 对列族单独启⽤布隆 Default = ROW 对⾏进⾏布隆过滤 对 ROW,⾏键的哈希在每次插⼊⾏时将被添加到布隆 对 ROWCOL,⾏键 + 列族 + 列族修饰的哈希将在每次插⼊⾏时添加到布隆 使⽤⽅法: create 'table',{BLOOMFILTER =>'ROW'} 作⽤:⽤布隆过滤可以节省读磁盘过程,可以有助于降低读取延迟2、 VERSIONS 默认是 1 这个参数的意思是数据保留 1 个版本,如果我们认为我们的数据没有这么⼤的必要保留这么多,随时都在更新,⽽⽼版本的数据对我们毫⽆价值,那将此参数设为 1 能节约 2/3 的空间 使⽤⽅法: create 'table',{VERSIONS=>'2'} 附:MIN_VERSIONS => '0'是说在 compact 操作执⾏之后,⾄少要保留的版本3、 COMPRESSION 默认值是 NONE 即不使⽤压缩,这个参数意思是该列族是否采⽤压缩,采⽤什么压缩算法,⽅法: create 'table',{NAME=>'info',COMPRESSION=>'SNAPPY'} ,建议采⽤ SNAPPY 压缩算法,HBase 中,在 Snappy 发布之前(Google 2011 年对外发布Snappy),采⽤的 LZO 算法,⽬标是达到尽可能快的压缩和解压速度,同时减少对 CPU 的消耗; 在 Snappy 发布之后,建议采⽤ Snappy 算法(参考《HBase: The Definitive Guide》),具体可以根据实际情况对 LZO 和 Snappy 做过更详细的对⽐测试后再做选择。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

H b a s e学习笔记参考书籍: Hadoop in action, 吴超沉思录1.Hbase简介1.面向列的分布式数据库2. 以HDFS作为文件系统3. 利用MapReduce处理Hbase中海量数据4. ZookKeeper作为协调工具5. sqoop提供Hbase到关系型数据库中数据导入功能6. Hive和pig提供高层语言支持如HSQL2. 伪分布式安装准备:安装Hadoop 详细见上一篇日志:hadoop分布式安装hbase版本: hbase-0.94.7-security.tar.gz安装目录 /usr/local步骤:1. 安装 tar -zxvf hbase-0.94.7-security.tar.gz2. 重命名: mv hbase-0.94.7-security hbase3. 配置环境变量hbase_home (vi /etc/profile)4. 修改配置文件1. hbase_home/conf/hbase_env.sh修改java_home exportJAVA_HOME=/usr/local/jdk/修改zookeeper(最后一行)export HBASE_MANAGES_ZK=true(使用Hbase托管的ZooKeeper)2. hbase_home/conf/hbase-site.xml文件configuration 中加入:<property><name>hbase.rootdir</name><value>hdfs://hadoop0:9000/hbase</value></property><property> <name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop0</value></property><property><name>dfs.replication</name><value>1</value></property>5. 启动hbase先启动hadoop(start-all.sh)启用hbase (start-hbase.sh)jps查看进程(HMaster,HRegionServer, HQuorumPeer)http://hadoop0:60010可以查看管理界面,如下:6. 进程说明:HMaster: 管理Hbase table的DDL操作给region分配工作HResionServer:原则上每个slave对应一个HRegionServer HQuorumPeer: ZooKeeper的守护进程,此处我们使用的是Hbase内置的ZooKeeper(在hbase-env.sh中有配置)3. 分布式安装准备条件: hadoop分布式环境已安装,查看hadoop分布式安装hadoop0主机上hbase伪分布已安装完成安装:1. scp -rp /usr/local/hbase hadoop1:/usr/local2. 在hadoop0上更改hbase_home/conf/regionservers 将localhost更改为hadoop13. 在hadoop0上启动hbase4. jps查看,如下:hadoop0上进程:hadoop1上进程:同理可通过 hostname:60010访问hbase管理界面,同分布式安装部分4. 数据模型1. Hbase数据库采用了和Bigtable非常类似的数据类型,表格是稀疏的;1. row key 行键,table的主键2. timestamp 时间戳,数据操作时对应的时间戳,可以看成数据的version number3. Column Family 列簇,每个family可以由任意多个column组成,列名是<族名>:<标签>形式;一个表格的族名时固定的,除非使用管理员权限来改变表格的族名;不过可以在任何时候添加新的标签;eg:course对于表来说是一个有两个列的列族(该列族由两个列组成math 和art);4.两张特殊的表 -ROOT- 和 .META.作用如下:(即-ROOT-记录.META.的region信息,.META.记录用户表的region信息)关系如下:基本操作(注意操作后不要加分号,习惯了sql,总是在后面加分号,然后发现执行语句后都一直没有反应,去掉分号后成功)(表名和列名都需要加引号,不区分单双引号)Hbase shell,是Hbase的命令行工具,命令行中执行hbase shell即可进入hbase shell命令行1) list 查看hbase中所有表2)创建表:create '表名','列簇1','列簇2'....create'student', 'name','grade','course'在管理界面中查看student3)describe 查看表结构describe '表名'eg: describe 'student'hbase(main):003:0> describe "student"DESCRIPTION ENABLED'student', {NAME =>'course', DATA_BLOCK_ENCODING =true >'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY=>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'grade', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE => '0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}, {NAME =>'name', DATA_BLOCK_ENCODING =>'NONE', BLOOMFILTER =>'NONE', REPLICATION_SCOPE =>'0', VERSIONS =>'3', COMPRESSION =>'NONE', MIN_VERSIONS =>'0', TTL =>'2147483647', KEEP_DELETED_CELLS =>'false', BLOCKSIZE =>'65536', IN_MEMORY =>'false', ENCODE_ON_DISK =>'true', BLOCKCACHE =>'true'}4)插入数据和查看数据put '表名','行键名','列名','value','列名2','value2','family:列名1','value3'....... put 'student','wish','name:','wish'查询数据:get '表名','行名'get'student','wish'插入更多数据hbase(main):004:0> put 'student','wish','course:English','100'hbase(main):005:0> put 'student','wish','course:Chinese','60'hbase(main):006:0> put 'student','rain','course:Chinese','100'hbase(main):007:0> put 'student','rain','course:English','200'查看表中数据: scan 'student'其他get例子:get'student','wish','course'get'student','wish',['course']get'student','wish',['course','name']5)删除数据delete'student','wish','course:Math'6)删除表需停止表的可用性,再删除表disable 'student'drop'student'7) 统计行数count'student'精品文档收集于网络,如有侵权请联系管理员删除。

相关文档
最新文档