美文网首页
09 HBase 2.3.4中对TTL等的设置

09 HBase 2.3.4中对TTL等的设置

作者: 逸章 | 来源:发表于2021-03-13 22:11 被阅读0次

写这个的内容主要是2.3.4相对于0.X而言,很多API都发生了变化,一些已经被删除,一些则使用时会有告警提示

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;

public class ColumnFamilyTTLTest
{
    private static Configuration conf;
    static
    {
        if (conf == null)
        {
            conf = HBaseConfiguration.create();
            conf.set("hbase.rootdir", "hdfs://192.168.56.56:9000/hbase");
            conf.set("hbase.zookeeper.quorum", "192.168.56.56"); // hbase 服务地址
            conf.set("hbase.zookeeper.property.clientPort", "2181"); // 2181默認就是這個值,不要修改

        }
    }

    public static void main(String[] args)
            throws IOException, InterruptedException
    {
        actHBase();
    }

    private static void actHBase() throws IOException, InterruptedException
    {
        try (Connection con = ConnectionFactory.createConnection(conf);
                Admin admin = con.getAdmin())
        {

            // 1. 创建一个测试表,并添加列族cf
            TableName tableName = TableName.valueOf("test1");//千万不能写成了test,在2.3.4中写为test的话表创建不成功,一直不返回结果,原因不明
            TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder
                    .newBuilder(tableName);
            ColumnFamilyDescriptor columnFamily = ColumnFamilyDescriptorBuilder.of("cf");
            tableDescriptorBuilder.setColumnFamily(columnFamily);
            
            admin.createTable(tableDescriptorBuilder.build());
            System.out.println("创建表并添加列族cf成功");

            // 2.为当前的表添加一个ttl的列族(默认设定时间为10秒)
            ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("ttl-cf"))
                    .setTimeToLive(10)
                    .build();
            admin.addColumnFamily(tableName, cfd);
            System.out.println("增加列簇ttl-cf,设定超时时间为10s");

            // 3.测试为当前的ttl列族添加数据
            Table table = con.getTable(tableName);
            table.put(new Put("ttl-row1".getBytes()).addColumn(
                    "ttl-cf".getBytes(), "someCol".getBytes(), Bytes.toBytes("someVal")));
            System.out.println("添加一行数据.....");

            // 4.扫描当前的表
            System.out.println("开始扫描表中数据.....");
            Scan scan = new Scan();
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner)
            {
                String value = Bytes.toString(result.getValue(Bytes.toBytes("ttl-cf"), Bytes.toBytes("someCol")));
                System.out.println("ttl-cf:someCol 值为: "+value);
            }
            scanner.close();
            // 5.等待10秒
            System.out.println("开始休眠十秒.....");
            Thread.sleep(10000L);

            // 6.再次扫描表
            System.out.println("再次扫描表.....");
            scan = new Scan();
            scanner = table.getScanner(scan);
            for(Result r: scanner)
            {
                System.out.println(r);
            }
        }
    }   
}

相关文章

网友评论

      本文标题:09 HBase 2.3.4中对TTL等的设置

      本文链接:https://www.haomeiwen.com/subject/aulfcltx.html