admin

Hbase 客户端 API 系列(一) - Put And Get 操作
前言作为 Hbase 客户端 API 系列学习的第一篇,除了Put与Get操作,还包含了客户端项目的构建。实践首先...
扫描右侧二维码阅读全文
25
2018/10

Hbase 客户端 API 系列(一) - Put And Get 操作

前言

作为 Hbase 客户端 API 系列学习的第一篇,除了PutGet操作,还包含了客户端项目的构建。

实践

首先,由于《Hbase 权威指南》中使用到的jar包已经过时了,所以,在这里说明下pom.xml项目依赖文件:

<dependencies>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.7</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.7</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>2.0.2</version>
    </dependency>

</dependencies>

接下来新建我们的测试类InsertTest.java:

package me._0o0;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.CellUtil;
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;
import org.apache.hadoop.hbase.Cell;

import java.io.IOException;

public class InsertTest {

    public static void main(String[] args) throws IOException {

        Configuration conf = HBaseConfiguration.create();
        Connection conn = ConnectionFactory.createConnection(conf);

        HTable table = (HTable) conn.getTable(TableName.valueOf("tb_test"));

        Put put = new Put(Bytes.toBytes("book:1"));
        put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("isbn"), Bytes.toBytes("11111111"));
        put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("publisher"), Bytes.toBytes("人民出版社"));
        put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("name"), Bytes.toBytes("计算机组成原理"));
        put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("price"), Bytes.toBytes("25"));

        table.put(put);

        Get get = new Get(Bytes.toBytes("book:1"));
        Result rs = table.get(get);

        for (Cell cell : rs.rawCells()) {
            System.out.println("列簇:" + Bytes.toString(CellUtil.cloneFamily(cell)) + "\t" +
                                "列修饰符:" + Bytes.toString(CellUtil.cloneQualifier(cell)) + "\t" +
                                "列值:" + Bytes.toString(CellUtil.cloneValue(cell)) + "\t" +
                                "时间戳:" + cell.getTimestamp());
        }
        
        table.close();
        conn.close();
    }
}

需要注意的是Configuration conf = HBaseConfiguration.create();,新建配置对象,客户端如何与我们服务器上的Hbase进行通信呢?
很简单,客户端只要配置服务器上面的Zookeeper节点就可以了。
默认HBaseConfiguration.create()读取CLASSPATH类路径下的hbase-site.xml文件,在这里我在Resources目录下新建了一个hbase-site.xml文件:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>192.168.0.11</value>
    </property>
</configuration>

上面只配置了Zookeeper的地址,端口使用默认2181,如果端口不是2181可以通过hbase.zookeeper.property.clientPort属性配置。
当然了,也可以没有该配置文件,Configuration对象可以通过如下方式进行配置:

conf.set("hbase.zookeeper.quorum", "192.168.0.11"); //设置zookeeper地址,多个用逗号隔开
conf.set("hbase.zookeeper.property.clientPort", "2181"); //设置zookeeper端口

以上程序运行结果:
微信截图_20181025160335.png
服务器上使用命令查看:
微信截图_20181025160436.png
可以看到,确实插入成功了。

Last modification:October 25th, 2018 at 04:04 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment