运行Eclipse,创建一个新的Java工程“HBaseClient”,右键项目根目录,选择 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下的hbase-0.94.1-security.jar、hbase-0.94.1-security-tests.jar和lib子目录下所有jar 包添加到本工程的Classpath下。

HBase提供了java api来对HBase进行一系列的管理涉及到对表的管理、数据的操作等。常用的API操作有:

  1、 对表的创建、删除、显示以及修改等,可以用HBaseAdmin,一旦创建了表,那么可以通过HTable的实例来访问表,每次可以往表里增加数据。

  2、 插入数据

    创建一个Put对象,在这个Put对象里可以指定要给哪个列增加数据,以及当前的时间戳等值,然后通过调用HTable.put(Put)来提交操作,子猴在这里提请注意的是:在创建Put对象的时候,你必须指定一个行(Row)值,在构造Put对象的时候作为参数传入。

  3、 获取数据

    要获取数据,使用Get对象,Get对象同Put对象一样有好几个构造函数,通常在构造的时候传入行值,表示取第几行的数据,通过HTable.get(Get)来调用。

  4、 浏览每一行

    通过Scan可以对表中的行进行浏览,得到每一行的信息,比如列名,时间戳等,Scan相当于一个游标,通过next()来浏览下一个,通过调用HTable.getScanner(Scan)来返回一个ResultScanner对象。HTable.get(Get)和HTable.getScanner(Scan)都是返回一个Result。Result是一个

KeyValue的链表。

  5、 删除

    使用Delete来删除记录,通过调用HTable.delete(Delete)来执行删除操作。(注:删除这里有些特别,也就是删除并不是马上将数据从表中删除。)

  6、 锁

    新增、获取、删除在操作过程中会对所操作的行加一个锁,而浏览却不会。

  7、 簇的访问

    客户端代码通过ZooKeeper来访问找到簇,也就是说ZooKeeper quorum将被使用,那么相关的类(包)应该在客户端的类(classes)目录下,即客户端一定要找到文件hbase-site.xml。

新建一个类:

[java] view plain copy
  1. import java.io.IOException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.hbase.HBaseConfiguration;
  6. import org.apache.hadoop.hbase.HColumnDescriptor;
  7. import org.apache.hadoop.hbase.HTableDescriptor;
  8. import org.apache.hadoop.hbase.KeyValue;
  9. import org.apache.hadoop.hbase.MasterNotRunningException;
  10. import org.apache.hadoop.hbase.ZooKeeperConnectionException;
  11. import org.apache.hadoop.hbase.client.Delete;
  12. import org.apache.hadoop.hbase.client.Get;
  13. import org.apache.hadoop.hbase.client.HBaseAdmin;
  14. import org.apache.hadoop.hbase.client.HTable;
  15. import org.apache.hadoop.hbase.client.Result;
  16. import org.apache.hadoop.hbase.client.ResultScanner;
  17. import org.apache.hadoop.hbase.client.Scan;
  18. import org.apache.hadoop.hbase.client.Put;
  19. import org.apache.hadoop.hbase.util.Bytes;
  20. public class HBaseTest {
  21. private static Configuration conf =null;
  22. /**
  23. * 初始化配置
  24. */
  25. static {
  26. conf = HBaseConfiguration.create();
  27. }
  28. /**
  29. * 创建一张表
  30. */
  31. public static void creatTable(String tableName, String[] familys) throws Exception {
  32. HBaseAdmin admin = new HBaseAdmin(conf);
  33. if (admin.tableExists(tableName)) {
  34. System.out.println("table already exists!");
  35. } else {
  36. HTableDescriptor tableDesc = new HTableDescriptor(tableName);
  37. for(int i=0; i<familys.length; i++){
  38. tableDesc.addFamily(new HColumnDescriptor(familys[i]));
  39. }
  40. admin.createTable(tableDesc);
  41. System.out.println("create table " + tableName + " ok.");
  42. }
  43. }
  44. /**
  45. * 删除表
  46. */
  47. public static void deleteTable(String tableName) throws Exception {
  48. try {
  49. HBaseAdmin admin = new HBaseAdmin(conf);
  50. admin.disableTable(tableName);
  51. admin.deleteTable(tableName);
  52. System.out.println("delete table " + tableName + " ok.");
  53. } catch (MasterNotRunningException e) {
  54. e.printStackTrace();
  55. } catch (ZooKeeperConnectionException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. /**
  60. * 插入一行记录
  61. */
  62. public static void addRecord (String tableName, String rowKey, String family, String qualifier, String value)
  63. throws Exception{
  64. try {
  65. HTable table = new HTable(conf, tableName);
  66. Put put = new Put(Bytes.toBytes(rowKey));
  67. put.add(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(value));
  68. table.put(put);
  69. System.out.println("insert recored " + rowKey + " to table " + tableName +" ok.");
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. /**
  75. * 删除一行记录
  76. */
  77. public static void delRecord (String tableName, String rowKey) throws IOException{
  78. HTable table = new HTable(conf, tableName);
  79. List list = new ArrayList();
  80. Delete del = new Delete(rowKey.getBytes());
  81. list.add(del);
  82. table.delete(list);
  83. System.out.println("del recored " + rowKey + " ok.");
  84. }
  85. /**
  86. * 查找一行记录
  87. */
  88. public static void getOneRecord (String tableName, String rowKey) throws IOException{
  89. HTable table = new HTable(conf, tableName);
  90. Get get = new Get(rowKey.getBytes());
  91. Result rs = table.get(get);
  92. for(KeyValue kv : rs.raw()){
  93. System.out.print(new String(kv.getRow()) + " " );
  94. System.out.print(new String(kv.getFamily()) + ":" );
  95. System.out.print(new String(kv.getQualifier()) + " " );
  96. System.out.print(kv.getTimestamp() + " " );
  97. System.out.println(new String(kv.getValue()));
  98. }
  99. }
  100. /**
  101. * 显示所有数据
  102. */
  103. public static void getAllRecord (String tableName) {
  104. try{
  105. HTable table = new HTable(conf, tableName);
  106. Scan s = new Scan();
  107. ResultScanner ss = table.getScanner(s);
  108. for(Result r:ss){
  109. for(KeyValue kv : r.raw()){
  110. System.out.print(new String(kv.getRow()) + " ");
  111. System.out.print(new String(kv.getFamily()) + ":");
  112. System.out.print(new String(kv.getQualifier()) + " ");
  113. System.out.print(kv.getTimestamp() + " ");
  114. System.out.println(new String(kv.getValue()));
  115. }
  116. }
  117. } catch (IOException e){
  118. e.printStackTrace();
  119. }
  120. }
  121. public static void  main (String [] agrs) {
  122. try {
  123. String tablename = "scores";
  124. String[] familys = {"grade", "course"};
  125. HBaseTest.creatTable(tablename, familys);
  126. //add record zkb
  127. HBaseTest.addRecord(tablename,"zkb","grade","","5");
  128. HBaseTest.addRecord(tablename,"zkb","course","","90");
  129. HBaseTest.addRecord(tablename,"zkb","course","math","97");
  130. HBaseTest.addRecord(tablename,"zkb","course","art","87");
  131. //add record  baoniu
  132. HBaseTest.addRecord(tablename,"baoniu","grade","","4");
  133. HBaseTest.addRecord(tablename,"baoniu","course","math","89");
  134. System.out.println("===========get one record========");
  135. HBaseTest.getOneRecord(tablename, "zkb");
  136. System.out.println("===========show all record========");
  137. HBaseTest.getAllRecord(tablename);
  138. System.out.println("===========del one record========");
  139. HBaseTest.delRecord(tablename, "baoniu");
  140. HBaseTest.getAllRecord(tablename);
  141. System.out.println("===========show all record========");
  142. HBaseTest.getAllRecord(tablename);
  143. } catch (Exception e) {
  144. e.printStackTrace();
  145. }
  146. }
  147. }

结果显示为:

create table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored baoniu to table scores ok.
insert recored baoniu to table scores ok.
===========get one record========
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5
===========show all record========
baoniu course:math 1345450733333 89
baoniu grade: 1345450733328 4
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5
===========del one record========
del recored baoniu ok.
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5
===========show all record========
zkb course: 1345450733304 90
zkb course:art 1345450733323 87
zkb course:math 1345450733316 97
zkb grade: 1345450733294 5

Hbase常用操作(增删改查)相关推荐

  1. HBase java 的增删改查

    HBase java 的增删改查 . 目前来看好像是我的最全了,应该是大佬不屑于写这种的吧 . 其实本来想写很多方法的,但是写着写着就有点烦了,再加上本人也不全是闲人一个,然后就给停了,看着有点乱,但 ...

  2. MySQL 之基础操作增删改查等

    一:MySQL基础操作 使用方法: 方式一: 通过图型界面工具,如 Navicat,DBeaver等 方式二: 通过在命令行敲命令来操作 SQL ( Structure query language ...

  3. 数据库的操作 增删改查 mysql

    数据库的操作 增删改查 mysql 登陆数据库 查看全部的数据库 系统提供的库,除了 test 是给我们练手的 其它的不要碰 mysql库,保存了系统重要内容,比如帐户 root帐户的用户名,密码,就 ...

  4. Mongodb命令操作增删改查

    Mongodb命令操作增删改查 需求描述 新增5 人 查询 修改 删除 数据结构 {"_id" : ObjectId("59f938235d93fc4af8a37114& ...

  5. NodeJS里如何连接MySQL并分别操作增删改查

    本文简介 Node.js 里连接 MySQL ,并分别操作增删改查 . 你需要在电脑里安装一下 MySQL ,最好再安装一个数据库管理工具.我使用的是 MySQL Workbench ,这是一款 My ...

  6. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...

  7. Django 07模型层—单表操作(增删改查)

    单表查询 一.数据库相关设置 ''' # Mysql连接配置 DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': ...

  8. java对mysql的简单操作——增删改查的总结

    增删改查的详细内容可以点击以下链接: java对mysql的简单操作--增加数据 java对mysql的简单操作--删除数据 java对mysql的简单操作--修改数据 java连接mysql5.1教 ...

  9. PHP:ThinkPHP5数据库操作增删改查-Model类

    1.Model的命名规范 一般model的名字和表名是对应的,例如 表名 pre_user -> 模型名 User.php User 表名 pre_user_info -> 模型名 Use ...

最新文章

  1. xmlrcp学习 - python中使用xmlrpc
  2. 计算机网络:第三章 数据链路层
  3. 12.PDE与PTE
  4. Spring-Bean依赖注入(引用数据类型和集合数据类型)
  5. 防爆知识:危险场所划
  6. TDD测试驱动开发案例【水货】
  7. java 实现pdf 转图片_java实现pdf转图片pdf
  8. 单片机课程设计八音盒
  9. 在软件测试面试过程中如何进行自我介绍?
  10. 【系统函数】2. 系统的因果性、稳定性
  11. Python站内文章精选大集合!
  12. 《写给大家看的设计书》《写给大家看的色彩书》《点石成金》《形式感》学习笔记...
  13. 使用html和css制作简单的网页
  14. Amdahl定律及木桶原理
  15. html js验证登录页面,js判断登录与否并确定跳转页面的方法
  16. 去哪里了?几部关于IT的剧推荐
  17. Matlab-Simulink_非线性模块组
  18. 阿里云Imagine Computing创新技术大赛正式开启!
  19. 31种互联网盈利创新模式
  20. ros学习心得(二)ros哲学

热门文章

  1. 解决前后端base64编码传递时的中文乱码问题
  2. 计算机网络-TCP协议
  3. 【Android 内存优化】libjpeg-turbo 函数库交叉编译 ( libjpeg-turbo 函数库下载 | libjpeg-turbo 编译文档 | 环境准备 | NASM 安装 )
  4. 【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )
  5. Servlet组件之一——Filter过滤器
  6. 设置 myeclipse 编码格式
  7. CPU调度(CPU Scheduling)
  8. 如何把VS Code的Language Server Protocol整合到Eclipse中来
  9. 关于Combobox的多选和单选情况
  10. 支付方式之线上和线下