第9章 HBase操作 (3)

(2)右键运行main函数,输出create table success!!信息,则说明创建成功。
(3)在HBase集群的centos01节点上,输入hbase shell进入Shell命令行模式,然后输入list命令查看当前HBase中的所有表,效果如下:

hbase(main):007:0> list TABLE t1

从输出结果中我们可以看到,表t1已创建成功。

9.3.3 添加数据

(1)在maven项目hbasedemo中新建Java类HBasePutData.java,在main函数中写入添加三条数据的代码,如下:

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; 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.Table; import org.apache.hadoop.hbase.util.Bytes; public class HBasePutData{ public static void main(String[] args) throws Exception { //创建Hadoop配置对象 Configuration conf=HBaseConfiguration.create(); //指定ZooKeeper集群地址 conf.set("hbase.zookeeper.quorum", "192.168.170.128:2181,192.168.170.129:2181,192.168.170.130:2181"); //创建数据库连接对象Connection Connection conn=ConnectionFactory.createConnection(conf); //Table负责与记录相关的操作,如增删改查等 TableName tableName=TableName.valueOf("t1"); Table table=conn.getTable(tableName); Put put = new Put(Bytes.toBytes("row1"));// 设置rowkey //添加列数据,指定列族、列名与列值 put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("xiaoming")); put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("20")); put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("beijing")); Put put2 = new Put(Bytes.toBytes("row2"));// 设置rowkey //添加列数据,指定列族、列名与列值 put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("xiaoming2")); put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("22")); put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("beijing2")); Put put3 = new Put(Bytes.toBytes("row3"));// 设置rowkey //添加列数据,指定列族、列名与列值 put3.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("25")); put3.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("beijing3")); //执行添加数据 table.put(put); table.put(put2); table.put(put3); //释放资源 table.close(); System.out.println("put data success!!"); } }

上方代码中,新建了三个Put对象,每个Put对象包含需要添加的一条数据。
(2)右键运行main函数,输出put data success!!信息,则说明数据添加成功。
(3)在HBase集群的centos01节点上,输入hbase shell进入Shell命令行模式,然后输入scan 't1'命令扫描表t1中的数据,结果如下:

hbase(main):017:0> scan 't1' ROW COLUMN+CELL row1 column=f1:address, timestamp=1514533573439, value=beijing row1 column=f1:age, timestamp=1514533573439, value=20 row1 column=f1:name, timestamp=1514533573439, value=xiaoming row2 column=f1:address, timestamp=1514533573514, value=beijing2 row2 column=f1:age, timestamp=1514533573514, value=22 row2 column=f1:name, timestamp=1514533573514, value=xiaoming2 row3 column=f1:address, timestamp=1514533573524, value=beijing3 row3 column=f1:age, timestamp=1514533573524, value=25 3 row(s) in 0.3930 seconds

从输出结果中我们可以看到,表t1成功添加了三条数据,rowkey分别为row1、row2和row3,同属于列族f1,row1有三个字段address、age、name,row2有三个字段address、age、name,row3有两个字段address、age。

9.3.4 查询数据

在maven项目hbasedemo中新建Java类HBaseGetData.java,在main函数中写入查询数据的代码。例如,查询表t1中行键为row1的一整条数据,代码如下:

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.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Table; /**根据rowkey查询一条数据,实测成功,直接右键运行即可**/ public class HBaseGetData{ public static void main(String[] args) throws Exception { //创建Hadoop配置对象 Configuration conf=HBaseConfiguration.create(); //指定ZooKeeper集群地址 conf.set("hbase.zookeeper.quorum", "192.168.170.128:2181,192.168.170.129:2181,192.168.170.130:2181"); //获得数据库连接 Connection conn=ConnectionFactory.createConnection(conf); //获取Table对象,指定查询表名,Table负责与记录相关的操作,如增删改查等 Table table = conn.getTable(TableName.valueOf("t1")); //创建Get对象,根据rowkey查询,rowkey=row1 Get get = new Get("row1".getBytes()); //查询数据,取得结果集 Result r = table.get(get); //循环输出每个单元格的数据 for (Cell cell : r.rawCells()) { //取得当前单元格所属的列族名称 String family=new String(CellUtil.cloneFamily(cell)); //取得当前单元格所属的列名称 String qualifier=new String(CellUtil.cloneQualifier(cell)); //取得当前单元格的列值 String value=new String(CellUtil.cloneValue(cell)); //输出结果 System.out.println("列:" + family+":"+qualifier + "—————值:" + value); } } }

右键运行main函数,控制台输出结果为:

列:f1:address—————值:beijing 列:f1:age—————值:20 列:f1:name—————值:xiaoming

与t1表中实际数据一致,则查询成功。

9.3.5 删除数据

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyfzf.html