HBase(三)之 API的使用

1.添加依赖

新建maven项目。并添加依赖

    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-client</artifactId>
      <version>1.2.0</version>
    </dependency>

image-20200926162325596

2.Hbase核心API

2.1 获取Configuration对象

Connection代表对集群的连接对象,封装了与实际服务器的低级别单独连接以及与zookeeper的连接。

Connection可以通过ConnectionFactory类实例化。

Connection的生命周期由调用者管理,使用完毕后需要执行close()以释放资源。

Connection是线程安全的,多个Table和Admin可以共用同一个Connection对象。因此一个客户端只需要实例化一个连接即可。

反之,Table和Admin不是线程安全的!因此不建议并缓存或池化这两种对象。

 public static Configuration getConf(){
     //使用HBaseConfiguration的单例方法实例化
        Configuration conf= HBaseConfiguration.create();
        conf.addResource(new Path("/opt/hbase/conf/hbase-site.xml"));
        conf.addResource(new Path("/opt/hadoop/etc/hadoop/core-site.xml"));
        return  conf;
    }

2.2 创建表

Admin为HBase的管理类,可以通过Connection.getAdmin()获取实例,且在使用完成后调用close()关闭。

Admin可用于创建,删除,列出,启用和禁用以及以其他方式修改表,以及执行其他管理操作。

package cnkgc.hb09;

import cnkgc.hb09.until.HBaseConfs;
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 java.io.IOException;


public class CreateTable {
    public static void main(String[] args){
        Admin admin= HBaseConfs.getAdmin();
        HTableDescriptor htd=new HTableDescriptor(TableName.valueOf(args[0]));
        for (int i = 0; i < args.length; i++) {
            HColumnDescriptor family=new HColumnDescriptor(args[i]);
            htd.addFamily(family);
        }
        try {
            admin.createTable(htd);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                admin.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

2.3插入数据

package cnkgc.hb09;

import cnkgc.hb09.until.HBaseConfs;
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.Put;
import org.apache.hadoop.hbase.client.Table;

import java.io.IOException;

public class insertTable {
    public static void main(String[] args) throws IOException {
        Connection conn= HBaseConfs.getConn();
        Admin admin=HBaseConfs.getAdmin();
        TableName[] tableNames = admin.listTableNames();
        for (TableName tableName : tableNames) {
            System.out.println(tableName.getNameAsString());
        }
        Table table=conn.getTable(TableName.valueOf("hello"));
        String[][] values={
                {"1","asfwf","awff","1st White House","WDC"},
                {"2","鲍sdf","asda","10th 唐宁街","London"},
                {"3","jp","asd","111th sefesg","Beijing"},
                {"4","sp","asfdwf","地下sdfesg基地","PingRing"}
        };
        for (int i = 0; i < values.length; i++) {
            Put put=new Put(values[i][0].getBytes());
            put.addColumn("name".getBytes(),"fname".getBytes(),values[i][1].getBytes());
            put.addColumn("name".getBytes(),"lname".getBytes(),values[i][2].getBytes());
            put.addColumn("addr".getBytes(),"address".getBytes(),values[i][3].getBytes());
            put.addColumn("addr".getBytes(),"city".getBytes(),values[i][4].getBytes());
            table.put(put);
        }
        admin.close();
        conn.close();
    }

}

2.4打jar包并使用

首先测试创建表,将其打为jar包

image-20200926170843762

image-20200926170927464

image-20200926170948277

将打好的jar包上传到服务器

image-20200926171024997

使用jar包

hadoop jar jar包路径 jar包main方法路径 变量值

image-20200926171428240

### 使用Java API操作HBase 为了使用Java API来操作HBase,开发者通常会依赖于`org.apache.hadoop.hbase.client`包中的类。下面是一些基本的操作实例。 #### 创建表并插入数据 创建一个名为`users`的新表格,并向其中添加一些记录: ```java Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); try (Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin()) { TableName tableName = TableName.valueOf("users"); if (!admin.tableExists(tableName)) { TableDescriptorBuilder tableDesc = TableDescriptorBuilder.newBuilder(tableName) .setColumnFamily(ColumnFamilyDescriptorBuilder.of("personal")) .setColumnFamily(ColumnFamilyDescriptorBuilder.of("contactinfo")); admin.createTable(tableDesc.build()); } try (Table table = connection.getTable(tableName)) { Put put1 = new Put(Bytes.toBytes("row1")); put1.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"), Bytes.toBytes("John Doe")); put1.addColumn(Bytes.toBytes("contactinfo"), Bytes.toBytes("email"), Bytes.toBytes("johndoe@example.com")); table.put(put1); System.out.println("Added row1 to the users table."); } } ``` 这段代码展示了如何配置连接到本地ZooKeeper集群[^1],检查是否存在指定名称的表以及如果不存在则创建该表的过程。接着,在新创建或已存在的表中插入了一条带有两个列族的数据记录。 #### 查询特定行键的数据 通过给定的行键检索存储在表内的信息: ```java Get get = new Get(Bytes.toBytes("row1")); Result result; try (Table table = connection.getTable(TableName.valueOf("users"))) { result = table.get(get); } byte[] valueName = result.getValue( Bytes.toBytes("personal"), Bytes.toBytes("name")); String name = Bytes.toString(valueName); System.out.printf("Retrieved user&#39;s name: %s%n", name); ``` 此部分说明了怎样利用`Get`对象获取单个单元格的内容,并将其转换成字符串形式输出至控制台。 #### 删除整张表 当不再需要某张表时可以执行删除动作: ```java try (Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin()) { TableName tableName = TableName.valueOf("users"); if (admin.tableExists(tableName)) { admin.disableTable(tableName); // 表必须先被禁用才能移除 admin.deleteTable(tableName); System.out.println("Deleted &#39;users&#39; table successfully."); } else { System.err.println("&#39;users&#39; table does not exist!"); } } ``` 上述片段实现了关闭目标表之后再彻底清除它的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值