首页 > 其他 > 详细

Hbase 操作工具类

时间:2019-05-03 18:55:59      阅读:168      评论:0      收藏:0      [点我收藏+]

 

依赖jar

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase</artifactId>
            <version>2.0.5</version>
            <type>pom</type>
        </dependency>

 

 

HbaseUtils.java

package javax.utils;

import java.io.IOException;

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;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * Hbase 操作工具类
 * 
 * @author Logan
 * @createDate 2019-05-03
 * @version 1.0.0
 *
 */
public class HbaseUtils {

    /**
     * 根据表名获取Table 对象
     * 
     * @param name 表名,必要时可指定命名空间,比如:“default:user”
     * @return Hbase Table 对象
     * @throws IOException 有异常抛出,由调用者捕获处理
     */
    public static Table getTable(String name) throws IOException {
        TableName tableName = TableName.valueOf(name);
        Connection connection = ConnectionFactory.createConnection();
        return connection.getTable(tableName);
    }

    /**
     * 根据rowKey生成一个查询的Get 对象
     * 
     * @param rowKey rowKey
     * @return Get 对象
     */
    public static Get createGet(String rowKey) {
        return new Get(Bytes.toBytes(rowKey));
    }

    /**
     * 对查询的Get 对象增加指定列簇
     * 
     * @param get
     * @param family
     */
    public static void addFamilyOnGet(Get get, String family) {
        get.addFamily(Bytes.toBytes(family));
    }

    /**
     * 对查询的Get 对象增加指定列簇和列
     * 
     * @param get
     * @param family
     * @param qualifier
     */
    public static void addColumnOnGet(Get get, String family, String qualifier) {
        get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
    }

    /**
     * 根据表名和rowKey 查询结果(包含全部列簇和列)
     * 
     * @param tableName 表名,必要时可指定命名空间,比如:“default:user”
     * @param rowKey 查询rowKey
     * @return 查询结果Result
     * @throws IOException 有异常抛出,由调用者捕获处理
     */
    public static Result get(String tableName, String rowKey) throws IOException {
        Get get = createGet(rowKey);
        return get(tableName, get);
    }

    /**
     * 根据表名和rowKey 查询结果(包含Get 指定的列)
     * 
     * @param tableName 表名,必要时可指定命名空间,比如:“default:user”
     * @param get Hbase查询对象
     * @return 查询结果Result
     * @throws IOException 有异常抛出,由调用者捕获处理
     */
    public static Result get(String tableName, Get get) throws IOException {
        Table table = getTable(tableName);
        return table.get(get);
    }

}

 

 

持续更新中。。。

待续。。。

 

 

以下是测试类

HbaseClientDemo.java

package com.java.demo;

import javax.utils.HbaseUtils;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;

/**
 * Hbase 客户端测试
 * 
 * @author Logan
 * @createDate 2019-05-03
 * @version 1.0.0
 *
 */
public class HbaseClientDemo {

    @Test
    public void getAllFamily() {
        try {
            String tableName = "default:user";
            String rowKey = "key1002";

            // 按表名和rowKey查询所有列
            Result result = HbaseUtils.get(tableName, rowKey);
            Cell[] cells = result.rawCells();

            // 从Result中读取 rowKey
            System.out.println(Bytes.toString(result.getRow()));

            String print = "%s\t %s:%s \t %s";
            for (Cell cell : cells) {

                // 从Cell中取rowKey
                String row = Bytes.toString(CellUtil.cloneRow(cell));
                String family = Bytes.toString(CellUtil.cloneFamily(cell));
                String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));
                String value = Bytes.toString(CellUtil.cloneValue(cell));

                System.out.println(String.format(print, row, family, qualifier, value));

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void get() {
        try {
            String tableName = "default:user";
            String rowKey = "key1002";

            // 按表名和rowKey查询指定列
            Table table = HbaseUtils.getTable(tableName);
            Get get = HbaseUtils.createGet(rowKey);

            HbaseUtils.addColumnOnGet(get, "info", "name");
            HbaseUtils.addColumnOnGet(get, "info", "age");

            // 不存在的列,查询结果不显示
            HbaseUtils.addColumnOnGet(get, "info", "address");

            // 如果在增加列后增加已有的列簇,会返回该列簇的全部列数据,覆盖前边的增加列
            // HbaseUtils.addFamilyOnGet(get, "info");

            Result result = table.get(get);
            Cell[] cells = result.rawCells();

            // 从Result中读取 rowKey
            System.out.println(Bytes.toString(result.getRow()));

            String print = "%s\t %s:%s \t %s";
            for (Cell cell : cells) {

                // 从Cell中取rowKey
                String row = Bytes.toString(CellUtil.cloneRow(cell));
                String family = Bytes.toString(CellUtil.cloneFamily(cell));
                String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));
                String value = Bytes.toString(CellUtil.cloneValue(cell));

                System.out.println(String.format(print, row, family, qualifier, value));

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

 

 

 

 

 

持续更新中。。。

待续。。。

 

 

Hbase 操作工具类

.

Hbase 操作工具类

原文:https://www.cnblogs.com/jonban/p/10805971.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!