之前学习了HBase中对表的创建查看删除操作,现在进一步学习对表里面的数据进行操作。首先是增删改,码上一段代码:
package com.yc.hadoop.hbase;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
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.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
public class HbaseAPI03 {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "slave01,slave02,slave03");
ExecutorService pool = Executors.newCachedThreadPool();
Connection con = ConnectionFactory.createConnection(conf, pool);
Admin admin = con.getAdmin(); //管理者
TableName tn = TableName.valueOf("student"); //表对象
if(admin.tableExists(tn)){
Table t = con.getTable(tn,pool);
//添加数据
Put put = new Put(Bytes.toBytes("gr")); //根据rowkey(行键)值创建添加数据对象
put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("gr")).
addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes("21")).
addColumn(Bytes.toBytes("info"), Bytes.toBytes("sex"), Bytes.toBytes("女")).
addColumn(Bytes.toBytes("info"), Bytes.toBytes("tel"), Bytes.toBytes("12345678901"));
t.put(put); //写入数据是put
System.out.println("添加数据成功。。。。");
//修改数据
//修改与添加操作一样,区别是有数据(由rowkey,columnfamily,qualifier确定是否是有数据)时,
//再重复添加是修改
put = new Put(Bytes.toBytes("gr")).
addColumn(Bytes.toBytes("info"), Bytes.toBytes("tel"), Bytes.toBytes("12345678911"));
t.put(put); //修改数据可以看做是添加了数据
System.out.println("修改数据成功。。。。");
//删除数据
//根据rowkey值,创建删除数据对象
Delete del = new Delete(Bytes.toBytes("gr"));
del.addColumn(Bytes.toBytes("info"), Bytes.toBytes("tel"));
t.delete(del);
System.out.println("删除数据成功。。。。");
}
admin.close();
con.close();
pool.shutdown();
}
}
这里 是简单的插入数据、修改数据、以及删除数据。我们可以看到当插入数据时结果为:
我们修改tel之后的结果:
我们将tel修改之后,再删除这条数据,查看结果:
我们发现之前我们修改的数据不见了,变成了最开始插入的数据,这就是我们之前说的hbase是有多版本的,它可以在同一位置存放不同数据,而且我们删除并不是真的将数据删除了,而是将这条数据标记删除了。且从代码可以看出,我们的修改其实就是添加。
以上是对表的简单的增删改。接下来就是查:
package com.yc.hadoop.hbase;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
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.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Result;
import org