精华内容
下载资源
问答
  • hbase 设置TTL释放空间

    千次阅读 2017-02-08 19:39:29
    关于这个问题,经过查找,设置ttl是必须的alter "test", "value" xxxx major_compact # 大合并但是上面的操作虽然可以hdfs dfs -u /hbase/data/default/但是,物理空间的磁盘空间还是得不到释放参考以下:...

    关于这个问题,经过查找,设置ttl是必须的

    alter "test", "value" xxxx
    major_compact # 大合并

    但是上面的操作虽然可以

    hdfs dfs -u /hbase/data/default/

    但是,物理空间的磁盘空间还是得不到释放

    参考以下:

    http://grokbase.com/t/hbase/user/143kabfd8f/after-drop-big-hbase-table-how-can-i-retrieve-disk-space-immediately
    http://stackoverflow.com/questions/11840255/hbase-hadoop-dfs-size-not-decreased-even-after-deleting-a-column-family
    https://community.cloudera.com/t5/Cloudera-Manager-Installation/Deleting-files-does-not-clear-disk-space/td-p/8536
    http://community.cloudera.com/t5/Storage-Random-Access-HDFS/Duplicated-blocks-get-orphaned/m-p/12134
    http://serverfault.com/questions/649309/hbase-space-used-started-climbing-rapidly
    https://strongyoung.gitbooks.io/hbase-reference-guide/content/

    也许在

    /hbase/archive/data/default/tablename

    下面有snapshort还是啥,反正是没有释放,网上说这些使用来recovery数据用的。

    这里写图片描述

    也许我们可以删除,用来释放空间。

    这里写图片描述

    设置compact时间为一个小时,明天再继续观察。

    展开全文
  • ColumnFamilies可以以秒为单位来设置 TTL(Time To Live)长度,一旦达到到期时间HBase 将自动删除行。 设置 hbase.store.delete.expired.storefile 为 false 将禁用此功能。将最小版本数设置为 0 以外的值也会...

    Hbase关于TTL

    • ColumnFamilies可以以秒为单位来设置 TTLTime To Live)长度,一旦达到到期时间,HBase 将自动删除行。
    • 设置 hbase.store.delete.expired.storefilefalse 将禁用此功能。将最小版本数设置为 0 以外的值也会禁用此功能。
    • 也支持设置时间以每个单元为基础生存。单元TTL 是使用突变 setTTL 作为突变请求(例如:AppendsIncrementsPuts)的属性提交的.
    • 单元 TTL 以毫秒为单位而不是秒;
    • 单元 TTL 不能将一个单元的有效生命周期延长超过 ColumnFamilyTTL 设置.

    设置TTL

    1. 创建表的时候指定
    create 't_task_log',{NAME => 'cf', TTL=>'86400'}
    
    1. 查看TTL
    desc "t_task_log"
    -- 默认: TTL => 'FOREVER'
    
    1. 修改TTL
    -- 禁用表
    disable "t_task_log"
    -- 设置TTL值,作用于列族cf
    alter "t_task_log",NAME=>'cf',TTL=>'86400'
    -- 恢复表
    enable  "t_task_log"
    

    高版本hbase可以不需要先禁用表,可直接在线修改TTL.

    1. 编码设置列族TTL
    // 1. 创建一个测试表,并添加列族cf
    TableName tableName = TableName.valueOf("test");
    TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)
            .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder("cf".getBytes()).build())
            .build();
    
    admin.createTable(tableDescriptor);
    System.out.println("创建表并添加列族cf成功");
    
    // 2.为当前的表添加一个ttl的列族(默认设定时间为10秒)
    ColumnFamilyDescriptor cfDesc = ColumnFamilyDescriptorBuilder.newBuilder("ttl-cf".getBytes()).setTimeToLive(10)
            .build();
    admin.addColumnFamily(tableName, cfDesc);
    System.out.println("为表添加一个具有TTL的列族ttl-cf,设定超时时间为10s");
    
    1. 编码设置单元TTL
    Put put = new Put(Bytes.toBytes("row1"));
    put.setTTL(86400L);
    

    怎么重置TTL为FOREVER

    -- HBase TTL 最大值为INT最大值 2147483647,只需将TTL设为该整数即可
    alter 'test',{NAME => 'cf',TTL => '2147483647'}
    

    参考链接

    • https://www.cnblogs.com/zpb2016/p/12649831.html
    • https://blog.csdn.net/weixin_45492007/article/details/106804808
    • https://www.w3cschool.cn/hbase_doc/hbase_doc-x41d2mmo.html
    展开全文
  • HbaseTTL

    2019-11-26 21:49:47
    Hbase之TTLHbase之TTL(Time To Live)1. 前言2. 创建表emp进行测试3. 总结 HbaseTTL(Time To Live) 1. 前言 今天刚刚接触了Hbase一些知识,对其中的TTL(Time To Live),有些概念理解不是很清楚,也看了官网的...

    Hbase之TTL(Time To Live)

    1. 前言
    今天刚刚接触了Hbase一些知识,对其中的TTL(Time To Live),有些概念理解不是很清楚,也看了官网的一些英文解释,觉得解释的不是很好理解,这篇博客仅仅记录自己对TTL的理解以及做的一个小测试
    
    2. 创建表emp进行测试

    进入hbase shell

    hbase(main):001:0> create 'default:emp', 'base_info'
    
    # 设置版本数量为180个,设置存活时间为120秒,即2分钟
    hbase(main):002:0> alter 'default:emp', VERSIONS => 180, TTL => '120'
    

    在这里插入图片描述

    每隔10秒向表中插入一条数据

    hbase(main):003:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan'
    hbase(main):004:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan1'
    hbase(main):005:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan2'
    hbase(main):006:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan3'
    hbase(main):007:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan4'
    hbase(main):008:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan5'
    hbase(main):009:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan6'
    

    在这里插入图片描述

    此时表中已经有了7条数据

    使用scan命令查看,每次查看20个version的数据

    hbase(main):010:0> scan 'default:emp', VERSIONS => 20
    

    等到第一条数据被删除时,立马重新插入一条

    这里最好插入value值不同的一个,当然相同也可以,为了保证时间的准确,我插入了和上一条一样的zhangsan6

    hbase(main):011:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan6'
    

    之后查看现在所存在的版本信息

    hbase(main):012:0> scan 'default:emp', VERSIONS => 20
    

    在这里插入图片描述

    通过以上两张图片,大家可以看到插入第一条zhangsan的时间戳,也就是版本号为1574772998970
    插入最后一条zhangsan6的数据的版本号为1574773120727
    这两个数据的差值为:121757
    
    这个是以实践戳最为版本号,所以单位都是毫秒,两个时间戳相差121757毫秒
    我们设置的TTL为120秒,也就是120000毫秒,和121757相差1757毫秒,因为插入操作需要时间,也在时间的允许范围之类
    

    再看一张图片,因为我们每隔10秒插入一条数据,当zhangsan2被删除时,也同样插入一条数据

    在这里插入图片描述

    此时插入的第一行的zhangsan6的版本号为1574773142866,上一次插入zhangsan6的版本号1574773120727
    两个版本相差时间为22139,大约为220秒,因为我们在zhangsan1被删除的时候并没有插入数据,也就是说等zhangsan2被删除的时候,相比于第一次zhangsan被删除的时间已经过去了20秒,两个时间相加大概240秒,刚刚是2个TTL的时长
    
    3. 总结
    通过这个简单的实验,可以看出来,TTL的存活时间是针对于每一个版本来说的,因为默认每一个版本都是以当前的时间戳作为版本号,也就是说当某个版本插入时,从它的版本号开始算起,在TTL的过期时间到达时,这个版本就会被删除,而不是删除这一行的数据
    
    TTL是针对于某一行数据的某一个版本而言的,当到达过期时间时,会删除这一个版本,而并非删除这一行
    
    展开全文
  • HbaseTTL字段超时设置测试

    在工作中,很多时候需要对表字段进行限定,例如限定一列的超时时间等。

    今天就总结一下:

    1. 做Hbase表做更改前,首先要disable 这个表,否则记录会丢失。

    首先,我们建立一个测试表test,有一个列簇fa

    hbase(main):111:0> describe 'test'
    DESCRIPTION                                                       ENABLED                           
     'test', {NAME => 'fa', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTE true                              
     R => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSI                                   
     ON => 'NONE', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DELETED_CE                                   
     LLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOC                                   
     KCACHE => 'true'}                                                                                  
    1 row(s) in 0.0770 seconds

    表默认的TTL超时时间为:TTL => '2147483647'  大约596523.2352777778小时=24855.13天=69.04年

    也就是说从最后一次更新的记录应该69.04年才会自动失效。

    那么对于某些列,我存储一段时间后,需要该列值失效。那如何设置?下面我们做一个测试:

    我们先向test表中插入一下记录:

    1           2014-11-11 14:09:40

    2           2014-11-12 14:09:40

    3           2014-11-13 14:09:40

    4           2014-11-14 14:09:40

    5           2014-11-15 14:09:40


    hbase(main):082:0> put 'test',1,'fa:uptime','2014-11-11 14:09:40'

    。。。。。。。。。。。。。

    hbase(main):123:0>  scan 'test'
    ROW                        COLUMN+CELL                                                              
     1                         column=fa:uptime, timestamp=1415688066815, value=2014-11-11 14:09:40     
     2                         column=fa:uptime, timestamp=1415688082648, value=2014-11-12 14:09:40     
     3                         column=fa:uptime, timestamp=1415688092101, value=2014-11-13 14:09:40     
     4                         column=fa:uptime, timestamp=1415688101473, value=2014-11-14 14:09:40     
     5                         column=fa:uptime, timestamp=1415688115318, value=2014-11-15 14:09:40     
    5 row(s) in 0.0400 seconds

    我们修改过期时间为200s 查看记录

    hbase(main):126:0> disable 'test'           //修改表前,需要先disable 表

    hbase(main):114:0> alter "test",NAME=>'fa',TTL=>'200'  //修改表的列簇超时时间为200s

    hbase(main):114:0> enable  "test"          //使表可用,以供查询

    hbase(main):129:0>  scan 'test'           //此时查询时,表中原来的5条,记录均存在,接下来我们更新其中一条。再查看。
    ROW                        COLUMN+CELL                                                              
     1                         column=fa:uptime, timestamp=1415688066815, value=2014-11-11 14:09:40     
     2                         column=fa:uptime, timestamp=1415688082648, value=2014-11-12 14:09:40     
     3                         column=fa:uptime, timestamp=1415688092101, value=2014-11-13 14:09:40     
     4                         column=fa:uptime, timestamp=1415688101473, value=2014-11-14 14:09:40     
     5                         column=fa:uptime, timestamp=1415688115318, value=2014-11-15 14:09:40     
    5 row(s) in 0.0420 seconds

    由于200s时间很短,我们选择跟新第三条记录:跟新为:3           2014-11-16 14:09:40

    hbase(main):130:0> put 'test',3,'fa:uptime','2014-11-16 14:09:40'
    0 row(s) in 0.0200 seconds

    更新后再去查看,发现表中的记录只剩下一条了:也就是我们最后跟新的这条。为什么后面的会消失呢,是因为,变测试变写博客,200s时间稍短,更新第三条,记录后,写过博客再去查看,此时就连第5条记录也过期了。
    hbase(main):131:0> scan 'test'
    ROW                        COLUMN+CELL                                                              
     3                         column=fa:uptime, timestamp=1415688323548, value=2014-11-16 14:09:40     
    1 row(s) in 0.0140 seconds

    再过200后查看,表中的记录数为空,所有的记录都超时,被删除。

    总结:测试说明,我们可用对hbase的某些列簇,做一些高级设置,例如超时,压索,等设置。注意在设置之前需要先disable表,否则,表中记录会被清空。

     另外,TTL=>的更新超时时间是指:该列最后更新的时间,到超时时间的限制,而不是第一次创建,到超时时间。

    展开全文
  • 设置HBaseTTL

    2014-06-10 16:48:09
    建表时可以设置TTL过期时间:create 'tableName',{NAME=>'cf',TTL=>超时时间秒为单位}   后期修改 首先停表:disable 'tableName' 然后修改TTL失效时间:alter 'tableName',NAME => 'cf',...
  • HBaseTTL介绍

    2017-09-21 14:39:00
    1. 定义 TTL(Time to Live) 用于限定数据的超时时间。 2.原理 以Column Family的TTL为例介绍, hbase(main):001:0> desc 'wxy:test' Table wxy:test is ENABLED ...
  • 缘起Pinpoint接入业务监控后数据量大涨,平均每天Hbase数据增量20G左右,数据量太大,需要对数据进行定期清理,否则监控可用性降低,由于之前环境是由docker-compose部署,查到hbase可以修改表的ttl来清理数据,目前...
  • 我们发现用opentsdb向hbase写数据之后,磁盘占用率飙升得很快,我们存的业务数据只用保存一个月的即可,了解hbaseTTL机制可以清除相关表、相关行的超时数据,之前在数据备份时,我介绍了,opentsdb在hbase里面存储...
  • HBase 修改 TTL 属性以释放空间

    千次阅读 2018-09-13 11:07:19
    ColumnFamilies can set a TTL length in seconds, and HBase will automatically delete rows once the expiration time is reached. This applies to all versions of a row - even the ...
  • hbase java创建表时设置TTL

    千次阅读 2020-01-15 14:15:25
    ColumnFamilies 可以以秒为单位来设置 TTL(Time To Live)长度,一旦达到到期时间HBase 将自动删除行。 设置 hbase.store.delete.expired.storefile 为 false 将禁用此功能。将最小版本数设置为 0 以外的值也会...
  • hbase生存期TTL设置

    万次阅读 2018-07-20 18:00:10
    TTL是作用于列族的,它设置了一个基于时间戳的临界值, 内部的管理会自动检查TTL值是否达到上限,在major合并过程中时间戳被判定为超过TTL的数据会被自动删除。 TTL参数的单位是秒,默认值是Integer.MAX_VALUE,即2...
  • HBase生存时间TTL

    千次阅读 2019-04-16 10:07:31
    生存时间(TTL) ColumnFamilies 可以以秒为单位来设置 TTL(Time To Live)长度,...在该 HBase行的中编码的TTL时间以UTC指定。 仅在小型压缩时删除包含过期行的存储文件。设置 hbase.store.delete.expired.storefi...
  • HBASE 生存期 TTL

    2020-01-06 09:09:02
    大家都知道hbase有个version版本号,所谓的version其实就是同一条数据插入不同的时间戳来实现的,在hbase底层的存储是基于时间戳排序的,所以每次我们查到的数据都是最新的版本,除非我们指定了要读取特定的时间范围...
  • HBase中的TTL应用

    千次阅读 2015-10-10 14:25:16
    HBase中每个数据存储在一个CELL中,HBase可以设置每个CELL保存的最大version数,还可以设置version保存的最大时间TTL(Time To Live), 生存期(TTL)设置了一个基于时间戳的临界值,内部的管理会自动检查TTL值是否...
  • 二、Hbase TTL设置的两种方式:  1)ColumnFamily TTL  2) Cell TTL 三、ColumnFamily TTL详解  create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 30, BLOCKCACHE => true},{...
  • 今日有朋友加好友与我探讨一些问题,我觉得这些问题倒挺有价值的;于是就想在本公众号开设一个问答专栏,方便技术交流与分享,专栏名就定...如果我用Spark处理文件写进HBase,文件按日期每天增量下发,如果只想在HB...
  • 修改hbase表的ttl

    2019-07-29 10:01:00
    hbase(main):002:0> describe 'TraceV2'Table TraceV2 is ENABLED ...
  • 如果HBase中的表设置了TTL的时候,MinVersion才会起作用。 a)MIN_VERSION > 0时: Cell至少有MIN_VERSION个最新版本会保留下来。...Cell中的数据超过TTL时间时,全部清空,不保留最低版本。 ...
  • 其中印象比较深刻的还是Hbase的磁盘一直满,然后清理用的TTL设置,需求就是需要自动删除n天前的hbase数据,比起写代码定时删除来说还是用自带的TTL(Time To Live)比较方便一些,为此也是做了很多实验以及发现了...
  • HBase数据库使用TTL清理过期数据

    千次阅读 2018-06-14 14:57:42
    18年1月17日公司的HBase数据库上线了,这个项目做了很拖拉,17年8月份就开始调研做设计,9月份开始弄,后面又慢慢地将应用接入HBase数据库。大数据对我来说是个新东西,要学新的知识,这个年纪都...
  • ColumnFamilies can set a TTL length in seconds, and HBase will automatically delete rows once the expiration time is reached. This applies to all versions of a row - even the current on

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,410
精华内容 2,164
关键字:

hbase设置ttl时间