写这个的内容主要是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);
}
}
}
}
网友评论