热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hbase原理详解

1.Hadoop生态系统Zookeeper分布式监控中心:HDFS的NameNode和MapReduce高可用。zookeeper内部维护一个内存数据库。存储Hbase一些数据&

1.Hadoop生态系统

Zookeeper分布式监控中心:
    HDFS的NameNode和MapReduce高可用。
    zookeeper内部维护一个内存数据库。
    存储Hbase一些数据(后续再谈)
MapReduce:分布式计算框架
Hive:数据仓库
HBase:非关系型数据库
HDFS:分布式文件系统
Flume:日志收集工具(离线分析,离线数据处理)
Sqoop:关系数据ETL工具(非关系型数据与关系型数据转换工具)
Mahout:数据挖掘(将机器学习算法通过MapReduce做开源实现,可以通过MapReduce进行分析,提高效率)
Pig(淘汰):数据流处理语言,通过编写sql脚本分析HDFS数据。
Shark(淘汰):类似于Pig。
 
2.HBase简介
Hbase-Hadoop Database是一个高可用、高性能、面向列、可伸缩、实时读写的分布式数据库 。

可伸缩:可根据负载增减节点。

面向列:相对于行式数据库,空间利用率高。

利用HadoopHDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为分布式协同服务。

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

3.HBase优点
      HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问超大规模数据集时,可以使用HBase。

尽管已经有许多数据存储和访问的策略和实现方法,但事实上大多数解决方案,特别是一些关系类型的,在构建时并没有考虑超大规模和分布式的特点。许多商家通过复制和分区的方法来扩充数据库使其突破单个节点的界限,但这些功能通常都是事后增加的,安装和维护都和复杂。同时,也会影响RDBMS的特定功能,例如联接、复杂的查询、触发器、视图和外键约束这些操作在大型的RDBMS上的代价相当高,甚至根本无法实现。

HBase从另一个角度处理伸缩性问题。它通过线性方式从下到上增加节点来进行扩展。HBase不是关系型数据库,也不支持SQL,但是它有自己的特长,这是RDBMS不能处理的,HBase巧妙地将大而稀疏的表放在商用的服务器集群上。

HBase 是Google Bigtable 的开源实现,与Google Bigtable 利用GFS作为其文件存储系统类似, HBase 利用Hadoop HDFS 作为其文件存储系统;Google 运行MapReduce 来处理Bigtable中的海量数据, HBase 同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable 利用Chubby作为协同服务, HBase 利用Zookeeper作为对应。

大:一个表可以有上亿行,上百万列。

面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。

稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

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

数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。

数据类型单一:HBase中的数据都是字符串,没有类型。

4.Hbase数据模型

RowKey:用于唯一标识Hbase中的一条数据(记录),不可重复,按照字典顺序排序,只能存储64k的字节数据,因此一般要求设计RowKey要简短。
TimeStamp:HBase自动赋值时间戳(也可自己实现),作为版本号,64位整型。Hbase每个cell存储单元(k:v)对同一份数据有多个版本,通过实践戳来区分版本之间的差异,按时间倒叙排序。
CF(ColumnFamily):列族,可包含多列。权限控制,存储以及调优都是在列族层面进行的。HBase把同一列族里面的数据存储在同一目录下,由几个文件保存(StoreFile)。
Column:列,对应key,一列可以在多个版本中维护不同数据。
Value:数据。
Cell:是未解析的字节数组。由{rowkey, column(=+),version}唯一确定的单元。由rowkey,列族,列,版本唯一确定一个单元。中的数据,没有类型,全部是字节码形式存储。

5.Hbase体系结构

Client:

包含访问HBase的接口并维护catch来加快对Hbase访问。

再谈Zookeeper:

保证任何时候,集群中只有一个master。

保存所有Region的寻址入口。

实时监控Region Server的上下线信息。并通知Master.

存储HBase的schema和table元数据

Master:

为RegionServer分配Region

负责 RegionServer的负载均衡

发现失效的RegionServer并重新分配到其他RegionServer工作。(KeepAlive)

管理用户对table的增删改查(只负责请求传递)

RegionServer:

维护多个region,处理对这些region的IO请求,真正的增删改查操作。

水平切分运行中变得过大的region(裂变,尽量等分)。

Region:

每个region保存表中某段连续的数据(多行),每个表一开始只有一个region,随着数据量不断增加,region增大,

当 达到一个阈值时,region就会被regionServer水平切分成两个新的region.

当region很多时,将会保存到其他regionServer上。

Store:

一个region由多个store组成,每一个store对应一个CF(列族),store包含memstore和storeFile

MemStore:

内存缓存区,数据的写操作会先写到memstore中,当memstore中的数增长到一个阈值后,regionServer会

启动flashcatch进程写入到storeFile中,每次写入形成一个单独的storeFile.

StoreFile:

当storeFile数量增长到一定阈值后,系统会进行合并(minor major compaction),合并过程会进行版本的合并和

删除工作,,形成更大的storeFile。(优化一般主要针对major合并)

(注意:过时的版本是在合并时候才删除的,而不是插入数据时)

当一个region所有的storeFile大小和数量增长到超过一定阈值后,会把当前region分割为两个,并且由master分配

到相应的eregionServer服务器,实现负载均衡。

客户端检索数据,现在menStore找,找不到再找storeFile。

Hfile:

和StoreFile是同一个东西,只不过是站在HDFS角度称这个文件为Hfile,在Hbase角度就叫StoreFile.

HLog:

是一个普通的Hadoop SequenceFile,记录数据以及数据的操作。目的是用来做数据容灾。HLog SequenceFile的

Value是HBase的KeyValue对象,对应HFile中的KeyValue。

例如磁盘掉电导致Memstore中数据没有持久化到storeFile中时,可通过HLog恢复。

问题:

Q:为什么做一些权限控制以及调优是 在列族层 面?

A:因为在上述体系架构中,我们区分到的最小层级单元就是StoreFile,而storeFile保存的就是一个列族信息。

Q:rowKey保存在哪?


A:每个store都要携带rowkey,TimeStamp,CF,列信息唯一确定。

作者:小明同鞋
来源:CSDN
原文:https://blog.csdn.net/sinat_30802291/article/details/80817426
版权声明:本文为博主原创文章,转载请附上博文链接!


推荐阅读
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
author-avatar
别说没用的妇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有