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();}}
版权归原作者 叶子上的考拉 所有, 如有侵权,请联系我们删除。