第一:hbase介绍
1. HBase是列式存储的非关系型数据库。它是Key、Value的存储方式。创建表的时候至少要有一个列族,创建表后要先启用表,删除表的时候要先禁用表
2. hive数据库是建立在mapreduce上,简化mapreduce操作的。Hbase基于hadoop,将数据存储在hdfs中。
3. hbase数据模型
3.数据模型分析:
上图中是一行数据,因为rowkey唯一确定一行数据。Cf1、cf2、cf3为列族,任何一个列都归属于一个列族。Timestamp时间戳,此时间戳作为数据的版本,高版本在上面存放。
3.1.Rowkey的特点:
①.一个key值决定一行数据
②.rowkey是按照字典序排序的,即ASCII值。在写入的时候就保证有序了,例如现在数据库中key值为1、2/4,此时往数据库中新增一个3,这个3会插入到2与4之间。
③.rowkey只能存储64k的字节数据
3.2.Column 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.5.HLog(WAL log)记录日志
①.不但记录了错误日志(如时间、错误信息等),还记录了数据。因此在恢复数据的时候也可以在日志中恢复。
第二:hbase架构
1. 架构图
2. Zookeeper的作用:
2.1 Zookeeper作为Hadoop和Hbase的重要组件,可以为分布式应用程序协调服务。
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.2.store包括memstore和storefile。当客户端提交的来请求(存数据),会先往memstore存放,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile
6.3.当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major 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小文件
第三:hbase图2
1.HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。
2.HRegion由一个或者多个Store组成,每个store保存一个列族。
3.每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。
第四:读写菜操作:
写操作流程
(1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据。
(2) 数据被写入Region的MemStore,直到MemStore达到预设阈值。
(3) MemStore中的数据被Flush成一个StoreFile。
(4) 随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。
(5) StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile。
(6) 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个新的Region。父Region会下线,新Split出的2个子Region会被HMaster分配到相应的RegionServer上,使得原先1个Region的压力得以分流到2个Region上。
可以看出HBase只有增添数据,所有的更新和删除操作都是在后续的Compact历程中举行的,使得用户的写操作只要进入内存就可以立刻返回,实现了HBase I/O的高机能。
读操作流程
(1) Client访问Zookeeper,查找-ROOT-表,获取.META.表信息。
(2) 从.META.表查找,获取存放目标数据的Region信息,从而找到对应的RegionServer。
(3) 通过RegionServer获取需要查找的数据。
(4) Regionserver的内存分为MemStore和BlockCache两部分,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操作
由此引出了使用hbase与mapreduce合起来用,来达到用多线程的目的。
参数设置:Auto Flush关闭自动提交,这样还可以把写缓存设置大一点。如果不需要保存日志文件(例如测试环境开发环境),那就别再log日志文件中记录日志了。
7.读表操作:scan读表的时候默认是每次读取一条数据,那我们可以改成一次读取多条数据。
有三个地方可以进行配置:1)在HBase的conf配置文件中进行配置;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为分布式而设计,和通过轻易改变硬件数据来做到性能线性增长,很好的数据容错机制,而关系型数据库很难做到这一点或者说只能通过中间层实现
第七:hbase与hdfs的差异
HDFS是分布式文件系统,适合保存大文件。官方宣称它并非普通用途文件系统,不提供文件的个别记录的快速查询。另一方面,HBase 基于 HDFS,并能够提供大表的记录快速查找和更新。这有时会可能引起概念混乱。HBase 内部将数据放到索引好的“StoreFiles”存储文件中,以便提供高速查询,而存储文件位于 HDFS中。
相关推荐
在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...
### HBase权威指南知识点概述 #### 一、引言与背景 - **大数据时代的来临**:随着互联网技术的发展,人类社会产生了前所未为的数据量。这些数据不仅数量巨大,而且种类繁多,传统的数据库系统难以应对这样的挑战。 ...
HBase是一种分布式、基于列族的NoSQL数据库,由Apache软件基金会开发并维护,是Hadoop生态系统中的重要组件。这份“HBase官方文档中文版”提供了全面深入的HBase知识,帮助用户理解和掌握如何在大数据场景下有效地...
### HBase 配置内置 ZooKeeper 的详细步骤与解析 #### 一、配置背景与目的 在 HBase 的部署环境中,ZooKeeper 起着非常重要的作用,它主要用于协调集群中的各个节点,并且管理 HBase 的元数据。通常情况下,HBase ...
"基于SpringBoot集成HBase过程解析" SpringBoot集成HBase是当前大数据处理和存储解决方案中的一种常见组合。HBase是基于Hadoop的分布式、可扩展的NoSQL数据库,能够存储大量的结构化和非结构化数据。SpringBoot则...
HBase是一种分布式、基于列族的NoSQL数据库,它在大数据领域中扮演着重要的角色,尤其是在需要实时查询大规模数据集时。HBase以其高吞吐量、低延迟和水平扩展能力而闻名,常用于存储非结构化和半结构化数据。在HBase...
HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...
HBase是Apache Hadoop生态系统中的一个分布式、版本化、列族式存储系统,设计用于处理大规模数据集。这个“hbase-2.4.17-bin”安装包提供了HBase的最新稳定版本2.4.17,适用于大数据处理和分析场景。下面将详细介绍...
在本文中,我们将深入探讨HBase的安装过程及其在CDH环境中的集成。HBase是Apache Hadoop生态系统中的一个核心组件,它是一个分布式、版本化的、支持列族的NoSQL数据库,特别适合处理大规模的数据存储。CDH(Cloudera...
HBase 是一个开源的、分布式的、版本化的 NoSQL 数据库(也即非关系型数据库),它利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储。与传统的关系型数据库类似,HBase 也以...
### HBase开启审计日志详解 #### 一、概述 HBase是一款分布式列式存储系统,基于Google的Bigtable论文实现。它具有高可靠性、高性能、面向列、可伸缩的特点,非常适合处理海量数据。在大数据领域,HBase被广泛用于...
3. **配置HBase**:编辑`conf/hbase-site.xml`,设置HBase的主配置,如`hbase.rootdir`(HDFS中的HBase目录)和`hbase.zookeeper.quorum`(Zookeeper集群地址)。 4. **启动与停止**:使用`start-hbase.sh`启动HBase...
在Windows上安装HBase 本文将指导您如何在Windows平台上安装HBase,包括配置详解。安装完成后,您将能够配置集群。 一、前提条件 在安装HBase前,需要安装Cygwin和Hadoop。这两个软件的安装不在本文的讨论范围内...
### HBase 安装与使用知识点详解 #### 概述 HBase 是一款构建于 Hadoop 之上的分布式、可扩展的大规模数据存储系统。它提供了类似 Google BigTable 的功能特性,非常适合处理海量数据和高并发读写需求的应用场景。...
首先下载hbase安装包 wget http://mirror.bit.edu.cn/apache/hbase/stable/hbase-2.2.3-bin.tar.gz 解压压缩包 tar -zxvf hbase-2.2.3-bin.tar.gz 修改/opt/hbase-2.2.3/conf/hbse-env.sh文件 第一步 设置javahome ...
在本文中,我们将深入探讨如何使用Scala API操作HBase数据库。HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)...
HBase 是一个开源的、分布式的、版本化的 NoSQL 数据库(也即非关系型数据库),它利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储。与传统的关系型数据库类似,HBase 也以...
《Spring集成HBase的必备库解析》 在Java开发领域,Spring框架的广泛使用与HBase这样的大数据存储系统的结合日益紧密。"hbase jar包.zip" 提供了整合Spring与HBase所需的关键库文件,使得开发者能够高效地利用...
在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...