实验二十三 通过Java代码实现与HBase数据库连接 创建HBase表 表中写数据

通过Java代码实现与HBase数据库连接,然后用Java API创建HBase表,向创建的表中写数据,最后将表中数据读取出来并展示。
实验环境

实验目的

  1. 掌握HBase数据模型(实验23.jpg逻辑模型及物理模型);
  2. 掌握如何使用Java代码获得HBase连接,并熟练Java对HBase数据库的基本操作,进一步加深对HBase表概念的理解。

1.Xshell连接master主机
2.Jps查看是否搭建成功

[root@master ~]# jps

1320 SecondaryNameNode
1661 HMaster
2075 Jps
1091 NameNode

3.WinSCP连接master主机
进入/usr/cstor/hbase/lib目录下将所有java包复制到本地创建的lib文件夹内
4.打开eclipse新建java工程文件:hbase_wl(名字自行设定)
5.导入刚刚复制的java包
鼠标选中hbase_wl右键选择Properties

Java Build Path-->Libraries-->AddExternal JARs… 

然后选到刚刚下载到本地的lib文件夹选中所有java包点击打开点击OK

成功导入后如图所示

选中src右键新建一个class类名字为:Main(名字自行设定)

将如下类容复制到里面(注意图中这两个要一致)

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        Configuration configuration = HBaseConfiguration.create();
        Connection connection;
        configuration.set("hbase.zookeeper.quorum", "slave1:2181,slave2:2181,slave3:2181");
        configuration.set("zookeeper.znode.parent", "/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            //获得HBaseAdmin对象
            Admin admin = connection.getAdmin();
            //表名称
            String tn = "mytable";
            TableName tableName = TableName.valueOf(tn);
            //表不存在时创建表
            if (!admin.tableExists(tableName)) {
                //创建表描述对象
                HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
                //列簇1
                HColumnDescriptor columnDescriptor1 = new HColumnDescriptor("c1".getBytes());
                tableDescriptor.addFamily(columnDescriptor1);
                //列簇2
                HColumnDescriptor columnDescriptor2 = new HColumnDescriptor("c2".getBytes());
                tableDescriptor.addFamily(columnDescriptor2);
                //用HBaseAdmin对象创建表
                admin.createTable(tableDescriptor);
            }
            //关闭HBaseAdmin对象
            admin.close();
            //向表put数据,代码实现:
            //获得table接口
            Table table = connection.getTable(TableName.valueOf("mytable"));
            //添加的数据对象集合
            List<Put> putList = new ArrayList<Put>();
            //添加10行数据
            for (int i = 0; i < 10; i++) {
                //put对象(rowkey)
                String rowkey = "mykey" + i;
                Put put = new Put(rowkey.getBytes());
                //列簇 , 列名, 值
                put.addColumn("c1".getBytes(), "c1tofamily1".getBytes(), ("aaa" + i).getBytes());
                put.addColumn("c1".getBytes(), "c2tofamily1".getBytes(), ("bbb" + i).getBytes());
                put.addColumn("c2".getBytes(), "c1tofamily2".getBytes(), ("ccc" + i).getBytes());
                putList.add(put);
            }
            table.put(putList);
            table.close();
            //查询数据,代码实现:
            //获得table接口
            //Scan 对象
            Scan scan = new Scan();
            //限定rowkey查询范围
            scan.setStartRow("mykey0".getBytes());
            scan.setStopRow("mykey9".getBytes());
            //只查询c1:c1tofamily1列
            scan.addColumn("c1".getBytes(), "c1tofamily1".getBytes());
            //过滤器集合
            FilterList filterList = new FilterList();
            //查询符合条件c1:c1tofamily1==aaa7的记录
            Filter filter1 = new SingleColumnValueFilter("c1".getBytes(), "c1tofamily1".getBytes(), CompareFilter.CompareOp.EQUAL, "aaa7".getBytes());
            filterList.addFilter(filter1);
            scan.setFilter(filterList);
            ResultScanner results = table.getScanner(scan);
            for (Result result : results) {
                System.out.println("获得到rowkey:" + new String(result.getRow()));
                for (Cell cell : result.rawCells()) {                    
                    System.out.println("列簇:" +
                        Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()) + "列:" +
                        Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()) + "值:" +
                        Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
                }
            }
            results.close();
            table.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

导出java包

添加新评论

选择表情

  近期动态

近段时间可能都不怎么更新,回老家了。老家那个网。。。5G都快出来了。咋们老家还停留在3G。。唉
--- 发布日期 2019年7月30日

  关于博主

多数人都拥有自己不了解的能力和机会,都有可能做到未曾梦想的事情。

  近期评论

  •  MrLin: 已添加
  •  MrLin: 已更改
  •  MrLin: 已添加
  •  yangpanyao: 名称:杨攀遥的博客 介绍:一个php的技术博客 地址:https://www.yangpany...
  •  YOLEN: 友链:Leelon 更改为:优乐博客 链接:leelon.cn 更改为:https://yol...
  •  马丁:
  •  浪客小苏: 以添加,请尽快添加本站,谢谢。
  •  Mkre: 分布式文件系统HDFS
  •  limm: https://www.cwtseo.com/
  •  hb: 谢谢 亲。遇见你很幸运,有你这个一直不老的朋友更是我的福气。 也祝我们的友谊天长地久。 很喜欢...

生命要得到丰盛的收获,必需阳光;同时,也需要“雨”的浇灌。

人生应该树立目标,否则你的精力会白白浪费。

山涧的泉水经过一路曲折,才唱出一支美妙的歌。

如若不是为了一个人,谁肯枯守一座城。城市和爱情,总是有着这样那样的关系。我们会因为一个人,去到那座城,因为那是一座爱的城;我们也会因为一个人,离开一座城,那是一座绝望的伤城。

常求有利别人,不求有利自己。