通过java API来操作Hbae

该博客介绍了Hbase的使用,包括准备三台安装hadoop、zookeeper、Hbase集群的虚拟机,启动Hadoop、zookeeper和Hbase集群的命令,以及使用Java实现Hbase创建表、添加数据、查看记录、删除数据和数字累加等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工具

  1. 三台安装了hadoop集群,zookeeper,Hbase集群的虚拟机

启动Hbase

  1. 启动Hadoop集群
    start-all.sh

  2. 启动zookeeper
    zkServer.sh start

  3. 启动Hbase集群
    start-hbase.sh
    主节点:
    在这里插入图片描述
    一、NameNode:Hdfs的管理者
    二、QuorumPeerMain:zkServer
    三、ResourceManager:yarn管理者
    四、HMaster:Hbase的管理者
    副节点:
    在这里插入图片描述
    一、DataNode:Hdfs的工作者
    二、QuorumPeerMain:zkServer
    三、DataNode:Hdfs的工作者
    如果启动失败,使用以下命令查看错误日志:

    tail -100f /home/hadoop/apps/hadoop/hadoop-2.7.3/logs/hadoop-root-namenode-Centos161.log
    

java操作

使用java实现Hbase创建表的功能

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
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;
	public void createTable() throws IOException {
        //获取配置对象
        Configuration entries = HBaseConfiguration.create();
        //配置连接地址
        entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
        //连接Hbase
        Connection connection = ConnectionFactory.createConnection(entries);
        //获取表的管理对象
        Admin admin = connection.getAdmin();
        //创建表对象
        HTableDescriptor student = new HTableDescriptor(TableName.valueOf("student"));
        //创建一个列族对象
        HColumnDescriptor a1 = new HColumnDescriptor("a1");
        HColumnDescriptor a2 = new HColumnDescriptor("a2");
        //把列族发放到表中
        student.addFamily(a1);
        student.addFamily(a2);
        //创建表
        admin.createTable(student);
        //关流
        admin.close();
        connection.close();
    }

配置连接地址根据如下所示:
在这里插入图片描述
在主机hosts文件上需要配置主机名与ip的映射
运行结果:
在这里插入图片描述

使用java实现Hbase向表中添加数据和查看所有数据的功能

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
  	/**
     * 向表中添加数据
     * shell =======> put '表名','键值','列族:列名','值'
     */
    @Test
    public void addInformation() throws IOException {
        Configuration entries = HBaseConfiguration.create();
        entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
        Connection connection = ConnectionFactory.createConnection(entries);
        //获取Hbase中指定的表
        Table student = connection.getTable(TableName.valueOf("student"));
        //指定输入对象的键值
        Put put = new Put("01".getBytes());
        put.addColumn("a1".getBytes(),"name".getBytes(), Bytes.toBytes("张三"));
        put.addColumn("a1".getBytes(),"age".getBytes(),"23".getBytes());
        put.addColumn("a2".getBytes(),"name".getBytes(),Bytes.toBytes("李四"));
        put.addColumn("a2".getBytes(),"age".getBytes(),"24".getBytes());
        //添加数据
        student.put(put);
        //关闭资源
        connection.close();
    }
     /**
     * 查看表中所有数据
     * shell =======> scan '表名'
     */
    @Test
    public void scanInformation() throws IOException {
        Configuration entries = HBaseConfiguration.create();
        entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
        Connection connection = ConnectionFactory.createConnection(entries);
        Table student = connection.getTable(TableName.valueOf("student"));
        Scan scan = new Scan();
        ResultScanner scanner = student.getScanner(scan);
        for (Result result:scanner
             ) {
            String name = Bytes.toString(result.getValue("a1".getBytes(), "name".getBytes()));
            String age = Bytes.toString(result.getValue("a1".getBytes(), "age".getBytes()));
            System.out.println(name+"===============>"+age);
            String name1 = Bytes.toString(result.getValue("a2".getBytes(), "name".getBytes()));
            String age1 = Bytes.toString(result.getValue("a2".getBytes(), "age".getBytes()));
            System.out.println(name1+"==============>"+age1);
        }
        connection.close();
    }

使用java实现查看一行记录

	/**
     * 查看表中一行的数据
     * shell =======> get '表名','键值'
     */
    @Test
    public void testGet() throws IOException {
        Configuration entries = HBaseConfiguration.create();
        entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
        Connection connection = ConnectionFactory.createConnection(entries);
        Table student = connection.getTable(TableName.valueOf("student"));
        //查找指定的键
        Get get = new Get("01".getBytes());
        //指定列族
        get.addColumn("a1".getBytes(),"name".getBytes());
        Result result = student.get(get);
        String name = Bytes.toString(result.getValue("a1".getBytes(), "name".getBytes()));
        String age = Bytes.toString(result.getValue("a1".getBytes(), "age".getBytes()));
        System.out.println(name);
        System.out.println(age);
        connection.close();
    }

运行结果:
在这里插入图片描述

使用java删除表中的数据

	/**
     * 删除表中一行的数据
     * shell =======> delete '表名','主键','列族:列名'
     */
    @Test
    public void deleteDel() throws IOException {
        Configuration entries = HBaseConfiguration.create();
        entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
        Connection connection = ConnectionFactory.createConnection(entries);
        Table student = connection.getTable(TableName.valueOf("student"));
        Delete delete = new Delete("01".getBytes());
        delete.addColumn("a1".getBytes(),"name".getBytes());
        student.delete(delete);
        connection.close();
    }

使用java完成数字的累加

@Test
    public void testIncreate() throws IOException {
        Configuration entries = HBaseConfiguration.create();
        entries.set("hbase.zookeeper.quorum","Centos161:2181,Centos162:2181,Centos163:2181");
        Connection connection = ConnectionFactory.createConnection(entries);
        Table student = connection.getTable(TableName.valueOf("student"));
        student.incrementColumnValue(Bytes.toBytes("03"),Bytes.toBytes("a1"),Bytes.toBytes("age"),20L);
        Get get = new Get("03".getBytes());
        //指定列族
        get.addColumn("a1".getBytes(),"age".getBytes());
        Result result = student.get(get);
        Long age = Bytes.toLong(result.getValue("a1".getBytes(), "age".getBytes()));
        System.out.println(age);
        connection.close();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值