0


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操作后的查询结果,以

<key, value>

的格式存储在map结构中。

该类不是线程安全的
方法名释义containsColumn检查是否包含列族和列限定符指定的列getColumnCells获得列族和列限定符指定列的列中的所有单元格getValue获得列族和列限定符指定的单元格的最新值

(九)Scan

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

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

Java 操作HBase实例

(一)编辑pom.xml文件

往其中添加

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

(二)编写操作HBase的文件ExampleForHBase.java

实例说明

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

2.student表结构及数据
namescoreEnglish MathComputerzhangsan 69 8677

importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.HColumnDescriptor;importorg.apache.hadoop.hbase.HTableDescriptor;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.*;importjava.io.IOException;publicclassExampleForHBase{publicstaticConfiguration conf;//管理HBase的配置信息publicstaticConnection conn;//管理HBase的连接publicstaticAdmin admin;//管理HBase数据库的连接/**
     * 创建相关连接
     *
     * @throws IOException 可能出现的异常
     */publicstaticvoidinit()throwsIOException{
        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 可能出现的异常
     */publicstaticvoidclose()throwsIOException{if(admin !=null)
            admin.close();if(conn !=null)
            conn.close();}/**
     * 创建表
     * @param myTableName 表名
     * @param colFamily 列族名的数组
     * @throws IOException 可能出现的异常
     */publicstaticvoidcreateTable(String myTableName,String[] colFamily)throwsIOException{TableName tableName =TableName.valueOf(myTableName);if(admin.tableExists(tableName)){System.out.println(myTableName +"表已经存在");}else{HTableDescriptor hTableDescriptor =newHTableDescriptor(tableName);for(String str : colFamily){HColumnDescriptor hColumnDescriptor =newHColumnDescriptor(str);
                hTableDescriptor.addFamily(hColumnDescriptor);}
            admin.createTable(hTableDescriptor);}}/**
     * 添加数据
     * @param tableName 表名
     * @param rowkey 行键
     * @param colFamily 列族
     * @param col 列
     * @param value 值
     * @throws IOException 可能出现的异常
     */publicstaticvoidinsertData(String tableName,String rowkey,String colFamily,String col,String value)throwsIOException{Table table = conn.getTable(TableName.valueOf(tableName));Put put =newPut(rowkey.getBytes());
        put.addColumn(colFamily.getBytes(),col.getBytes(),value.getBytes());
        table.put(put);
        table.close();}/**
     * 根据行键删除数据
     * @param tableName 表名
     * @param rowkey 行键
     * @throws IOException 可能出现的异常
     */publicstaticvoiddeleteData(String tableName,String rowkey)throwsIOException{Table table = conn.getTable(TableName.valueOf(tableName));Delete delete =newDelete(rowkey.getBytes());
        table.delete(delete);
        table.close();}/**
     * 获取数据
     * @param tableName 表名
     * @param rowkey 行键
     * @param colFamily 列族
     * @param col 列
     * @throws IOException 可能出现的异常
     */publicstaticvoidgetData(String tableName,String rowkey,String colFamily,String col)throwsIOException{Table table = conn.getTable(TableName.valueOf(tableName));Get get =newGet(rowkey.getBytes());
        get.addColumn(colFamily.getBytes(),col.getBytes());Result result = table.get(get);System.out.println(newString(result.getValue(colFamily.getBytes(),col.getBytes())));
        table.close();}publicstaticvoidmain(String[] args)throwsIOException{init();createTable("student",newString[]{"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 数据库

本文转载自: https://blog.csdn.net/qq_42260493/article/details/127267596
版权归原作者 叶子上的考拉 所有, 如有侵权,请联系我们删除。

“Java 操作HBase”的评论:

还没有评论