老刘今天复习HBase知识发现很多资料都没有把概念说清楚,有很多专业名词一笔带过没有解释。比如这个框架高性能、高可用,那什么是高性能高可用?怎么实现的高性能高可用?没说!

如果面试官听了你说的,会有什么反应?我的感觉就是你说的东西都是别人的,没有自己的理解。所以老刘才会写用大白话讲大数据这个系列,就是争取把东西讲清楚,讲明白!如果觉得老刘写得不错,给老刘点个赞吧!

01 HBase知识点

第1点:HBase的定义

官网画红框中直接就说,HBase是一个分布式、可扩展的大数据存储Hadoop数据库。试想下,你是面试官,别人这样回答你,你会不会满意?老刘觉得学的东西要用自己的话讲出来,才是真正的掌握。

在老刘看来,HBase,即Hadoop database,即Hadoop数据库。它的数据通常存储在HDFS上,HDFS为HBase提供了高可靠性的底层存储的支持;利用Hadoop MapReduce来处理HBase中的海量数据,为HBase提供了高性能的计算能力;利用ZooKeeper为HBase提供了稳定的服务。

根据上述所说,就可以总结为HBase是一个建立在HDFS之上,具有高可靠、高性能、可扩展、支持海量数据存储的分布式数据库。

一般是在存储数据比较大的时候,并且对读写性能要求比较高的时候,才会用到HBase数据库。

那你们知道什么是读写性能比较高吗?那就是读的比较快、写的也比较快的时候,才是读写性能比较高!

第2点:HBase的特点

1)极易扩展

HBase底层依赖HDFS,当磁盘空间不足的时候,我们只需要动态增加DataNode节点就可以了。当然也可以通过增加服务器来对集群的存储进行扩容。

2)海量存储

可以存储大批量的数据。在存储海量数据的前提下,能在几十到百毫秒内返回数据。这点和HBase的极易扩展性非常相关。正因为HBase良好的扩展性,才为海量数据的存储提供了便利。

3)列式存储(这里一定要搞清楚列式存储和行式存储的区别)

这里的列式存储其实说的是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须要指定了。

4)稀疏

稀疏主要是针对HBase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。

5)数据类型单一

它所有的数据都是以字节数组进行存储。

第3点:HBase表的数据模型

先给出一张HBase的设计表,根据这张表进行介绍表的结构。

rowkey行键

1)它是表(table)的主键,table中的记录按照rowkey的字典序进行排序,这里就必须要说说什么是字典序?

有多机构的资料就是一笔带过,一点也不负责,让人非常不爽。老刘就不得不去搜搜字典序排序的相关知识。

通俗地讲,字典序排序大概就是两个作比较的内容从第一个字母开始比较,按照ASCII码表比较大小,小的放在前面,第一个相同就比较下一个,都相同且一个比较完了,则短的排在前面。

常见ASCII码的大小规则:0~9<A~Z<a~z

2)rowkey行键它可以是任意的字符串,其中它的最大长度是 64KB,实际应用中长度一般为 10-100bytes。

Column Family列族

1)HBase表中的每个列,都归属于某个列族。

2)列族是表的schema的一部分(而列不是),即建表时至少指定一个列族。

3)比如我们创建user表,包含info、data两个列族,代码就为create 'user', 'info', 'data'。Column列列肯定是表的某一个列族下的一个列,用列族名:列名表示,比如`info`列族下的`name`列,就表示为`info:name`。

Cell单元格

如上图,我们通过指定rowkey行键、列族、列,就可以确定的一个Cell单元格。在Cell中的数据是没有任何类型的,全部都是以字节数组的形式进行存储的。

Timestamp时间戳

这个说的就是可以对表中的Cell多次赋值,每次赋值操作时的时间戳timestamp,可看成Cell值的版本号version number。也就是一个Cell可以有多个版本的值的意思。

第4点:HBase架构

从图中可以看出,这是一个非常典型的主从架构。

下面详细说下各个组件:

Client客户端

Client它是操作HBase集群的入口,利用Client,在通过RPC与HMaster进行通信,可以完成表的增、删、改操作。也可以通过RPC与RegionServer通信,完成读写表数据的操作。

一般我们可以利用HBase shell或者Java API进行编程,完成上述表的操作。

ZooKeeper集群

ZooKeeper是什么有什么用,老刘已经在ZooKeeper框架那篇文章中详细讲解了,大家可以去看看。那它在HBase集群中的作用,就非常明显了,① 它实现了HMaster的高可用,多HMaster间进行主备选举。② 保存了HBase的元数据信息meta表。③ 对HMaster和HRegionServer各个节点进行监控。

HMaster

HBase集群也是主从架构,HMaster是主角色,是集群的老大,主要负责管理表和Region。

那它管理表和Region做一些什么呢?

1)管理Client对表的增删改的一些操作;

2)管理Region的操作就会比管理Client多一点。当Region分裂后,负责新Region分配到指定的HRegionServer上;当HRegionServer宕机后,负责其上的region的迁移;以及管理HRegionServer之间的负载均衡。

那大家有没有了解负载均衡,什么是负载均衡?

举个例子,一个网站最开始建立的时候,它的访问量比较小,但当它的流量变得特别大的时候,并发量就变得特别大了,网站就会出现访问延迟的一些现象。这个时候呢,就需要用到负载均衡了。以前这个网站是一个单一服务器,现在就可以配置多个服务器集群,那样就可以把访问流量分发到集群中的不同服务器上,这样就大大减少了单一服务器上的压力,也就是负载均衡想要做的事。

HRegionServer

它是HBase集群中从角色,是集群中的小弟。它主要负责响应客户端的读写数据请求,以及负责管理一系列的Region。

Region

它是HBase集群中分布式存储的最小单元,一个Region对应一个Table表的部分数据。简单理解就是表存储在HBase中,并且都是以Region为单位进行存储。

第5点:HBase shell命令

说一些常用的基础操作命令:

  1. 创建user表,包含infodata两个列族
  2. create 'user', 'info', 'data'
  3.  
  4. 使用put命令向user表中插入信息,row keyrk0001,列族info中添加名为name的列,值为zhangsan
  5. put 'user', 'rk0001', 'info:name', 'zhangsan'
  6.  
  7. 获取user表中row keyrk0001的所有信息(即所有cell的数据)
  8. get 'user', 'rk0001'
  9. 获取user表中row keyrk0001info列族的所有信息
  10. get 'user', 'rk0001', 'info'
  11.  
  12. 更新数据操作 user表的f1列族版本数改为5
  13. alter 'user', NAME => 'info', VERSIONS => 5
  14.  
  15. 删除数据以及删除表操作
  16. 删除userrow keyrk0001,列标示符为info:name的数据
  17. delete 'user', 'rk0001', 'info:name'
  18.  
  19. 清空表数据
  20. truncate 'user'
  21.  
  22. 删除表
  23. 首先需要先让该表为disable状态,使用命令:
  24. disable 'user'
  25. 然后使用drop命令删除这个表
  26. drop 'user'
  27. 注意:如果直接drop表,会报错:Drop the named table. Table must first be disabled

再说一下HBase的高级操作命令:

  1. 显示服务器状态
  2. status 'node01'
  3.  
  4. 显示HBase当前用户
  5. whoami
  6.  
  7. 显示当前所有的表
  8. list
  9.  
  10. 统计指定表的记录数
  11. count 'user'
  12.  
  13. 检查表是否存在,适用于表量特别多的情况
  14. exists 'user'
  15.  
  16. 检查表是否启用或禁用
  17. is_enabled 'user'
  18. is_disabled 'user'
  19.  
  20. 禁用一张表/启用一张表
  21. disable 'user'
  22. enable 'user'
  23.  
  24. 删除一张表,记得在删除表之前必须先禁用
  25. drop

上述都是HBase shell命令的内容,还有用JAVA API进行表操作的内容,但是这部分老刘就不讲解了,有需要的话,可以联系老刘,我会分享给你。

02 HBase总结

今天是HBase知识点的第一部分,老刘尽量用大白话讲这些知识点讲述出来了,如果还有疑问,可以联系公众号:努力的老刘。

最后希望今天讲的内容对大数据感兴趣的同学有帮助,也希望能够得到大家的批评和指点。觉得写得还行的,给老刘点个赞!

用大白话讲大数据HBase,老刘真的很用心(1)的更多相关文章

  1. 大白话详解大数据HBase核心知识点,老刘真的很用心(2)

    前言:老刘目前为明年校招而努力,写文章主要是想用大白话把自己复习的大数据知识点详细解释出来,拒绝资料上的生搬硬套,做到有自己的理解! 01 HBase知识点 第6点:HRegionServer架构 为 ...

  2. 大白话详解大数据HBase核心知识点,老刘真的很用心(3)

    老刘目前为明年校招而努力,写文章主要是想用大白话把自己复习的大数据知识点详细解释出来,拒绝资料上的生搬硬套,做到有自己的理解! 01 HBase知识点(3) 第13点:HBase表的热点问题 什么是热 ...

  3. 大白话详解大数据hive知识点,老刘真的很用心(3)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 1. hive知识点(3) 从这篇文章开始决定进行一些改变,老刘在博客上主要分享 ...

  4. 大白话详解大数据hive知识点,老刘真的很用心(1)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的知识点详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 01 hive知识点(1) 第1点:数据仓库的概念 由于hive它是基于had ...

  5. 大白话详解大数据hive知识点,老刘真的很用心(2)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 1. hive知识点(2) 第12点:hive分桶表 hive知识点主要偏实践, ...

  6. 第五章:大数据 の HBase 进阶

    本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什 ...

  7. 第四章:大数据 の HBase 基础

    本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 介绍什么是 NoSQL,NoSQL 和 RDBM ...

  8. 大数据hbase分布式安装及其部署。

    大数据hbase分布式安装及其部署. 首先要启动Hadoop以及zookeeper,可以参考前面发布的文章. 将hbase的包上传至master节点 这里我使用的是1.3.6的版本,具体的根据自己的版 ...

  9. 大数据-HBase

    HBase HBase(Hadoop Database)基于Google的BigTable论文,依赖HDFS进行存储.适合存储大体量数据.HBase是高可靠性(数据安全).高性能(存取效率).面向列. ...

随机推荐

  1. 最新主流 Markdown 编辑器推荐

    Markdown ,2004年由 John Gruberis 设计和开发,是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,以下将介绍目前比较流行的一 ...

  2. 关于天线长度及LC值的计算

    一.天线长度与波长 1.天线最佳长度计算 理论和实践证明,当天线的长度为无线电信号波长的1/4时,天线的发射和接收转换效率最高.因此,天线的长度将根据所发射和接收信号的频率即波长来决定.只要知道对应发 ...

  3. 进程相关的API函数

    0x01. ID与句柄 如果我们成功创建一个进程之后,CreateProcess会返回四个数据,id和句柄 句柄的话就是 当前进程私有的句柄表索引(这是当前进程,给别进程也没用) 每个进程都有一张自己 ...

  4. ES6--数组部分基础知识

    数组Array的相关方法 1.Array.from()方法 Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象 ...

  5. Error: pg_config executable not found.

    pip 安装 psycopg2 安装及错误 现象: Error: pg_config executable not found. Please add the directory containing ...

  6. 关于synchronized无法锁住Integer原因

    原因 在多线程的时候,为了保证数据安全,必须在修改数据时使用线程同步,java中的synchronized用来实现线程同步.线程列队. 学完多线程基础的我,写一个多线程交替输出1,2,3,4,5... ...

  7. Java_三大特征相关

    重写 子类通过重写父类的方法, 可以用自身的行为替换父类的行为 重写的三个要点: "==" :方法名, 形参列表, 返回值类型相同 "<=" : 返回值类 ...

  8. MapStruct 解了对象映射的毒

    前言 MVC模式是目前主流项目的标准开发模式,这种模式下框架的分层结构清晰,主要分为Controller,Service,Dao.分层的结构下,各层之间的数据传输要求就会存在差异,我们不能用一个对象来 ...

  9. 多服务器使用Docker设置一主一从三哨兵redis(完整)

    本来应该续之前那篇博客Docker配置redis哨兵模式--多服务器·上写一个下篇的,但是忽然意识到应该将必要的环境打包为一个基础镜像,在此基础上建立与redis有关的镜像,这样既能够快速打包,又能够 ...

  10. “谈谈MySQL的基数统计”

    ** 目录 推荐阅读原文链接 一.基数是啥? 二.InnoDB更新基数的时机? 三.基数是估算出来 四.持久化基数 四.如何主动更新基数? Hi,大家好!我是白日梦. 今天我要跟你分享的话题是:&qu ...