Hbase读书笔记(三)

1.本文说明

笔者最近一年从事维护Hbase相关工作,总结相关文章用于阐述对于Hbase的部分理解,本文知识点来源于
《HBase原理与实践》第三章

2.Hbase依赖服务

2.1 正常的依赖

至少依赖ZK、HDFS,特殊场景,如Copy SnapShot和验证集群间数据一致性,需要借助YARN集群的分布式计算能力

2.2 ZK简介

  • ZK之所以占据如此重要的地位,是因为它解决了分布式系统中一些最基础的问题
    1.提供极低延迟、超高可用的内存KV数据库服务
    2.提供中心化的服务故障发现服务
    3.提供分布式场景下的锁、Counter、Queue等协调服务
  • ZK核心特性
    1.多类型节点,ZK数据树节点可以设置多种节点类型,每种节点类型具有不同节点特性。
    2.Watcher机制,该机制是ZK实现的一种时间异步反馈机制,就像现实生活中某读者订阅了某个主题,这个主题一旦有任何更新都会第一时间反馈给该读者一样。
    3.Session机制,ZK启动时,客户端会根据配置文件中ZK服务器列表配置项,选择其中任意一台服务器相连,如果连接失败,会尝试连接另一台服务器,直到与一台服务器成功创建连接或因为ZK服务器都不可用而失败。
    ZK对于网络连接断开和Session过期是两种处理机制。
    客户端与服务端之间维持一个长链接,在Session超时时间内,服务端会不断检测该客户端是否还处于正常连接,服务端会将客户端的每次操作视为一次有效的心跳检测来反复地进行Session激活。因此,在正常情况下,客户端Session是一直有效的。
    当客户端与服务端之间的连接断开后,用户在客户端可能主要看到:CONNECTION_LOSS和SESSION_EXPIRED 两类异常。
  • CONNECTION_LOSS
    网络一旦断连,客户端就会收到CONNECTION_LOSS异常,此时它会自动从ZK服务器列表中重新选择去新的地址,并尝试重新连接,知道最终成功连上服务器。
  • SESSION_EXPIRED
    客户端与服务端断开连接后,如果重连时间耗时太长,超过了Session超时时间,服务器会进行Session清理,此时客户端不知道Session已经失效,状态还是DISCONNECTED,如果客户端重新连上了服务器,此时状态会变更为SESSION_EXPIRED。
  • ZK典型使用场景
    HBASE使用ZK实现了Master的高可用管理,RS宕机异常检测、分布式锁等一些列功能
    分布式锁的具体实现步骤


    ZK-HBASE.png
  • Hbase中ZK的重要配置
    1.hbase.zookpeer.quorum
    zk集群地址,必须进行配置
    2.hbase.zookpeer.property.clientport
    zk集群端口,可以不进行配置
    3.zookeeper.znode.parent
    hbase的位置
    4.zookeeper.session.timeout
    rs与zk会话超时时间
  • ZK存储信息


    HBase-ZK存储信息.png

2.3 HDFS简介

HDFS本质上是一个分布式文件系统,可以部署在大量廉价的服务器上,提供可扩展的、高容错性的文件读写服务。
Hbase项目本身并不负责文件侧面的高可用和扩展性,它通过把数据存储在HDFS上来实现大容量文件存储和文件备份。
HDFS擅长的场景是大文件的顺序读、随机读和顺序写。

  • HDFS高可用服务
    NN、DN、JN、ZKFC
  • 架构图如下:


    image.png
  • 文件写入流程


    image.png
  • 步骤1:
    DFS Client 在创建FSDataOutputStream时,把文件元数据发给NN,得到一个文件唯一表示的field,并向用户返回一个OutputStream
  • 步骤2:
    用户拿到OutPutStream之后,开始写数据。注意写数据都是按照Block来写的,不同的Block可能分布在不同的DN上,因此如果发现当前的Block已经写满,DFSClient就需要再发起请求向NN申请一个新的Block,在一个Block内部,数据由若干个Packet组成,若当前的Packet写满了,就放入DataQueue队列,DataStreamer线程异步地把Packet写入到对应的DN。3个副本中的某个DN收到Packet之后,会先写本地文件,然后发送一份到第2个DN,第2个执行类似步骤后,发给第3个DN。等待所有的DN都写完数据之后,就发送Packet的ACK给DFS Client,只有收到ACK的Packet才是写入成功的。
  • 步骤3:
    用户执行完写入操作后,需要关闭OutPutStream,关闭过程中,DFSClient会先把本地DataQueue中未发出去的Packet全部发送到DN,若忘记关闭,对那些已经成功缓存在DFS Client的DataQueue中,但尚未成功写入DN的数据,就没机会写入DataNode中。
  • FsDataOutputStream中的hflush和hsync的区别
    hflush成功返回,则表示DFSClient的DataQueue中所有Packet都已经成功发送到了3个DN上,但是对每个DN而言,数据仍然可能存放在操作系统的Cache上,若存在至少一个正常运行的DN,则数据不会丢失。
    hsync成功返回,则表示DFSClient DataQueue中的Packet不但成功发送到3个DN,而且每个DN上的数据都持久化到了磁盘上,这样就算所有的DN都重启,数据仍然存在。
  • 文件读取


    image.png
  • 读取流程描述
    1.1 DFSClient请求NN,获取到对应read position的Block信息(包括Block落在哪些DN上)。
    1.2 DFSClient从Block对应的DN中选择一个合适的DN,对选中的DN创建一个BlockReader以进行数据读取。
    HDFS读取流程简单,但对Hbase的读取性能影响重大,尤其是Locality和短路读这两个最为核心的因素。
  • Locality
    DN本身需要消耗的内存资源和CPU资源都非常少,主要消耗网络带宽和磁盘资源。而Hbase的RS服务本身是内存和CPU消耗型服务,于是我们把RS和DN部署在一批机器上,对DFSClient来说,一个文件在这台机器上的locality可以定义为:
    locality=该文件存储在本地机器的字节数之和/该文件总字节数
  • 短路读
    短路读是指那些Block落在和DFSClient同一台机器上的数据,可以不走TCP协议进行读取,而是直接由DFSClient向本机的DN请求对应的Block文件描述符,然后创建一个BlockReaderLocal,通过fd进行数据读取,这样就节省了走本地TCP协议栈的开销。
    测试数据表明:
    locality和短路读对Hbase的读性能影响重大,在locality=1.0情况下,不开短路读的p99性能要比开短路读差10%左右。
  • HDFS在Hbase系统中扮演的角色
    1.Hbase本身并不存储文件,它只规定文件格式以及文件内容,实际文件存储由HDFS实现。
    2.HBase不提供机制保证存储数据的高可靠性,数据的高可靠性由HDFS的多副本机制保证。
    3.HBase-HDFS体系是典型的计算存储分离架构,这种轻耦合架构的好处是,一方面可以非常方便地使用其他存储替代HDFS作为Hbase的存储方案,另一方面对于云上服务来说,计算资源和存储资源都可以独立扩容、缩容,给云上用户带来了极大便利。

2.4 HBase在HDFS中的文件布局

image.png

具体的布局情况


Hbase On HDFS.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • 1.本文说明 笔者最近一年从事维护Hbase相关工作,总结相关文章用于阐述对于Hbase的部分理解,本文知识点来源...
    阿伦_2442阅读 387评论 0 0
  • 13面试问题(2) 是否存在i+1<i的数 存在,int最大值 redis的五种数据类型是指 value的类型,k...
    saluch阅读 777评论 0 0
  • Hadoop 常见面试题 mr 工作原理 ☆☆☆☆mr 将得到的split 分配对应的 task,每个任务处理相对...
    hdn040083阅读 3,599评论 0 1
  • 一.Hadoop 1.hdfs写流程 2.hdfs读流程 3.hdfs的体系结构 4.一个datanode 宕机,...
    qydong阅读 2,324评论 0 0
  • 数据集:类型,语义,结构,组织,粒度,可访问性 公有云,私有云,混合云 云计算改变了IT架构,大数据影响业务决策,...
    八月秋风早阅读 352评论 0 0