Hbase记录-HBase增删改查
HBase创建数据
本章将介绍如何在HBase表中创建的数据。要在HBase表中创建的数据,可以下面的命令和方法:
- put 命令,
- add() - Put类的方法
- put() - HTable 类的方法.
作为一个例子,我们将在HBase中创建下表。
使用put命令,可以插入行到一个表。它的语法如下:
put ’<table name>’,’row1’,’<colfamily:colname>’,’<value>’
插入第一行
将第一行的值插入到emp表如下所示。
hbase(main):005:0> put 'emp','1','personal data:name','raju'
0 row(s) in 0.6600 seconds
hbase(main):006:0> put 'emp','1','personal data:city','hyderabad'
0 row(s) in 0.0410 seconds
hbase(main):007:0> put 'emp','1','professional
data:designation','manager'
0 row(s) in 0.0240 seconds
hbase(main):007:0> put 'emp','1','professional data:salary','50000'
0 row(s) in 0.0240 seconds
以相同的方式使用put命令插入剩余的行。如果插入完成整个表格,会得到下面的输出。
hbase(main):022:0> scan 'emp' ROW COLUMN+CELL
1 column=personal data:city, timestamp=1417524216501, value=hyderabad 1 column=personal data:name, timestamp=1417524185058, value=ramu 1 column=professional data:designation, timestamp=1417524232601, value=manager 1 column=professional data:salary, timestamp=1417524244109, value=50000 2 column=personal data:city, timestamp=1417524574905, value=chennai 2 column=personal data:name, timestamp=1417524556125, value=ravi 2 column=professional data:designation, timestamp=1417524592204, value=sr:engg 2 column=professional data:salary, timestamp=1417524604221, value=30000 3 column=personal data:city, timestamp=1417524681780, value=delhi 3 column=personal data:name, timestamp=1417524672067, value=rajesh 3 column=professional data:designation, timestamp=1417524693187, value=jr:engg
3 column=professional data:salary, timestamp=1417524702514, value=25000
使用Java API插入数据
可以使用Put 类的add()方法将数据插入到HBase。可以使用HTable类的put()方法保存数据。这些类属于org.apache.hadoop.hbase.client包。下面给出的步骤是在一个HBase表创建数据。
第1步:实例化配置类
Configuration类增加了 HBase 配置文件到它的对象。使用HbaseConfiguration类的create()方法,如下图所示的配置对象。
Configuration conf = HbaseConfiguration.create();
第2步:实例化HTable类
有一类名为HTable,在HBase中实现了Table。这个类用于单个HBase表进行通信。在这个类实例接受配置对象和表名作为参数。可以实例HTable类,如下图所示。
HTable hTable = new HTable(conf, tableName);
第3步:实例化Put类
为了将数据插入到HBase表中,需要使用add()方法和变体。这种方法属于Put类,因此实例化Put类。这个类必须要以字符串格式的列名插入数据。可以实例Put类,如下图所示。
Put p = new Put(Bytes.toBytes("row1"));
第4步:插入数据
Put类的add()方法用于插入数据。它需要代表列族,分别为:列限定符(列名称)3字节阵列,以及要插入的值。使用add()方法将数据插入HBase表如下图所示。
p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));
第5步:保存数据到表中
插入所需的行后,HTable类put实例的put()方法添加,如下所示保存更改。
hTable.put(p);
第6步:关闭HTable实例
创建在HBase的表数据之后,使用close()方法,如下所示关闭HTable实例。
hTable.close();
下面给出的是在HBase的表创建数据的完整程序。
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes; public class InsertData{ public static void main(String[] args) throws IOException { // Instantiating Configuration class
Configuration config = HBaseConfiguration.create(); // Instantiating HTable class
HTable hTable = new HTable(config, "emp"); // Instantiating Put class
// accepts a row name.
Put p = new Put(Bytes.toBytes("row1")); // adding values using add() method
// accepts column family name, qualifier/row name ,value
p.add(Bytes.toBytes("personal"),
Bytes.toBytes("name"),Bytes.toBytes("raju")); p.add(Bytes.toBytes("personal"),
Bytes.toBytes("city"),Bytes.toBytes("hyderabad")); p.add(Bytes.toBytes("professional"),Bytes.toBytes("designation"),
Bytes.toBytes("manager")); p.add(Bytes.toBytes("professional"),Bytes.toBytes("salary"),
Bytes.toBytes("50000")); // Saving the put Instance to the HTable.
hTable.put(p);
System.out.println("data inserted"); // closing HTable
hTable.close();
}
}
编译和执行上述程序如下所示。
$javac InsertData.java
$java InsertData
下面列出的是输出结果:
data inserted
HBase更新数据
可以使用put命令更新现有的单元格值。按照下面的语法,并注明新值,如下图所示。
put ‘table name’,’row ’,'Column family:column name',’new value’
新给定值替换现有的值,并更新该行。
示例
假设HBase中有一个表emp拥有下列数据
hbase(main):003:0> scan 'emp'
ROW COLUMN+CELL
row1 column=personal:name, timestamp=1418051555, value=raju
row1 column=personal:city, timestamp=1418275907, value=Hyderabad
row1 column=professional:designation, timestamp=14180555,value=manager
row1 column=professional:salary, timestamp=1418035791555,value=50000
1 row(s) in 0.0100 seconds
以下命令将更新名为“Raju'员工的城市值为'Delhi'。
hbase(main):002:0> put 'emp','row1','personal:city','Delhi'
0 row(s) in 0.0400 seconds
更新后的表如下所示,观察这个城市Raju的值已更改为“Delhi”。
hbase(main):003:0> scan 'emp'
ROW COLUMN+CELL
row1 column=personal:name, timestamp=1418035791555, value=raju
row1 column=personal:city, timestamp=1418274645907, value=Delhi
row1 column=professional:designation, timestamp=141857555,value=manager
row1 column=professional:salary, timestamp=1418039555, value=50000
1 row(s) in 0.0100 seconds
使用Java API更新数据
使用put()方法将特定单元格更新数据。按照下面给出更新表的现有单元格值的步骤。
第1步:实例化Configuration类
Configuration类增加了HBase的配置文件到它的对象。使用HbaseConfiguration类的create()方法,如下图所示的配置对象。
Configuration conf = HbaseConfiguration.create();
第2步:实例化HTable类
有一类叫HTable,实现在HBase中的Table类。此类用于单个HBase的表进行通信。在这个类实例,它接受配置对象和表名作为参数。实例化HTable类,如下图所示。
HTable hTable = new HTable(conf, tableName);
第3步:实例化Put类
要将数据插入到HBase表中,使用add()方法和它的变体。这种方法属于Put类,因此实例化Put类。这个类必须以字符串格式的列名插入数据。可以实例化Put类,如下图所示。
Put p = new Put(Bytes.toBytes("row1"));
第4步:更新现有的单元格
Put 类的add()方法用于插入数据。它需要表示列族,列限定符(列名称)3字节阵列,并要插入的值。将数据插入HBase表使用add()方法,如下图所示。
p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));
p.add(Bytes.toBytes("personal"),
Bytes.toBytes("city"),Bytes.toBytes("Delih"));
第5步:保存表数据
插入所需的行后,HTable类实例的put()方法添加如下所示保存更改。
hTable.put(p);
第6步:关闭HTable实例
创建在HBase的表数据之后,使用close()方法,如下所示关闭HTable实例。
hTable.close();
下面给出的是完整的程序,在一个特定的表更新数据。
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes; public class UpdateData{ public static void main(String[] args) throws IOException { // Instantiating Configuration class
Configuration config = HBaseConfiguration.create(); // Instantiating HTable class
HTable hTable = new HTable(config, "emp"); // Instantiating Put class
//accepts a row name
Put p = new Put(Bytes.toBytes("row1")); // Updating a cell value
p.add(Bytes.toBytes("personal"),
Bytes.toBytes("city"),Bytes.toBytes("Delih")); // Saving the put Instance to the HTable.
hTable.put(p);
System.out.println("data Updated"); // closing HTable
hTable.close();
}
}
编译和执行上述程序如下所示。
$javac UpdateData.java
$java UpdateData
下面列出的是输出结果:
data Updated
HBase读取数据
get命令和HTable类的get()方法用于从HBase表中读取数据。使用 get 命令,可以同时获取一行数据。它的语法如下:
get ’<table name>’,’row1’
下面的例子说明如何使用get命令。扫描emp表的第一行。
hbase(main):012:0> get 'emp', '1' COLUMN CELL personal : city timestamp=1417521848375, value=hyderabad personal : name timestamp=1417521785385, value=ramu professional: designation timestamp=1417521885277, value=manager professional: salary timestamp=1417521903862, value=50000 4 row(s) in 0.0270 seconds
读取指定列
下面给出的是语法,使用get方法读取指定列。
hbase>get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}
下面给出的示例,是用于读取HBase表中的特定列。
hbase(main):015:0> get 'emp', 'row1', {COLUMN=>'personal:name'} COLUMN CELL personal:name timestamp=1418035791555, value=raju 1 row(s) in 0.0080 seconds
使用Java API读取数据
从一个HBase表中读取数据,要使用HTable类的get()方法。这种方法需要Get类的一个实例。按照下面从HBase表中检索数据给出的步骤。
第1步:实例化Configuration类
Configuration类增加了HBase的配置文件到它的对象。使用HbaseConfiguration类的create()方法,如下图所示的配置对象。
Configuration conf = HbaseConfiguration.create();
第2步:实例化HTable类
有一类叫HTable,实现在HBase中的Table类。此类用于单个HBase的表进行通信。在这个类实例,它接受配置对象和表名作为参数。实例化HTable类,如下图所示。
HTable hTable = new HTable(conf, tableName);
第3步:实例化获得类
可以从HBase表使用HTable类的get()方法检索数据。此方法提取从一个给定的行的单元格。它需要一个 Get 类对象作为参数。创建如下图所示。
Get get = new Get(toBytes("row1"));
第4步:读取数据
当检索数据,可以通过ID得到一个单列,或得到一组行一组行ID,或者扫描整个表或行的子集。
可以使用Get类的add方法变种检索HBase表中的数据。
从特定的列族获取指定的列,使用下面的方法。
get.addFamily(personal)
要得到一个特定的列族的所有列,使用下面的方法。
get.addColumn(personal, name)
第5步:获取结果
获取结果通过Get类实例的HTable类的get方法。此方法返回Result类对象,其中保存所请求的结果。下面给出的是get()方法的使用。
Result result = table.get(g);
第6步:从Result实例读值
Result 类提供getValue()方法从它的实例读出值。如下图所示,使用它从Result 实例读出值。
byte [] value =
result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name"));
byte [] value1 =
result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city"));
下面给出的是从一个HBase表中读取值的完整程序
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes; public class RetriveData{ public static void main(String[] args) throws IOException, Exception{ // Instantiating Configuration class
Configuration config = HBaseConfiguration.create(); // Instantiating HTable class
HTable table = new HTable(config, "emp"); // Instantiating Get class
Get g = new Get(Bytes.toBytes("row1")); // Reading the data
Result result = table.get(g); // Reading values from Result class object
byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name")); byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city")); // Printing the values
String name = Bytes.toString(value);
String city = Bytes.toString(value1); System.out.println("name: " + name + " city: " + city);
}
}
编译和执行上述程序如下所示。
$javac RetriveData.java
$java RetriveData
下面列出的是输出:
name: Raju city: Delhi
HBase删除数据
从表删除特定单元格
使用 delete 命令,可以在一个表中删除特定单元格。 delete 命令的语法如下:
delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’
下面是一个删除特定单元格和例子。在这里,我们删除salary
hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds
删除表的所有单元格
使用“deleteall”命令,可以删除一行中所有单元格。下面给出是 deleteall 命令的语法。
deleteall ‘<table name>’, ‘<row>’,
这里是使用“deleteall”命令删去 emp 表 row1 的所有单元的一个例子。
hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds
使用scan命令验证表。表被删除后的快照如下。
hbase(main):022:0> scan 'emp' ROW COLUMN+CELL 2 column=personal data:city, timestamp=1417524574905, value=chennai 2 column=personal data:name, timestamp=1417524556125, value=ravi 2 column=professional data:designation, timestamp=1417524204, value=sr:engg 2 column=professional data:salary, timestamp=1417524604221, value=30000 3 column=personal data:city, timestamp=1417524681780, value=delhi 3 column=personal data:name, timestamp=1417524672067, value=rajesh 3 column=professional data:designation, timestamp=1417523187, value=jr:engg 3 column=professional data:salary, timestamp=1417524702514, value=25000
使用Java API删除数据
可以从使用HTable类的delete()方法删除HBase表数据。按照下面给出从表中删除数据的步骤。
第1步:实例化Configuration类
Configuration类增加了HBase配置文件到它的对象。可以创建使用HbaseConfiguration类的create()方法,如下图所示的Configuration 对象。
Configuration conf = HbaseConfiguration.create();
第2步:实例化HTable类
有一个类叫HTable,实现在HBase中的Table类。此类用于单个HBase的表进行通信。在这个类实例,它接受配置对象和表名作为参数。实例化HTable类,如下图所示。
HTable hTable = new HTable(conf, tableName);
第3步:实例化Delete 类
通过传递将要删除的行的行ID,在字节数组格式实例化Delete类。也可以通过构造时间戳和Rowlock。
Delete delete = new Delete(toBytes("row1"));
第4步:选择删除数据
可以使用Delete类的delete方法删除数据。这个类有各种删除方法。选择使用这些方法来删除列或列族。这里显示Delete类方法的用法在下面的例子。
delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"));
delete.deleteFamily(Bytes.toBytes("professional"));
第5步:删除数据
通过HTable类实例的delete()方法,如下所示删除所选数据。
table.delete(delete);
第6步:关闭HTable实例
删除数据后,关闭HTable实例。
table.close();
下面给出的是从HBase表中删除的数据的完整程序。
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.util.Bytes; public class DeleteData { public static void main(String[] args) throws IOException { // Instantiating Configuration class
Configuration conf = HBaseConfiguration.create(); // Instantiating HTable class
HTable table = new HTable(conf, "employee"); // Instantiating Delete class
Delete delete = new Delete(Bytes.toBytes("row1"));
delete.deleteColumn(Bytes.toBytes("personal"), Bytes.toBytes("name"));
delete.deleteFamily(Bytes.toBytes("professional")); // deleting the data
table.delete(delete); // closing the HTable object
table.close();
System.out.println("data deleted.....");
}
}
编译和执行上述程序如下所示。
$javac Deletedata.java
$java DeleteData
下面列出的是输出:
data deleted
Hbase记录-HBase增删改查的更多相关文章
- Hbase常用操作(增删改查)
Hbase常用操作(增删改查) [日期:2014-01-03] 来源:Linux社区 作者:net19880504 [字体:大 中 小] 运行Eclipse,创建一个新的Java工程“HBa ...
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...
- mysql对库,表及记录的增删改查
破解密码 #1.关闭mysqlnet stop mysqlmysql还在运行时需要输入命令关闭,也可以手动去服务关闭 #2.重新启动mysqld --skip-grant-tables跳过权限 #3m ...
- 完成在本机远程连接HBase进行数据增删改查
1.进行hbase与本机远程连接测试连接 1.1 修改虚拟机文件hbase-site.xml(cd/usr/local/hbase/conf)文件,把localhost换成你的虚拟机主机名字 1.2修 ...
- MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能
数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...
- HDFS只支持文件append操作, 而依赖HDFS的HBase如何完成增删改查功能
其实HBase/LevelDB等系统,背后都应用了Log-structured merge tree.HBase的写操作有两个步骤:1) 写入HLog(防止宕机丢失数据), 2) 写入对应的Memst ...
- HBase命令(三) -- 增删改查
新增 //语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp> //新增或 ...
- Hbase标准配置文件 + 增删改查
1.可用配置文件 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href=&q ...
- java实现hbase数据库的增删改查操作(新API)
操作环境: java版本: jdk 1.7以上 hbase 版本:1.2.x hadoop版本:2.6.0以上 实现功能: 1,创建指定表 2,删除指定表 3,根据表名,行键,列族,列描述符,值 ...
- HBASE常用操作增删改查
http://javacrazyer.iteye.com/blog/1186881 http://www.cnblogs.com/invban/p/5667701.html
随机推荐
- PAT 1038 统计同成绩学生
https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040 本题要求读入N名学生的成绩,将获得某一给定分 ...
- DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST
Delphi XE10,Json 生成和解析,再利用indyhttp控件Post 年09月20日 :: 阅读数: --不多说,直接上代码 procedure TFrmMain.Brand; var J ...
- 面象对象设计原则之六:迪米特原则(LeastKnowledge Principle, LKP)
迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目.迪米特法则又称为最少知识原则(LeastKnowledge Princip ...
- 彻底弄懂jsonp原理及实现方法
一. 同源策略 所有支持Javascript的浏览器都会使用同源策略这个安全策略.看看百度的解释: 同源策略,它是由Netscape提出的一个著名的安全策略. 现在所有支持JavaScript 的浏览 ...
- [转帖]VBS 教程
VBS教程 http://www.cnblogs.com/veggiegfei/p/5943260.html 原作者真牛B 网上找了好多 没找到 没想到整理的这么好, 转来学习一下 改天打印出来. V ...
- 浏览器的F5和Ctrl+F5
在浏览器里中,按F5键和按F5同时按住Ctrl键(简称Ctrl+F5),效果是不同,到底两者有什么区别呢? 假如我第一次访问过http://localhost/home,这个网页是个动态网页,每次访问 ...
- [转帖] “王者对战”之 MySQL 8 vs PostgreSQL 10
原贴地址:https://www.oschina.net/translate/showdown-mysql-8-vs-postgresql-10?lang=chs&page=2# 英文原版地址 ...
- ubunut下使用kubeadm离线安装k8s1.9
模仿转载的那个博客,简单记录下过程. 需要的文件. 原贴里面的:http://www.bladewan.com/2018/01/02/kubernetes_install/ 镜像文件,以及单独下载一些 ...
- jquery Ajax noConflict()
如果幾個框架都在使用$作為標識符,那麼這個時候可以使用noConflict()處理衝突. 可以直接使用jquery代替簡寫,也可以定義變量,也可以將$賦值給ready函數,函數內部可以使用快捷方式,不 ...
- const,static,volatile关键字的作用
const关键字: 1.欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了: 2.对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为 ...