当前位置:   article > 正文

HBase客户端JAVA开发(二)_java hbase 本地客户端开发

java hbase 本地客户端开发

接上一篇HBase客户端JAVA开发(一),本篇在HBase客户端通过IDEA平台使用JAVA编程实现以下功能:

1.判断一张表是否存在
2.在hbase中创建表
3.删除hbase的表
4.往表插入数据
5.扫描表数据 (scan全表扫描)
6.按照表名、ROWKEY获取一行数据 

一、DEMO目录树结构

在resources下只需要添加hadoop配置中的core-site.xml(可到集群节点中的/etc/hadoop文件夹中下载)、hbase-site.xml(可到集群节点中的/etc/hbase文件夹中下载)、log4j.properties(可到/etc/hadoop文件夹中下载,用于日志生成)三个文件即可。

二、功能实现

首先要从resources的core-site.xml和hbase-site.xml获取集群的配置信息,用一个静态变量conf保存这些信息

  1. public static Configuration conf;
  2. static{
  3. conf = HBaseConfiguration.create();
  4. }

接下来就可以一一实现相关功能了:

1、判断一张表是否存在

     这里完成两项操作:

      • 连接HBase数据库——应用Connection类对象;

      • 通过表名来查找数据库中是否有同名的表——应用HBaseAdmin类对象;

  1. public static boolean isExist(String tableName){
  2. //对表操作需要使用HbaseAdmin
  3. try {
  4. Connection connection = ConnectionFactory.createConnection(conf);
  5. //管理表
  6. HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
  7. return admin.tableExists(TableName.valueOf(tableName));
  8. } catch (IOException e) { e.printStackTrace();}
  9. return false;
  10. }

2、在hbase中创建表

      这里完成三项操作:

      •  创建表描述器

HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

      •  创建列族

  1. for(String cf:columnfamily){
  2. htd.addFamily(new HColumnDescriptor(cf));
  3. }

      •  创建表

  1. admin.createTable(htd);
  2. System.out.println("表已经创建成功!");

 3、删除hbase的表

通过表名判断表是否存在,若存在则删除,否则给出提示信息
  1. if (!isExist(tableName)) {
  2. System.out.println("表不存在");}
  3. else {
  4. //2.如果表存在,删除
  5. admin.disableTable(TableName.valueOf(tableName));
  6. admin.deleteTable(TableName.valueOf(tableName));
  7. System.out.println("表删除了");
  8. }

 4、插入表数据

  应用Put对象来实现数据插入,注意HBase存储的都是字节数组,没有具体类型;

  1. Table t = connection.getTable(TableName.valueOf(tableName));
  2. Put p = new Put(Bytes.toBytes(rowkey));
  3. //加入数据:列族,列名,列值
  4. p.addColumn(Bytes.toBytes(cf),Bytes.toBytes(column),Bytes.toBytes(value));
  5. t.put(p);

5、扫描表数据

  通过Scan类和ResultScanner类对象共同完成整个表数据扫描

  1. //对表操作需要使用HbaseAdmin
  2. Connection connection = ConnectionFactory.createConnection(conf);
  3. Table t = connection.getTable(TableName.valueOf(tableName));
  4. //1.实例scan
  5. Scan s = new Scan();
  6. //2.拿到Scanner对象
  7. ResultScanner rs = t.getScanner(s);
  8. //3.遍历
  9. for (Result r:rs){
  10. Cell[] cells = r.rawCells();
  11. //遍历具体数据
  12. for (Cell c : cells){
  13. System.out.print("行键为:"+Bytes.toString(CellUtil.cloneRow(c))+" ");
  14. System.out.print("列族为:"+Bytes.toString(CellUtil.cloneFamily(c))+" ");
  15. System.out.print("列名为:"+Bytes.toString(CellUtil.cloneQualifier(c))+" ");
  16. System.out.println("值为:"+Bytes.toString(CellUtil.cloneValue(c)));
  17. }

6、按照表名、ROWKEY获取一行数据

  1. Connection connection = ConnectionFactory.createConnection(conf);
  2. //拿到表对象
  3. Table t = connection.getTable(TableName.valueOf(tableName));
  4. //扫描指定数据需要实例对象Get
  5. Get get = new Get(Bytes.toBytes(rowkey));
  6. //可加过滤条件
  7. get.addFamily(Bytes.toBytes("info"));
  8. Result rs = t.get(get);
  9. //遍历
  10. Cell[] cells = rs.rawCells();
  11. for (Cell c : cells){
  12. System.out.print("行键为:"+ Bytes.toString(CellUtil.cloneRow(c))+" ");
  13. System.out.print("列族为:"+Bytes.toString(CellUtil.cloneFamily(c))+" ");
  14. System.out.print("列名:"+Bytes.toString(CellUtil.cloneQualifier(c))+" ");
  15. System.out.println("值为:"+Bytes.toString(CellUtil.cloneRow(c))+" ");
  16. }

三、完整程序展示

  1. package HBaseDemo1;
  2. import com.codahale.metrics.ConsoleReporter;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.hbase.*;
  5. import org.apache.hadoop.hbase.client.*;
  6. import org.apache.hadoop.hbase.util.Bytes;
  7. import org.junit.After;
  8. import org.junit.Before;
  9. import java.io.IOException;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. public class HBaseDemo1 {
  13. //获取配置信息
  14. public static Configuration conf;
  15. static{
  16. conf = HBaseConfiguration.create();
  17. }
  18. //1.判断一张表是否存在
  19. public static boolean isExist(String tableName){
  20. //对表操作需要使用HbaseAdmin
  21. try {
  22. Connection connection = ConnectionFactory.createConnection(conf);
  23. //管理表
  24. HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
  25. return admin.tableExists(TableName.valueOf(tableName));
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. return false;
  30. }
  31. //2.在hbase创建表
  32. public static void createTable(String tableName,String... columnfamily){
  33. try {
  34. //对表操作需要使用HbaseAdmin
  35. Connection connection = ConnectionFactory.createConnection(conf);
  36. //管理表
  37. HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
  38. //表如果存在,请输入其他表名
  39. if(isExist(tableName)){
  40. System.out.println("表存在,请输入其他表名");
  41. }else{
  42. //注意:创建表的话,需要创建一个描述器
  43. HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));
  44. //创建列族
  45. for(String cf:columnfamily){
  46. htd.addFamily(new HColumnDescriptor(cf));
  47. }
  48. //创建表
  49. admin.createTable(htd);
  50. System.out.println("表已经创建成功!");
  51. }
  52. } catch (IOException e) {
  53. e.printStackTrace();
  54. }
  55. }
  56. //3.删除hbase的表
  57. public static void deleteTable(String tableName) {
  58. try {
  59. //对表操作需要使用HbaseAdmin
  60. Connection connection = ConnectionFactory.createConnection(conf);
  61. //管理表
  62. HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
  63. //1.表如果存在,请输入其他表名
  64. if (!isExist(tableName)) {
  65. System.out.println("表不存在");
  66. } else {
  67. //2.如果表存在,删除
  68. admin.disableTable(TableName.valueOf(tableName));
  69. admin.deleteTable(TableName.valueOf(tableName));
  70. System.out.println("表删除了");
  71. }
  72. } catch (IOException e) {
  73. e.printStackTrace();
  74. }
  75. }
  76. //4.添加数据put 'user','rowkey','info:name','tony'
  77. public static void addRow(String tableName,String rowkey,String cf,String column,String value){
  78. try {
  79. //对表操作需要使用HbaseAdmin
  80. Connection connection = ConnectionFactory.createConnection(conf);
  81. Table t = connection.getTable(TableName.valueOf(tableName));
  82. //1.表如果存在,请输入其他表名
  83. if (!isExist(tableName)) {
  84. System.out.println("表不存在");
  85. } else {
  86. //用put方式加入数据
  87. Put p = new Put(Bytes.toBytes(rowkey));
  88. //加入数据
  89. p.addColumn(Bytes.toBytes(cf),Bytes.toBytes(column),Bytes.toBytes(value));
  90. t.put(p);
  91. }
  92. } catch (IOException e) {
  93. e.printStackTrace();
  94. }
  95. }
  96. //5.扫描表数据 scan全表扫描
  97. public static void scanAll(String tableName){
  98. try {
  99. //对表操作需要使用HbaseAdmin
  100. Connection connection = ConnectionFactory.createConnection(conf);
  101. Table t = connection.getTable(TableName.valueOf(tableName));
  102. //实例scan
  103. Scan s = new Scan();
  104. //拿到Scanner对象
  105. ResultScanner rs = t.getScanner(s);
  106. //遍历
  107. for (Result r:rs){
  108. Cell[] cells = r.rawCells();
  109. //遍历具体数据
  110. for (Cell c : cells){
  111. System.out.print("行键为:"+Bytes.toString(CellUtil.cloneRow(c))+" ");
  112. System.out.print("列族为:"+Bytes.toString(CellUtil.cloneFamily(c))+" ");
  113. System.out.print("列名为:"+Bytes.toString(CellUtil.cloneQualifier(c))+" ");
  114. System.out.println("值为:"+Bytes.toString(CellUtil.cloneValue(c)));
  115. }
  116. }
  117. } catch (IOException e) {
  118. e.printStackTrace();
  119. }
  120. }
  121. //6、按照表名、ROWKEY获取一行数据
  122. public static void getRow(String tableName,String rowkey) throws IOException {
  123. Connection connection = ConnectionFactory.createConnection(conf);
  124. //拿到表对象
  125. Table t = connection.getTable(TableName.valueOf(tableName));
  126. //扫描指定数据需要实例对象Get
  127. Get get = new Get(Bytes.toBytes(rowkey));
  128. //可加过滤条件
  129. get.addFamily(Bytes.toBytes("info"));
  130. Result rs = t.get(get);
  131. //遍历
  132. Cell[] cells = rs.rawCells();
  133. for (Cell c : cells){
  134. System.out.print("行键为:"+ Bytes.toString(CellUtil.cloneRow(c))+" ");
  135. System.out.print("列族为:"+Bytes.toString(CellUtil.cloneFamily(c))+" ");
  136. System.out.print("列名:"+Bytes.toString(CellUtil.cloneQualifier(c))+" ");
  137. System.out.println("值为:"+Bytes.toString(CellUtil.cloneRow(c))+" ");
  138. }
  139. }
  140. //7.删除表中一行数据
  141. public static void deleteRow(String tableName,String rowkey,String cf ){
  142. try {
  143. //对表操作需要使用HbaseAdmin
  144. Connection connection = ConnectionFactory.createConnection(conf);
  145. Table t = connection.getTable(TableName.valueOf(tableName));
  146. //1.表如果存在,请输入其他表名
  147. if (!isExist(tableName)) {
  148. System.out.println("表不存在");
  149. } else {
  150. //1.根据rowkey删除数据
  151. Delete delete = new Delete(Bytes.toBytes(rowkey));
  152. //2.删除
  153. t.delete(delete);
  154. System.out.println("删除成功");
  155. }
  156. } catch (IOException e) {
  157. e.printStackTrace();
  158. }
  159. }
  160. //8.删除多行数据
  161. public static void deleteAll(String tableName,String... rowkeys){
  162. try {
  163. //对表操作需要使用HbaseAdmin
  164. Connection connection = ConnectionFactory.createConnection(conf);
  165. Table t = connection.getTable(TableName.valueOf(tableName));
  166. //1.表如果存在,请输入其他表名
  167. if (!isExist(tableName)) {
  168. System.out.println("表不存在");
  169. } else {
  170. //1.把delete封装到集合
  171. List<Delete> list = new ArrayList<Delete>();
  172. //2.遍历
  173. for (String row:rowkeys){
  174. Delete d = new Delete(Bytes.toBytes(row));
  175. list.add(d);
  176. }
  177. t.delete(list);
  178. System.out.println("删除成功");
  179. }
  180. } catch (IOException e) {
  181. e.printStackTrace();
  182. }
  183. }
  184. //主程序
  185. public static void main(String[] args) throws IOException {
  186. // System.out.println(isExist("emp"));
  187. createTable("yangmi","info");
  188. //deleteTable("tony");
  189. addRow("yangmi","101","info","age","20");
  190. //deleteRow("yangmi","101","info");
  191. //deleteAll("emp","1001","1002");
  192. //scanAll("yangmi");
  193. getRow("yangmi","101");
  194. }
  195. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/580657
推荐阅读
相关标签
  

闽ICP备14008679号