在存储层面节省空间的处理上,Hbase提供了两种方案,一个是基于key的编码,一个是基于数据块(data block)的压缩。前者用于将key重复部分进行简单处理达到节约空间的目的,后者则是对数据块进行压缩,实现节省硬盘。不过压缩和解压缩是影响处理性能的,都是那时间换空间;所以要权衡清楚。
关于key的编码,主要是这对于key很长而且有大量部分重复的场景,如果key大部分长得都不一样,那么编码几乎没有优势:
prefix
简单讲就是把key中和前一条记录相同的部分省略不计;然后再增加一列,记录省略的长度(相同部分的长度)
下图是原始数据

下图是编码后的数据,可以看到增加了prefix len一列,记录从第一位开始重复的位数,但是key一列的记录被简化了。
 
Diff
diff则是基于prefix基础之上模式,它直接将和上条记录一样部分省略;diff和prefix不同之处在于它认为每条记录都有一个唯一主键,所以,diff增加了两列,一列是timestamp,一列是type;这样处理好处是主键被分割后可以在压缩后有比较好的效率;默认diff是被禁用的,因为在scan的时候diff的性能比较差。
 
Fast Diff
处理机制和diff类似,不过它增加了一列flag来标志当前行是否和上一行一样,一样则不记录;Fast Diff是推荐的编码模式,尤其适用于key很长的情况;
 
Prefix Tree
提供的机制和上面类似,但是其随机读写速度很快,但是编码速度比较慢;适用于内存的命中率比较高的场景,在HBase 0.9.6版本中提出并处于试验阶段。可以在和FastDiff比较多时候,多做做测试;
 
压缩
关于压缩,压缩的使用主要是用在value字段比较大的场景,比如是图片,或者二进制流;如果只是普通的文本,那么压缩意义并不是很大,而且在解压的时候需要耗费资源来做,影响性能;
压缩的技术选择主要就是在Gzip, LZO和Snappy中选择,对于冷数据(很少被使用到)可以采用GZip,因为GZip的压缩率比较高,但是解压消耗的CPU比较多;
对于热数据主要是采用Snappy和LZO,Snappy是谷歌(2011年)推出的压缩算法,在CPU的使用和效率方面都比LZO要好,但是因为授权(许可证)的因素,hadoop的native library没有提供支持,只能是后安装在os上面之后才能够使用。
压缩的本质是HFile的压缩,HFile是物理存储hdfs中,所以压缩的本质是hdfs的压缩,压缩算法的支持本质是hdfs支持的算法。

什么是HBASE(三) HBase的压缩和编码的更多相关文章

  1. Hbase(三) hbase协处理器与二级索引

    一.协处理器—Coprocessor 1. 起源Hbase 作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执 行求和.计数.排序等操作.比如,在旧版本的(<0.92)Hb ...

  2. Apache Hadoop集群离线安装部署(三)——Hbase安装

    Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apac ...

  3. Hadoop集群(三) Hbase搭建

    前面已经完成Zookeeper和HDFS的安装,本文会详细介绍Hbase的安装步骤.以及安装过程中遇到问题的汇总. 系列文章:   Hadoop集群(一) Zookeeper搭建 Hadoop集群(二 ...

  4. 【Hbase三】Java,python操作Hbase

    Java,python操作Hbase 操作Hbase python操作Hbase 安装Thrift之前所需准备 安装Thrift 产生针对Python的Hbase的API 启动Thrift服务 执行p ...

  5. HBase学习-HBase原理

    1.系统架构 1.1 图解   从HBase的架构图上可以看出,HBase中的组件包括Client.Zookeeper.HMaster.HRegionServer.HRegion.Store.MemS ...

  6. Hbase理论&&hbase shell&&python操作hbase&&python通过mapreduce操作hbase

    一.Hbase搭建: 二.理论知识介绍: 1Hbase介绍: Hbase是分布式.面向列的开源数据库(其实准确的说是面向列族).HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hb ...

  7. 【HBase】HBase Getting Started(HBase 入门指南)

    入门指南 1. 简介 Quickstart 会让你启动和运行一个单节点单机HBase. 2. 快速启动 – 单点HBase 这部分描述单节点单机HBase的配置.一个单例拥有所有的HBase守护线程- ...

  8. HBase(五): HBase运维管理

    HBase自带的很多工具可用于管理.分析.修复和调试,这些工具一部分的入口是hbase shell 客户端,另一部分是在hbase的Jar包中. 目录: hbck hfile 数据备份与恢复 Snap ...

  9. Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

    Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...

  10. Hbase记录-Hbase基础概念

    HBase是什么? HBase是建立在Hadoop文件系统之上的分布式面向列的数据库.它是一个开源项目,是横向扩展的. HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数 ...

随机推荐

  1. 20145307陈俊达《网络对抗》Exp2 后门原理与实践

    20145307陈俊达<网络对抗>Exp2 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 非正规网站下载的软件 脚本 或者游戏中附加的第三方插件 例举你知 ...

  2. 解决方案--duilib中edit获得鼠标焦点后右边框被覆盖

    用duilib做了一个登录框,用户名的输入使用的是edit控件. XML中是这样写的: <Edit name="subdomain_edit" tipvalue=" ...

  3. Python3基础 try-except 几个异常采取同样的处理方法

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. 导入tensorflow:ImportError: libcublas.so.9.0: cannot open shared object file: No such file or director【转】

    本文转载自:https://blog.csdn.net/ksws0292756/article/details/80034086 版权声明:本文为博主原创文章,转载请一定附上博主原文链接,并署名转自Z ...

  5. autofac &web api 切换数据库

    https://stackoverflow.com/questions/24188025/is-there-another-way-of-changing-database-instance-in-a ...

  6. P4factory ReadMe 剩余部分

    Building and Running a Target Each P4 program (called a 'target') is set up in a directory under tar ...

  7. 学习gulpfile.babel.js随笔

    'use strict' import gulp from 'gulp' //将gulp插件包含进来 import sass from 'gulp-sass' //编译sass文件 import im ...

  8. QtWebKit_cookie

    1.百度搜索“qtwebkit cookie” 2. 2.1.qtwebkit 里 cookie 信息的保存 http://blog.tianya.cn/post-227188-33378112-1. ...

  9. Java Spring-事务管理概述

    2017-11-11 23:05:39 事务(Transaction):是逻辑上一组操作,要么全都成功,要么全都失败. 一.事务的特性 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 ...

  10. spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar)

    spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar) 如果使用的run as – java a ...