Zeros Tech Zeros Tech
首页
架构
大数据
数据库
  • 面试

    • Java面试
    • 大数据面试
    • 架构面试
语言
运维
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

迹_Jason

全栈工程师
首页
架构
大数据
数据库
  • 面试

    • Java面试
    • 大数据面试
    • 架构面试
语言
运维
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • clickhouse

  • deep_learning

  • delta

  • doris

  • es

  • flink

  • hadoop

  • hbase

    • HBase
    • 什么是HBase
      • HBase 读取
      • HBase 写入
      • HBase On Hive
      • HBase Region详解
      • HBase Store详解
      • HBase WAL
      • hbase_问题及解决方案
      • hbase_acl
      • hbase_shell命令
      • hbase_thrift
    • hive

    • kafka

    • kerberos

    • kudu

    • kylin

    • Livy

    • phoneix

    • ranger

    • spark

    • tidb

    • time_series

    • zeppelin

    • 大数据
    • hbase
    迹_Jason
    2021-07-18

    什么是HBase

    # HBase常用命令

    https://learnhbase.wordpress.com/2013/03/02/hbase-shell-commands/

    # 关系型数据库与Nosql数据库区别

    • 关系型数据库需要预定义数据集(字段名、类型),Nosql可以动态灵活
    • 关系型数据库对事务支持很好,Nosql一般不支持事务或者只支持简单事务

    # 关于Hbase

    为一种稀疏的、分布式的、持久化的、多维有序映射。它基于行键、列键和时间戳建立索引。

    # 允许的操作

    • 自如的存储结构化、半结构化,也支持非结构化数据(只要不是特大)
    • 列字段类型允许动态,在某行某列值为字符串,另一行可以为数值型,行作为数据单元
    • 无需预先定义数据类型和列
    • 不允许跨行事务(每行的数据格式都是统一的)
    • 不强调数据之间的关系,允许自由读取数据,和写入数据
    • 不允许跨行事务,同一个字段在不同行中的数据类型可以不一样,对类型不敏感。
    • 强一致性,客户端写入数据可以马上查看到数据
    • 自动分库
    • 高读写吞吐量和计数吞吐量
    • 字节数组形式存储

    # Docker

    https://liudanking.com/arch/setup-hbase-local-env-for-mac-with-docker/

    # 常用字典

    # 指令

    指令 说明
    hbase shell 进入hbhase shell
    list 表列表
    create '表名','列族' 创建表
    put '表名', 'rowkey','列族:字段名','值' 添加值
    get '表名', 'rowkey' 获取值
    scan '表名' 获取所有数据
    delete '表名','rowkey','cf:column' 删除数据
    describe '表名' 表信息
    create_namespace '名称' 创建namespace
    drop_namespace '名称' 删除namespace
    describe_namespace '名称' 查看namespace
    list_namespace 列出所有namespace
    list_namespace_tables 'namespace' 查看namespace下的表
    drop '表名' 删除表
    truncate '表名' 清空表
    scan '表名',{COLUMNS=>['列族','列族'],LIMIT=>1} 查询列族数据

    # 强制删除表

    kinit -kt /etc/security/keytabs/zk.service.keytab zookeeper/dev-dmp4.fengdai.org@DEVDIP.ORG
    /usr/hdp/3.0.0.0-1634/zookeeper/bin/zkCli.sh -server dev-dmp4.fengdai.org:2181
    
    addauth digest super:password
    rmr /hbase-secure/table/gejx_test   //删除会操作成功
    
    // 删除hdfs
    kinit -kt /etc/security/keytabs/hdfs.headless.keytab hdfs-dev_dmp@DEVDIP.ORG
    //删除指定表
    hadoop fs -rm -r -f  /apps/hbase/data/data/default/gejx_test
    // 删除meta
    scan 'hbase:meta',{STARTROW=>'表名'}
    scan 'hbase:meta',{FILTER=>"PrefixFilter('DOP_VISIT_INFO')"}
    deleteall 'hbase:meta','gejx_test'
    
    或使用 https://community.hortonworks.com/questions/242343/hbase-table-is-stuck-in-disabling-state-neither-en.html
    
    重启hbasemaster
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    # 修复锁表

    1.获取表的状态
    get 'hbase:meta','DMP:DS_TRMALL_ORDER_GOOD','table:state'
    2.disable
     put 'hbase:meta','DMP:DS_TRMALL_ORDER_GOOD','table:state',"\b\1"
    3.确保表锁了
     is_disabled 'DMP:DS_TRMALL_ORDER_GOOD'
    4.备份表
     snapshot 'DMP:DS_TRMALL_ORDER_GOOD', 'cata_tableSnapshot'
    5.查看快照,确保有快照内容
     list_snapshots
    6.还原表
     restore_snapshot 'cata_tableSnapshot'
    7.重启master
    8.enbale 表
    enable 'DMP:DS_TRMALL_ORDER_GOOD'
    9.重启 HBase
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    # hbase-site.xml配置

    配置项 说明
    hbase.hregion.memstore.flush.size 设定MemStore向Hfile刷新值

    # 主要内容

    # Hbase的创建、修改存储机制

    在默认情况下,在执行写入操作时会将数据先入到预写入式日志(HLog)和MemStore中,当MemStore存满以后,会将数据存储到硬盘中,生成一个HFile文件。一个列族可以有多个HFile,但一个HFile文件只能对应一个列族。同一行数据可能存储在多个HFile中。

    在实际场景中,必然存在服务宕机的风险,为了防止数据的丢失,在数据存储时,将数据写入HFile前先写入到WAL(HLog)中,服务发生宕机的时候,可以通过WAL来恢复数据。不需要手动去执行恢复操作,Hbase内部存在机制自动恢复处理。

    HBase服务器有一个WAL,这台服务器上的所有表和套的列族共享这个WAL

    # Hbase读取机制

    如果要达到快速访问数据,需要数据有序且尽可能保存到内存里。Hbase是通过最近最少使用算法的缓存技术(BlockCache),将频繁访问的数据,放入内存中,避免硬盘读取。,每个列族都有自己的BlockCache。

    BlockCache由Block组成。Block是建立索引的最小数据单位,也是是硬盘读取的最小数据单位,其大小是根据列族设定的,默认值是64KB

    在Hbase中读取一行数据,首先会检查是否在MemStore中存在,然后检查BlockCache中是否存在,最后访问HFile。

    # 删除数据

    基于行键进行处理

    Hbase在处理删除一条数据的时候,先会对该数据进行是个删除标记,导致用户无法再get和Scan操作的时候获取到该条数据,但不会马上将数据在数据库中删除掉,只有在大合并的时候才会进行数据的完整删除

    小合并:把多个小的HFile合并生成一个大的HFile,因为读取一条数据可能涉及多个文件,限制HFile的数量对于读的性能很重要。其合并产生的的是一个新的文件,在合并完全之后,将新文件设置为激活状态,再将小文件删除。

    大合并:是Hbase清理被删除记录的唯一机会。一个单元的版本超过最大数量,多出的记录在大合并时也会被扔掉

    # 存储数据

    Hbase每个数据单元(行)都存在多个时间版本,默认是3个,在get数据的时候,默认取最新时间戳的版本。进行新建、修改、删除都会留有时间戳,时间戳是对坐标值为单位的

    Hbase中表必须存在一个列族,而列组成列族。行键作为行的唯一标识符,,每一行开始都要有行键。

    Hbase使用坐标的方式定位表中数据,行键,列族,列限定符

    # 关键

    数据模式和数据存储的检索方式

    # 问答

    1)与关系型数据库有什么不同?

    • Hbase可以支持上百亿行和百万列的海量数据的存储
    • Hbase是面向列存储,其列可以动态添加,可以单独对列进行一些操作
    • 多版本,每个列的数据可以有多个版本
    • 稀疏性,没有值的列不占用空间
    • 扩展性,底层依赖与HDFS
    • 高可靠性,不会存在数据的丢失
    • 高性能,查询可以带到毫秒级

    2)其存在是为了解决什么问题?

    3)与其他的数据库相比有什么优势?

    4)什么场景下推荐使用?

    • 数据量上亿
    • 不依赖所有 RDBMS 的额外特性例如,列数据类型、 第二索引、事务、高级查询语言等)
    • 确信你有足够的硬件。因为 HDFS 在小于5个数据节点时,基本上体现不出它的优势

    5)Hbase 的优缺点

    优点:

    • 列的可以动态增加,并且列为空就不存储数据,节省存储空间
    • Hbase 自动切分数据,使得数据存储自动具有水平扩展
    • Hbase 可以提供高并发读写操作的支持
    • 与 Hadoop MapReduce 相结合有利于数据分析
    • 容错性
    • 非常灵活的模式设计(或者说没有固定模式的限制)
    • 可以跟 Hive 集成,使用类 SQL 查询
    • 自动故障转移
    • 客户端接口易于使用
    • 行级别原子性,即,PUT 操作一定是完全成功或者完全失败

    缺点:

    • 不能支持条件查询,只支持按照 row key 来查询
    • 容易产生单点故障(在只使用一个 HMaster 的时候)
    • 不支持事务
    • JOIN 不是数据库层支持的,而需要用 MapReduce
    • 只能在逐渐上索引和排序
    • 没有内置的身份和权限认证

    6) 性能瓶颈是什么?

    7) 如何拓展?

    集群模式,存储空间和处理容量都同时根据集群服务数等比提升,hbase对硬件性能依赖不强。

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

    9)Row Key为什么要按字母排序?

    将Row Key相似的数据集合存放在一起,可以提升查询的效率

    10)Hadoop与Hbase的区别?

    Hadoop的

    优化大型文件的流式访问。 遵循一读写许多意识形态。 不支持随机读/写。

    HBase的

    以柱状方式存储键/值对(列作为列族组合在一起)。 提供对大数据集中的少量数据的低延迟访问。 提供灵活的数据模型。

    Hadoop最适合离线批量处理的东西,而当您有实时需求时使用HBase。

    11) Hive与Hbase的区别? Hive是一个构建在Hadoop基础设施之上的数据仓库。

    • 提供类SQL的HSQL功能
    • 负责将负责的将HSQL解析为HDFS能理解的Map Reduce命令
    • 查询速度比较慢,不支持实时查询
    • 不支持ACID
    • 不支持更新操作

    HBase是一种Key/Value系统

    • 能够提供实时查询
    • 主要支持增加或者更新行,查看一个范围内的cell,获取指定的行,删除指定的行、列或者是列的版本
    • 类SQL的功能可以通过Apache Phonenix实现

    Hive适合用来对一段时间内的数据进行分析查询,Hbase非常适合用来进行大数据的实时查询。两者可以同时使用,并支持相互数据传递保存。

    # 源码任务

    • WAL与MemStore如何保证数据不丢失,恢复数据的机制是怎样的?
    • 数据读取的机制,Block是什么?
    • 什么时候触发大合并和小合并
    • HFile是横向拓展,还是纵向拓展,还是同一个列族是纵向拓展,不同列族是横向

    https://zhuanlan.zhihu.com/p/27800787

    编辑 (opens new window)
    上次更新: 2021/07/21, 18:22:30
    HBase
    HBase 读取

    ← HBase HBase 读取→

    最近更新
    01
    权限
    12-17
    02
    SpringGateway
    12-17
    03
    Spock
    12-17
    更多文章>
    Theme by Vdoing | Copyright © 2021-2021 迹_Jason | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×