集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

业界新闻

当前位置:首页 > >业界新闻 > >

大数据培训_W HBase 高级用法之行健设计

发布时间: 2019-05-30 14:30:04

  大数据培训_W HBase 高级用法之行健设计

  1.热点问题
  写入要分散,减少region的热点问题。
  例如: 历史交易订单,一般生成的订单号都是通过时间戳+随机的4位数字组成,可以让订单号倒序。这样rowkey是订单号的倒序存储,减少集中存储到某个region。
  例如:用户上网流量存储到Hbase,一般是让手机号作为hbase的rowkey。由于手机号的后四位是随机的。可以让手机号倒序排序作为hbase的rowkey。
  思考问题:
  直接将时间戳作为行健, 在写入单个 region 时候会发生热点问题,为什么?
  回答: 直接使用时间戳会引发单个region的热点问题。
  HBase的rowkey在底层是HFile存储数据的,以<K,V>键值对存放到SortedMap中。并且region中的rowkey是有序存储,若时间比较集中。就会存储到一个region中,这样一个region的数据变多,其它的region数据很好,加载数据就会很慢。直到region分裂可以解决。
  2.行健设计
  在HBase中有两类基本的键结构:行健和列键
  这两者都存储着有意义的信息,不仅仅是该键对应的值:
  列键:包括了列族名和限定符,定位到列的索引
  行健:相当于关系型数据库中的主键,通过行健得到逻辑布局中一行的所有列
  逻辑上用户设置的每一行都没放在一起,但是实际存储的时候每个列族的以单独的文件存储的,不同列族的单元格绝对不会出现在同一个StoreFile中。同时,HBase也不会存储值为空的单元格,所以磁盘上的文件也只有这些有值的单元格。
  每个单元格在实际存储的时候也保存了行健和列键,所以每个单元格都单独存储了它在表中所处位置的关键信息。
  同一个单元格的不同版本被单独存储为连续的单元格,单元格按照时间戳降序排列,所以默认读取的是最新的单元格数据。
  同一列族的单元格在存储的时候先按行健排序,当一行中有多个单元格的时候再按列键排序,同一单元格有多个版本的时候按时间戳排序
  根据以上的存储特性,建议在查询的时候指定列族信息可以有效减少查询的存储文件,提高效率
  3.行键设计的关键要点
  (1)存储方式:磁盘上一个列族下所有的单元格都存储在一个存储文件(store file)中,不同列族的单元格不会出现在同一个存储文件中。
  (2)NULL 不会存储在HBase表中。
  (3)每个单元格在实际存储时也保存了行健和列键,即单独存储了它在表中所处位置的相关信息。
  (4)同一个单元格的多个版本被单独存储为连续的单元格,单元格按照时间戳降序排列。故在HFile读取时候,最新的值先被读到。
  (5)单元格的KeyValue内容:行健、列族、列限定符、时间戳、值。KeyValue存储先按照行健排序,再按列键排序。
  (6)对于KeyValue,筛选的效率从左到右变差:行健、列族、列限定符、时间戳、值。故而尽量将重要的筛选信息左移。

上一篇: Java培训_Java NIO的缓冲区介绍

下一篇: Python培训_Python开发环境搭建

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!