Java 操作HBase

Java 操作HBase

思路

1.建立连接

2.针对表的操作(创建表、删除表、判断表是否存在、使用/禁用表、列出表)

3.针对数据的操作(添加、删除、修改、查看)

4.关闭连接

HBase常用的Java API

Java API 接口 :可以理解为别人封装好的方法,可以直接调用

(一)Admin

管理HBase数据库信息(包括创建、删除表、列出表项、使表有效/无效、添加/删除表的列族成员、检查HBase运行状态等)

方法名 释义
addColumn 添加列族
createTable 创建表
deleteTable 删除表
disableTable 使表无效
enableTable 使表有效
tableExists 判断表是否存在
listTable 列出所有表项
(二)HBaseConfiguration

管理HBase的配置信息

方法名 释义
create 创建Configuration
(三)Table

Connection.getTable()返回Table的一个子对象,用于与HBase进行通信

方法名 释义
close 关闭
delete 删除(单元格、行)
exists 检查指定的Get对象是否存在
get 获取指定的值
put 添加数据
HTableDescriptor 获取HTableDescriptor实例
getName 获取当前表格的名字实例
(四)HTableDescriptor

HTableDescriptor包含了HBase中的表格的详细信息(例如表中的列族、表的类型、表是否只读、MemoStore的最大空间、Region分裂时机等)

方法名 释义
addFamily 添加列族
getFamilies 返回表中所有列族的名字
getTableName 返回表的名字实例
getValue 获取某个属性的值
removeFamily 删除某个列族
setValue 设置属性的值
(五)HColumnDescriptor

HColumnDescriptor包含了列族的详细信息(例如列族的版本号、压缩设置等)。HColumnDescriptor通常在添加列族或者创建表时使用。列族一旦建立就不能被修改,只能通过删除再重新创建的方式来间接修改。一旦列族被删除,则其中包含的数据也会被删除

方法名 释义
getName 获取列族的名字
getValue 获取单元格的值
setValue 设置单元格的值
(六)Put

用来对单元格执行添加数据的操作

方法名 释义
add 将指定的列族、列对应的值添加到Put实例中
get 获取列族和列限定符指定列中的所有单元格的值
(七)Get

用来获取当行的信息

方法名 释义
addColumn 根据列族和列限定符获取对应列
setFilter 为获取具体的列设置相应的过滤器
(八)Result

用于存放Get或者Scan操作后的查询结果,以的格式存储在map结构中。

该类不是线程安全的

方法名 释义
containsColumn 检查是否包含列族和列限定符指定的列
getColumnCells 获得列族和列限定符指定列的列中的所有单元格
getValue 获得列族和列限定符指定的单元格的最新值
(九)Scan

可以用Scan来限定需要查找的数据(包括但是不限于限定版本号、起始行号、终止行号、列族、列限定符、返回值的数量上限)

方法名 释义
addFamily 限定需要查找的列族
addColumn 限定列族和列限定符指定的列
setFilter 指定Filter来过滤掉不需要的数据
setStartRow 限定开始的行,否则从表头开始
setStopRow 限定结束的行(不包含此行)
setBatch 限定最多返回的单元格数目。用于防止返回过多的数据导致OutofMemory(内存溢出)错误

Java 操作HBase实例

(一)编辑pom.xml文件

往其中添加

        <dependency>
            <groupId>org.apache.hbasegroupId>
            <artifactId>hbase-serverartifactId>
            <version>1.4.13version>
        dependency>
        <dependency>
            <groupId>org.apache.hbasegroupId>
            <artifactId>hbase-clientartifactId>
            <version>1.4.13version>
        dependency>
(二)编写操作HBase的文件ExampleForHBase.java

实例说明

1.创建一个学生信息表,用来存储学生的姓名(姓名作为行键,且假设姓名不会重复)以及考试成绩,其中考试成绩(score)是一个列族,存储了各个科目的考试成绩。然后向student中添加数据

2.student表结构及数据

name score
English Math Computer
zhangsan 69 86 77
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.*;

import java.io.IOException;

public class ExampleForHBase {

    public static Configuration conf;//管理HBase的配置信息
    public static Connection conn;//管理HBase的连接
    public static Admin admin;//管理HBase数据库的连接

    /**
     * 创建相关连接
     *
     * @throws IOException 可能出现的异常
     */
    public static void init() throws IOException {
        conf = HBaseConfiguration.create();
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        conf.set("HADOOP_USER_NAME", "hadoop");
        conf.set("hbase.root.dir", "hdfs://master:9000/hbase");
        conf.set("hbase.zookeeper.quorum", "master");//配置Zookeeper的ip地址
        conf.set("hbase.zookeeper.property.clientPort", "2181");//配置zookeeper的端口

        conn = ConnectionFactory.createConnection(conf);
        admin = conn.getAdmin();
    }

    /**
     * 关闭所有连接
     *
     * @throws IOException 可能出现的异常
     */
    public static void close() throws IOException {
        if (admin != null)
            admin.close();
        if (conn != null)
            conn.close();
    }

    /**
     * 创建表
     * @param myTableName 表名
     * @param colFamily 列族名的数组
     * @throws IOException 可能出现的异常
     */
    public static void createTable(String myTableName, String[] colFamily) throws IOException {
        TableName tableName = TableName.valueOf(myTableName);
        if (admin.tableExists(tableName)) {
            System.out.println(myTableName + "表已经存在");
        } else {
            HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
            for (String str : colFamily) {
                HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);
                hTableDescriptor.addFamily(hColumnDescriptor);
            }
            admin.createTable(hTableDescriptor);
        }
    }

    /**
     * 添加数据
     * @param tableName 表名
     * @param rowkey 行键
     * @param colFamily 列族
     * @param col 列
     * @param value 值
     * @throws IOException 可能出现的异常
     */
    public static void insertData(String tableName,String rowkey,String colFamily,String col,String value) throws IOException {
        Table table = conn.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowkey.getBytes());
        put.addColumn(colFamily.getBytes(),col.getBytes(),value.getBytes());
        table.put(put);
        table.close();
    }

    /**
     * 根据行键删除数据
     * @param tableName 表名
     * @param rowkey 行键
     * @throws IOException 可能出现的异常
     */
    public static void deleteData(String tableName,String rowkey) throws IOException {
        Table table = conn.getTable(TableName.valueOf(tableName));
        Delete delete = new Delete(rowkey.getBytes());
        table.delete(delete);
        table.close();
    }

    /**
     * 获取数据
     * @param tableName 表名
     * @param rowkey 行键
     * @param colFamily 列族
     * @param col 列
     * @throws IOException 可能出现的异常
     */
    public static void getData(String tableName,String rowkey,String colFamily,String col) throws IOException {
        Table table = conn.getTable(TableName.valueOf(tableName));
        Get get = new Get(rowkey.getBytes());
        get.addColumn(colFamily.getBytes(),col.getBytes());
        Result result = table.get(get);
        System.out.println(new String(result.getValue(colFamily.getBytes(),col.getBytes())));
        table.close();
    }

    public static void main(String[] args) throws IOException {
        init();
        createTable("student",new String[]{"score"});
        insertData("student","zhangsan","score","English","69");
        insertData("student","zhangsan","score","Math","86");
        insertData("student","zhangsan","score","Computer","77");
        getData("student","zhangsan","score","Computer");
        close();
    }
}

你可能感兴趣的:(大数据,hbase,java,数据库)