HBase 权威指南笔记

HBase 权威指南笔记

hadoop

  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml
  • yarn-site.xml
$ ./sbin/start-dfs.sh
$ ./sbin/stop-dfs.sh

hbase

  • hbase-site.xml
$ ./bin/start-hbase.sh
$ ./bin/hbase shell
$ ./bin/stop-hbase.sh
  • scan
    • scan withStartRow withEndRow 的参数类型与 ID 必须一致
  • 缓存是面向行的操作,批量是面向列的操作
    • RPC 个数=(行数*每行列数)/min(每行列数,批量大小)/缓存大小+1次打开scan+1次关闭scan
  • filter 作用与 Get、Scan setFilter 185页
    • 谓词下推
    • 比较器
      • BinaryComparator
      • BinaryPrefixComparator
      • NullComparator
      • BitComparator 只能是 EQUAL NOT_EQUAL
      • RegexStringComparator 只能是 EQUAL NOT_EQUAL
      • SubstringComparator 只能是 EQUAL NOT_EQUAL
    • 过滤器
      • RowFilter 行键 ID 过滤器
      • FamilyFilter 列族名过滤器
      • ValueFilter 值过滤器,但是不能指定某列,只会返回匹配到列值
      • QualifierFilter 列名过滤器
      • DependentColumnFilter 参与列过滤器,某列值相等后按时间戳查找合并其它列,某个列必须大于小于等于某个值
    • 专用过滤器
      • SingleColumnValueFilter 值过滤,默认会返回每匹配的
      • SingleColumnValueExcludeFilter 单列排除过滤器,默认会返回每匹配的,参考列不会包括到结果中,只有这个不支持 setBatch,如果加入 FilterList 则 FilterList 不支持 setfBatch
      • PrefixFilter 前缀过滤器
      • PageFilter 分页过滤器
      • KeyOnlyFilter 行键过滤器,有参数设置值返回列名不返回值
      • FirstKeyOnlyFilter 首次行键过滤器,访问一行中第一列
      • IncludsiveStopFilter 包含结束到过滤器
      • TimestampsFilter 时间戳过滤器,具体时间列表或时间范围
      • ColumnCountGetFilter 列计数过滤器,超过列数就停止扫描,不适合 scan 适合 get
      • ColumnPaginationFilter 列分页过滤器,对列而不是行
      • ColumnPrefixFilter 列前缀过滤器
      • RandomRowFilter 随机行过滤器,指定种子产生随机数过滤
    • 附加过滤器
      • SkipFilter 跳转过滤器,如果匹配列值,则忽略该行数据
      • WhileMatchFilter 全匹配过滤器,如果发现匹配,就直接返回结果并停止扫描
    • FilterList 默认 and,可以往 FilterList 添加 FilterList 实现括号功能,添加顺序会影响执行效率
    • 自定义过滤器
      • 实现 Filter 或继承 FilterBase
  • 计数器:读取并修改,原子操作
    • 初始值 0,类型必须是 long
  • 协处理器
    • observer 可以实现 HBase DML DDL DCL DQL 监控
      • RegionObserver
      • MasterObserver
      • WALObserver
    • endpoint 可以实现在直接在每个 Region 计算,而后返回每个结果给客户端由客户端归并结果,减少数据传输
    • 可以被链接起来,就像过滤器
    • 分为 SYSTEM(高)和 USER(低),可以有序号
  • HTablePool
  • 删除表、修改表结构需要先禁用表
    • enable 启用
    • disable 禁用
    • avaliable 物理状态的可用
  • 存储
    • 同一个列族的数据存在同一个文件
    • 最新的数据会最先读取到
    • 先按行键升序存储
    • 再按列键升序存储
    • 最后按时间降序存储
    • 不存 null 的数据
    • 通过时间戳查询会很快,但是通过特定列或值查询则性能一般
    • 查询性能:行键 > 列族 > 列限定符键 > 时间戳键 > 值
    • HBase 只能按行分片,高表更有优势
    • 高表(空列限定符键)、宽表
      • 高表的数据键左移,查询性能更好
      • 宽表的数据键右移,查询性能一般
    • 高表一行记录分多行,宽表一行记录仍然是一行,所以高表不能保证原子性
    • 解决某个热点数据导致集群数据分布不均的方法之一:(这里前缀和集群 Region 数匹配)Long.hashCode(Time)+"-"+Time(这样可以防止某天数据过多都落在同一个 Region)
    • HBase 只保证行级原子性
    • 辅助索引不能保证数据添加的原子性,但是可以先添加辅助索引,再添加数据,如果数据失败,可以通过定时任务(或 HBASE 支持的 MapReduce)删除辅助索引
    • 降序索引需要反转存储,如:Long.MAX_VALUE - Time
    • 布隆过滤器
      • 如果根据行键扫描,使用行加列级的布隆过滤器没有任何帮助
      • 反之如果是根据行加列的读操作,则使用行级的布隆过滤器可以减少需要检查的文件数量
      • 如果一行记录在所有文件中都有分布,行加列级布隆过滤器很有用,但是如果每次查询修改都包含整行记录,这个过滤器仍然很难起到作用
      • 行级比行加列级布隆过滤器占用空间小
      • 布隆过滤器可容纳元素数量有一个最大值
      • 尽量使用行级布隆过滤器
      • 单元格如果较小可以不使用布隆过滤器
    • 版本控制
      • 可以指定版本,也可以由 HBase 服务器隐式指定,但要注意 HBase 服务器之间的时间同步问题
      • 如果设置服务器只保存最新的 3 个版本数据,则插入 6 条数据,再删除最新的 2 条,可能第2、3条数据仍存在,因为 HBase 可能延后删除老数据(只会出现在 Major 合并被执行之前)(要避免的话用户可以删除后立即强制执行 Major 合并)
      • 用户可以不使用时间戳,而是自定义一个单调递增的数字(不能是负数),但这样必须每次 put 都必须指定这个数据作为版本,否则服务器会使用时间戳
  • 优化
    • master 通常不会出现垃圾回收问题,因为 master 没处理过重的负载,并且实际的数据服务并不经过它
    • HBase_OPTS JVM 参数针对:master + region
    • HBase_RegionServer_OPTS JVM 参数针对:region
    • region 如果垃圾回收停顿时间过长,master 会认为其不可用,会抛弃之,此时 region 垃圾回收后发现自己被抛弃会自行关闭
    • 压缩
      • CPU 压缩、解压时间比磁盘读、写能耗费更短时间
      • 定义列族时可以指定压缩算法
    • region 可分割、合并、移动、压缩
    • 批量操作 setAutoFlush(false) flushCommits()
    • 垃圾回收时间要比 zk 会话超时时间短
    • 推荐 region 使用压缩
    • 自带了性能测试,第一次安装时建议测试一下
    • HBase 默认日志为 debug 级别
    • 故障处理 hbck
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值