Java 操作HBase,HColumnDes
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表结构及数据
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(); } }
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。