EmmmuaCode EmmmuaCode
首页​
导航🚀​
  • 数据结构
  • 计算机网络
  • Java基础

    • JavaSE
    • JVM虚拟机
    • JUC并发编程
  • JavaWeb

    • Servlet
    • MVC
    • filter|listener
  • HTML
  • CSS
  • JavaScript
  • Vue
  • uni-app
  • Spring5
  • SpringMVC
  • SpringBoot2
  • SpringCloud
  • SpringSecurity
  • 搜索引擎

    • ElasticSearch
  • 消息队列

    • RabbitMQ
  • 服务器

    • Nginx🌐
  • 服务框架

    • Dubbo
  • Python基础
  • 数据分析
  • Hadoop
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • NoSQL数据库概论
    • Redis
    • MongoDB
    • HBase
  • 框架

    • MyBatis
    • MyBatis-Plus
    • ShardingSphere
  • 部署

    • Linux
    • Docker
  • 管理

    • Maven
    • Git
  • 友情链接
  • 优秀博客文章
  • 索引

    • 分类
    • 标签
    • 归档
  • 其他

    • 关于
Github (opens new window)

wufan

海内存知己,天涯若比邻。
首页​
导航🚀​
  • 数据结构
  • 计算机网络
  • Java基础

    • JavaSE
    • JVM虚拟机
    • JUC并发编程
  • JavaWeb

    • Servlet
    • MVC
    • filter|listener
  • HTML
  • CSS
  • JavaScript
  • Vue
  • uni-app
  • Spring5
  • SpringMVC
  • SpringBoot2
  • SpringCloud
  • SpringSecurity
  • 搜索引擎

    • ElasticSearch
  • 消息队列

    • RabbitMQ
  • 服务器

    • Nginx🌐
  • 服务框架

    • Dubbo
  • Python基础
  • 数据分析
  • Hadoop
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • NoSQL数据库概论
    • Redis
    • MongoDB
    • HBase
  • 框架

    • MyBatis
    • MyBatis-Plus
    • ShardingSphere
  • 部署

    • Linux
    • Docker
  • 管理

    • Maven
    • Git
  • 友情链接
  • 优秀博客文章
  • 索引

    • 分类
    • 标签
    • 归档
  • 其他

    • 关于
Github (opens new window)
  • MySQL-基础

    • MySQL-简介
    • MySQL-CRUD
    • MySQL-函数
    • MySQL 多表查询
    • MySQL 约束与自增长
    • MySQL 索引与事务
    • MySQL 表类型和存储引擎
    • MySQL 视图与管理
  • MySQL-进阶

    • MySQL 存储引擎
    • MySQL 索引
    • MySQL SQL优化
    • MySQL 视图/存储过程/触发器
    • MySQL 锁
    • MySQL InnoDB引擎
    • MySQL 管理
  • MySQL-运维

    • MySQL 日志
    • MySQL 主从复制
    • MySQL 分库分表
    • MySQL 读写分离
  • NoSQL 数据库概论

    • 非关系型数据库
    • NoSQL数据库理论基础
    • NoSQL数据库分类
  • Redis

    • Redis 数据库简介
    • Redis 概述安装
    • 常用五大数据类型
    • Redis 配置文件
    • Redis 发布和订阅
    • Redis 新数据类型
    • Redis Java整合
    • Redis 事务与锁
    • Redis 持久化操作
    • Redis 主从复制
    • Redis 集群搭建
    • Redis 缓存问题
    • Redis 分布式锁
    • Redisson 的应用
    • Redis 6.0新功能
  • MongoDB

    • MongoDB 相关概念
    • MongoDB 安装
    • MongoDB 常用命令
    • MongoDB 索引-Index
    • MongoDB 整合Java案例
    • MongoDB 集群和安全
  • HBase

    • HBase简介
      • Google的三驾马车
      • Hadoop与Hbase
      • 什么是HBase
        • HBase的发展历程
      • HBase特性
        • 容量巨大
        • 类存储
        • 稀疏性
        • 扩展性
        • 高可靠性
      • Hadoop
      • HDFS
        • HDFS基本架构
        • HDFS-块
        • HDFS-NameNode
        • HDFS-SecondaryNameNode
        • HDFS-DataNode
        • HDFS-读文件机制
        • HDFS-写文件机制
        • HDFS-副本机制
        • HDFS-容错
    • HBase系统架构
    • HBase数据定义
    • HBase数据操作
    • HBase基本原理
  • MyBatis

    • MyBatis 入门案例
    • XML 配置
    • XML 映射文件
    • 动态SQL
    • 缓存
    • MyBatis的逆向工程
    • 分页插件
  • MyBatis-Plus

    • MyBatis-Plus 简介
    • MyBatis-Plus 入门案例
    • MyBatis-Plus 基本CRUD
    • MyBatis-Plus 常用注解
    • 条件构造器和常用接口
    • MyBatis-Plus 插件
    • MyBatis-Plus 通用枚举
    • MyBatis-Plus 代码生成器
    • MyBatis-Plus 多数据源
    • MyBatisX插件
  • ShardingSphere

    • ShardingSphere_高性能架构模式
    • ShardingSphere 简介
    • ShardingSphere 主从同步
    • ShardingSphere_JDBC 读写分离
    • ShardingSphere-JDBC垂直分片
    • ShardingSphere-JDBC水平分片
    • 启动ShardingSphere-Proxy
    • ShardingSphere-Proxy读写分离
    • ShardingSphere-Proxy垂直分片
  • studynotes
  • database
  • HBase
wufan
2022-03-18
目录

HBase简介

# HBase简介

# Google的三驾马车

谈到Hadoop的起源,就不得不提Google的三驾马车:Google FS、MapReduce、BigTable。虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设计论文,奠定了风靡全球的大数据的基础!

GFS —2003 HDFS的理论基础 MapReduce—2004 MapReduce的理论基础 BigTable—2006 Hbase的理论基础

# Hadoop与Hbase

01

# 什么是HBase

HBase(Hadoop Database)是一个开源的、面向列大数据存(Column-Oriented)、适合存储海量非结构化数据或半结构化数据的、具备高可靠性、高性能、可灵活储与管理扩展伸缩的、支持实时数据读写的非关系型分布式数据库。使用Java语言实现,运行在HDFS之上,将HDFS作为底层文件存储系统。

HBase 是非关系型数据库,它不具备关系型数据库的一些特点,例如,它不要求数据之间有严格的关系,同时它允许在同一列的不同行中存储不同类型的数据。

# HBase的发展历程

Apache HBase最初是Powerset公司为了处理自然语言搜索产生的海量数据而开展的项目

02

# HBase特性

# 容量巨大

HBase的单表可以有百亿行,百万列,可以在横向和纵向两个维度对数据进OPTION行插入,具有很大弹性。

在限定某个列的情况下对于单表存储百亿或更多的数据都没有性能问题,并且自身能够周期性地将较小文件合并成大文件以减少对磁盘的访问

# 类存储

HBase是面向列(族)存储的,并且列(族)拥有独立索引,对数据的权限控制也是从列族层面来实现的。

03

# 稀疏性

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

# 扩展性

纵向扩展:不断优化主服务器的性能,提高存储空间和性能

横向扩展:不断向集群添加服务器来提供存储空间和性能

HBase是横向扩展的,理论上无限横向扩展

# 高可靠性

  • 基于HDFS的多副本机制
  • WAL(Write-Ahead-Log)预写机制
  • Replication 机制

WAL(Write-Ahead-Log)预写日志是在 HBase 服务器处理数据插入和删除的过程中用来记录操作内容的日志,保证了数据写入时不会因集群异常而导致写 入数据的丢失;而 Replication 机制是基于日志操作来做数据同步的。

# Hadoop

  • 官方文档 (opens new window)

Hadoop是一个分布式的基础架构,实现分布式的存储和分布式的计算,分别对应hadoop的两个核心设计--HDFS和Mapreduce,HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

# HDFS

  • HDFS即Hadoop分布式文件系统(储与管理Hadoop Distributed File System)
  • 提供高可靠性和高吞吐量的文件存储服务
  • HDFS可以运行在低成本的硬件之上,通过软件设计来保证系统的可靠性
  • 具有容错性,高可靠性,高可扩展性,高吞吐率。

# HDFS基本架构

HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。

01

# HDFS-块

  • 块是文件存储处理的逻辑单元
  • HDFS的文件被分成块进行存储
  • HDFS块的默认大小是64MB

分块的好处:

  • 支持大规模的文件存储,文件大小不受单点存储容量限制。
  • 简化了系统设计,每个节点存储多少个文件块很容易计算。
  • 适合数据备份,每个分块冗余的备份存储到多个节点。
  • 利于负载均衡,当某个节点处于繁忙状态时,客户端还可以从其他 节点获取这个块的副本。

块大小可自行设置,不能太大,也不宜过小。块太大,不利于副本的存储,块太小导致块数量过多,计算过程中占有的内存多

# HDFS-NameNode

  • NameNode,也叫做名称节点。
  • NameNode是主服务器,负责存储文件的储与管理元数据
    • 元数据指的是目录,文件,权限等信息;
    • 文件分块,副本存储等信息(比如一个文件对应哪些块,每块存储节点的位置)
  • Namenode在数据访问时给客户端提供元数据信息,当客户端发起数据请求时,仅仅从NameNode中获取文件的元数据信息,具体的数据传输不经过NameNode,而是直接与具体的DataNode进行交互
  • 与Datanode交互,分配全局的数据存储节点
  • 两个核心的数据结构:fsimage和editlog
    • fsimage(映象文件):用于维护文件系统树以及文件树中所有的文件和文件储与管理 夹的元数据
    • editlog(事务日志):记录了所有针对文件的创建、删除、重命名等操作
  • NameNode启动
    • 在Namenode启动时,fsimage文件的内容会加载到内存中,之后一直处于只读状态,当需要修改元数据时,比如系统中新建了文件等,不能直接修改fsimage文件,而是将这些修改事务写到editlog文件中,editlog文件会定期的合并,形成新的fsimage文件来替代旧的fsimage文件,这个合并工作由另一个组件SecondaryNameNode来完成。

# HDFS-SecondaryNameNode

作用:定期的合并editslog和fsimage文件,合并过程会周期性的进行

02

  • Checkpiont:合并的时间点,默认3600秒,或editlog文件达到64M。

# HDFS-DataNode

  • 分布式文件系统中的每一个文件,都被切分成若干个数据块,每一个数据块都被存储在不同的服务器上,此服务器称之为数据服务器,这就是DataNode(数据节点)
  • 负责存储数据块
  • 负责为客户端提供数据块的读写服务
  • 响应NameNode的相关指令,比如完成数据块的复制、删除等
  • 定期发送心跳信息给NameNode,告知NameNode当前节点存储的文件块信息

03

# HDFS-读文件机制

04

# HDFS-写文件机制

05

# HDFS-副本机制

  • 默认副本数为3
  • 跨越多个机架
  • 默认副本策略:在HDFS默认3个副本情况下,会把第一个副本放到机架的一个节点上,第二副本放在同一个机架的另一个节点上,第三个节点放在不同的机架上。这种策略减少了跨机架副本的个数,提高了数据块的写性能,也允许一个机架出故障的情况。

# HDFS-容错

  • HDFS具有较高的容错性,可以兼容廉价的硬件,它把硬件出错看作一种常态,而不是异常,并设计了相应的机制检测数据错误和进行自动恢复,主要包括以下几种情形:
    • 名称节点出错
    • 数据节点出错
    • 数据出错
  1. NameNode出错:用Secondary NameNode备份的fsimage恢复
  2. DataNode出错:DataNode与NameNode通过“心跳”报告状态,当DataNode失效后,副本数减少,而NameNode会定期检查各节点的副本数量, 检查出问题后会启动数据冗余机制。
  3. 数据出错:在文件被创建时,客户端就会对每一个文件块进行信息摘录,并保存总和校验码,读取时校验。

小结

HDFS:储与管理可以存储大容量的数据文件容错性,故障监测机制,随时发现集群故障节点高可扩展性

#HBase
上次更新: 2024/04/21, 09:42:22
MongoDB 集群和安全
HBase系统架构

← MongoDB 集群和安全 HBase系统架构→

最近更新
01
微信支付功能的实现与流程
11-21
02
购物车与结算区域的深入优化与功能完善
11-21
03
购物车与结算区域的功能实现与优化
11-21
更多文章>
Theme by Vdoing | Copyright © 2023-2024 EmmmuaCode | 黔ICP备2022009864号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式