`

hbase

 
阅读更多

第一:hbase介绍

1.       HBase列式存储的非关系型数据库。它KeyValue的存储方式创建表的时候至少要有一个列族,创建表后要先启用表,删除表的时候要先禁用表

2.       hive数据库是建立在mapreduce上,简化mapreduce操作的。Hbase基于hadoop,将数据存储在hdfs中。

3.       hbase数据模型

 

3.数据模型分析:

上图中是一行数据,因为rowkey唯一确定一行数据。Cf1cf2cf3为列族,任何一个列都归属于一个列族。Timestamp时间戳,此时间戳作为数据的版本,高版本在上面存放。

3.1Rowkey的特点:

①.一个key值决定一行数据

②.rowkey是按照字典序排序的,即ASCII值。在写入的时候就保证有序了,例如现在数据库中key值为12/4,此时往数据库中新增一个3,这个3会插入到24之间。

③.rowkey只能存储64k的字节数据

   3.2Column Family列族 qualifier

 ①.HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。在创建表的时候就要指定列族。如 create ‘test’, ‘course’

 ②.列名以列族作为前缀,每个列族都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入

③.权限控制、存储以及调优都是在列族层面进行的

            HBase把同一列族里面的数据存储在同一目录下,由几个文件保存

3.3Timestamp时间戳

   HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。

   时间戳的类型是 64位整型。

   时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。

   时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳

3.4.Cell单元格

   由行和列的坐标交叉决定;

   单元格是有版本的;

   单元格的内容是未解析的字节数组,由rowkey+列族+时间戳唯一确定一个cell单元格,cell中的数据是没有类型的,全部是字节码(字节数组)形式存贮

  3.5HLog(WAL log)记录日志

.不但记录了错误日志(如时间、错误信息等),还记录了数据。因此在恢复数据的时候也可以在日志中恢复。

 

     

 

第二:hbase架构

1.       架构图

 

2.       Zookeeper的作用:

2.1   Zookeeper作为HadoopHbase的重要组件,可以为分布式应用程序协调服务。

2.2   zookeep集群中保证有一个master,帮助主节点进行高可用

2.3   保存着region的寻址入口

2.4   存储表的元数据信息

2.5   实时监控从节点Region server的上线和下线信息。并实时通知Master

3.       master主节点的作用

3.1.对regionserver做负载均衡,为Region server分配region

3.2如果发现某个regionserver失效,会把此regionserver中的region进行重新分配到其他的regionserver

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

4. regionserver从节点的作用

4.1.处理region数据的io请求。

4.2.并对过大的region进行切分

5. region的作用

   5.1代表一个连续的存储区域(多个store),region就相当于一个表,一个regionserver里有多个region

5.2.每个表开始只有一个region,随着数据不断插入表,当达到缓冲区的阈值的时候,会进行溢写

6. store的作用(重点看看这个过程

   6.1一个region(相当于一个表)由多个store(一个store对应一个列族)组成

   6.2store包括memstorestorefile。当客户端提交的来请求(存数据),会先往memstore存放,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile

   6.3.storefile文件的数量增长到一定阈值后,系统会进行合并(minormajor compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile

    6.4.当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡

    6.5.客户端检索数据,先在memstore找,找不到再找storefile

 

7. storefile的作用

   7.1. 缓冲区产生的小文件。小文件最后要合并成功大文件。最终文件会存在hdfs中。

8. memstore的作用

   8.1.内存缓冲区(写缓存),当内存满了的时候进行溢写,产生持久化好多小文件(其实就是hdfs中的文件)。然后会把小文件合并。当客户端请求之后,会先去缓存中去看一下(此时读这个缓存),如果缓存中没有数据在从客户端发数据

   8.2/*在插入的时候都是先转化成字节数组,是因为插入操作是在生成Hfile小文件。在读取的时候也都是在读取字节数组,是因为我们要读这些小文件。读完之后我们自己在转化成字符串*/

9.大小范围

大小范围如下:master>regionserver>region>store>memstore>hfile小文件

 

第三:hbase2

 

1.HRegionHBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。

2.HRegion由一个或者多个Store组成,每个store保存一个列族。

3.每个Strore又由一个memStore0至多个StoreFile组成。如图:StoreFileHFile格式保存在HDFS上。

 

第四:读写菜操作:

写操作流程

(1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据。

(2) 数据被写入RegionMemStore,直到MemStore达到预设阈值。

(3) MemStore中的数据被Flush成一个StoreFile

(4) 随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。

(5) StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile

(6) 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split2个新的Region。父Region会下线,新Split出的2个子Region会被HMaster分配到相应的RegionServer上,使得原先1Region的压力得以分流到2Region上。

可以看出HBase只有增添数据,所有的更新和删除操作都是在后续的Compact历程中举行的,使得用户的写操作只要进入内存就可以立刻返回,实现了HBase I/O的高机能。

 

读操作流程

(1) Client访问Zookeeper,查找-ROOT-表,获取.META.表信息。

(2) .META.表查找,获取存放目标数据的Region信息,从而找到对应的RegionServer

(3) 通过RegionServer获取需要查找的数据。

(4) Regionserver的内存分为MemStoreBlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据,查不到就到BlockCache中查,再查不到就会到StoreFile上读,并把读的结果放入BlockCache

寻址过程:client-->Zookeeper-->-ROOT--->.META.-->RegionServer-->Region-->client

 

 

 

第五:优化

1.列族store超过三个就不好了:因为memstore达到阈值进行溢写的时候,会触发相邻的memstore一起进行溢写,但是相邻memstore可能还

没达到阈值呢,因此相邻文件生成很多很小很小的Storefile小文件,这样就没必要了。这么多storefile最后合并也将降到效率。

这个过程中,由于列族过多,会导致浪费IO资源。

2.缓存设置:启用读缓存setBlockCacheEnabled方法,把缓存数据放到内存中cf.setInMemory(true),设置缓存大小

3.maxversion最大版本:如果只需要保存最新版本的数据,那么可以设置setMaxVersions(1)。默认值是1

4.time to live:有效时间设置:过期后数据会被自动删除

5.合并文件:minor合并范围比较小,major合并范围比较大(一般会把major的自动触发关闭)。

6.写表操作:创建多个HTable客户端用于写操作,提高写数据的吞吐量。多线程并行,但是要处理麻烦的IO操作

由此引出了使用hbasemapreduce合起来用,来达到用多线程的目的。

参数设置:Auto Flush关闭自动提交,这样还可以把写缓存设置大一点。如果不需要保存日志文件(例如测试环境开发环境),那就别再log日志文件中记录日志了。

7.读表操作:scan读表的时候默认是每次读取一条数据,那我们可以改成一次读取多条数据。

有三个地方可以进行配置:1)在HBaseconf配置文件中进行配置;2)通过调用HTable.setScannerCaching(int scannerCaching)进行配置;3)通过调用Scan.setCaching(int caching)进行配置。三者的优先级越来越高。我们一般选择后两者

8.查询的时候要指定列族,指定具体的查询列,不要写select* from

9.创建连接之后,每次都要关闭连接

 

 

第六:hbase与关系型数据库比较

1、  hbase只提供字符串这一种数据类型,其他数据类型的操作只能靠用户自行处理,而关系型数据库有丰富的数据类型
2
hbase数据操作只有很简单插入,查询,删除,修改,清空等操作,不能实现表与表关联操作,而关系型数据库有这丰富的SQL语句和函数
3
hbase基于列式存储,每个列族都有几个文件保存,不同列族的文件是分离的。而关系型数据库基于表格设计和行模式保存
4
hbase修改和删除数据是实现上插入带有特殊标记的新记录,而关系型数据库是数据内容的替换和修改
5
hbase为分布式而设计,和通过轻易改变硬件数据来做到性能线性增长,很好的数据容错机制,而关系型数据库很难做到这一点或者说只能通过中间层实现

 

第七:hbasehdfs的差异

HDFS是分布式文件系统,适合保存大文件。官方宣称它并非普通用途文件系统,不提供文件的个别记录的快速查询。另一方面,HBase 基于 HDFS,并能够提供大表的记录快速查找和更新。这有时会可能引起概念混乱。HBase 内部将数据放到索引好的“StoreFiles”存储文件中,以便提供高速查询,而存储文件位于 HDFS中。

 

 

分享到:
评论

相关推荐

    HBase数据库设计.doc

    1. HBase有哪些基本的特征? 1 HBase特征: 1 2. HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1...

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    hbase-2.3.5单机一键部署工具

    注意:zookeeper3.4.13和hbase2.3.5都是采用docker-compose方式部署 原文链接:https://blog.csdn.net/m0_37814112/article/details/120915194 说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、...

    java大数据作业_3HBase

    1. 请用java集合的代码描述HBase的表结构 2. 请简述HBase中数据写入最后导致Region分裂的全过程 3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase...

    实验三:熟悉常用的HBase操作

    A.3实验三:熟悉常用的HBase操作 本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1...

    hbase-shell批量命令执行脚本的方法

    批量执行hbase shell 命令 #!/bin/bash source /etc/profile exec $HBASE_HOME/bin/hbase shell <<EOF truncate 'tracker_total_apk_fact_zyt' major_compact('t_abc') disable 't_abc' drop 't_abc' create...

    HBase海量数据存储实战视频教程

    从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌海量消息存储案例来讲解实战HBase 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...

    基于Hbase的大数据查询优化

    Hbase有着先天的优势和先天的劣势,而劣势就是其较差的数据定位能力,也就是数据查询能力。因为面向列的特点,Hbase只能单单地以rowkey为主键作查询,而无法对表进行多维查询和join操作,并且查询通常都是全表扫描,耗费...

    大数据开发之Hbase基本使用及存储设计实战教程(视频+笔记+代码)

    │ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...

    HbaseTemplate 操作hbase

    java 利用 sping-data-hadoop HbaseTemplate 操作hbase find get execute 等方法 可以直接运行

    FlinkSQL实战:HBase的结合应用

    HBase作为Google发表BigTable论文的开源实现版本,是一种分布式列式存储的数据库,构建在HDFS之上的NoSQL数据库,非常适合大规模实时查询,因此HBase在实时计算领域使用非常广泛。可以实时写HBase,也可以利用...

    hbase-2.2.6-bin.tar.gz

    hbase-2.2.6-bin.tar.gz HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所...

    Hbase权威指南(HBase: The Definitive Guide)

    如果你正在寻找一种具备可伸缩性的存储解决方案来适应几乎没有穷尽的数据的话,这本书将可以向你表明apache hbase完全能够满足你的需求。作为google bigtable架构的开源实现,hbase能够支持数以十亿计的记录数和数以...

    hbase-1.2.4-bin.tar.gz.zip

    HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储...

    hive和hbase整合

    hadoop jar /usr/lib/hbase/hbase-0.90.4-cdh3u3.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY, catgyname,catgyid1,catgyname1,catgyid2,catgyname2,catgyid3,catgyname3,catgyid4,catgyname4,catgyid5,...

    hbase-1.4.9-bin.tar.gz

    hbase官方推荐稳定版1.4.9 HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。 HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了...

    Hbase JAVA编程开发实验

    Hbase JAVA编程开发实验报告以及代码,1 按照“Hbase应用开发实验1.pdf”中给出的说明,完成相关相关实验及JAVA程序的编写、调试和运行,提交JAVA源程序(AccessObject.java, HBaseTester.java, User.java)及运行...

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架。 针对HBase各版本API(1.x~2.x)间的差异,在其上剥离出了一层统一的抽象。并提供了以类SQL的方式来读写HBase表中的数据。对...

    HBase3.0参考指南

    HBase3.0参考指南 This is the official reference guide for the HBase version it ships with. Herein you will find either the definitive documentation on an HBase topic as of its standing when the ...

Global site tag (gtag.js) - Google Analytics