Hbase的基本操作(CDH组件可用)
Habse创建一张表:
1,创建一个命名空间NameSpace(命名空间NameSpace指的是一个表的逻辑分组 ,同一分组中的各个表有类似的用途,相当于关系型数据库中的DataBase)
admin.createNamespace(NamespaceDescriptor.create("MyNamespace").build());
NamespaceDescriptor类用于对NameSpace的描述
在Hbase中,命名空间、表、列族的创建,都需要先进行描述NamespaceDescriptor、HTableDescriptor、HColumnDescriptor,才能进行相应的操作。
2,创建一张表
//创建tablename对象,描述表的名称信息,命名空间在此处使用
TableName tname = TableName.valueOf("MyNamespace:students");
//创建HTableDescriptor对象,描述表信息
HTableDescriptor tDescriptor = new HTableDescriptor(tname);
//创建HColumnDescriptor对象,描述列族信息
HColumnDescriptor famliy = new HColumnDescriptor("core");
//将列族的描述信息添加进表的描述信息
tDescriptor.addFamily(famliy);
//利用表的描述信息创建一张表
admin.createTable(tDescriptor);
HBase主要的四类操作,分别是:
Put :增加一行,修改一行
Delete :删除一行,删除指定列族,删除指定column的多个版本,删除指定column的制定版本等
Get :获取指定行的所有信息,获取指定行和指定列族的所有colunm,获取指定column,获取指定column的几个版本,获取指定column的指定版本等
Scan :获取所有行,获取指定行键范围的行,获取从某行开始的几行,获取满足过滤条件的行等
maven依赖:
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-it</artifactId>
<version>1.1.2</version>
</dependency>
Java API操作:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; /**
* @Author:Xavier
* @Data:2019-02-20 15:48
**/ public class OptionTest {
private Admin admin = null;
private Connection connection = null;
private Configuration conf = null;
private TableName tname = null; @Before
public void init() throws IOException {
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "nn01,nn02,dn01,dn02,dn03,dn04");
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.master", "dn01:60000"); connection = ConnectionFactory.createConnection(conf); admin = connection.getAdmin();
} //创建一张表,指定表名,列族
@Test
public void createTabl() throws IOException { try {
admin.createNamespace(NamespaceDescriptor.create("MyNamespace").build());
} catch (NamespaceExistException e) {
System.out.println("该命名空间已经存在");
} //创建tablename对象,描述表的名称信息
tname = TableName.valueOf("MyNamespace:students");
//创建HTableDescriptor对象,描述表信息
HTableDescriptor tDescriptor = new HTableDescriptor(tname);
if (admin.tableExists(tname)) {
System.out.println("students" + "存在!");
System.exit(0);
} else {
HColumnDescriptor famliy = new HColumnDescriptor("core");
tDescriptor.addFamily(famliy);
admin.createTable(tDescriptor);
System.out.println("创建表成功!");
}
} //获取所有的表
@Test
public void getAllTable() {
if (admin != null) {
try {
HTableDescriptor[] alltable = admin.listTables();
for (HTableDescriptor hTableDesc : alltable) {
System.out.println(hTableDesc.getNameAsString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
} //删除表
@Test
public void deleteTab() throws IOException {
tname = TableName.valueOf("MyNamespace:students");
if (admin.tableExists(tname)) {
admin.disableTable(tname);//先禁用表才能删除
admin.deleteTable(tname);
System.out.println("删除表成功!");
} else {
System.out.println("表不存在");
}
} //插入一条数据
@Test
public void addOneRecord() throws IOException { //通过连接查询tableName对象
tname = TableName.valueOf("MyNamespace:students"); if(admin.tableExists(tname)) { Table table = connection.getTable(tname); Put put = new Put(Bytes.toBytes("lisi"));
put.add(Bytes.toBytes("core"), Bytes.toBytes("math"), Bytes.toBytes("98")); table.put(put);
System.out.println("插入数据成功!");
}else {
System.out.println("插入数据失败");
}
} //插入多条数据
@Test
public void moreInsert() throws IOException {
//测试在数据前补零
DecimalFormat format = new DecimalFormat();
format.applyPattern("0000"); tname = TableName.valueOf("MyNamespace:students"); HTable htable = (HTable) connection.getTable(tname); //不要自动清理缓冲区
htable.setAutoFlush(false); // 一个put代表一行数据,再new一个put表示第二行数据,每行一个唯一的RowKey
for (int i = 1; i < 10000; i++) {
Put put = new Put(Bytes.toBytes("leilei" + format.format(i)));
//关闭写前日志
put.setWriteToWAL(false); put.addColumn(Bytes.toBytes("core"), Bytes.toBytes("math"), Bytes.toBytes(format.format(i)));
put.addColumn(Bytes.toBytes("core"), Bytes.toBytes("english"), Bytes.toBytes(format.format(Math.random() * i)));
put.addColumn(Bytes.toBytes("core"), Bytes.toBytes("chinese"), Bytes.toBytes(format.format(Math.random() * i)));
htable.put(put); if (i % 2000 == 0) {
htable.flushCommits();
}
}
htable.flushCommits();
htable.close();
} //通过RowKey,faimly,colum获取cell数据
@Test
public void getData() throws IOException {
tname = TableName.valueOf("MyNamespace:students"); Table table = connection.getTable(tname); //通过RowKey
Get get = new Get(Bytes.toBytes("lisi")); Result result = table.get(get); System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("core"), Bytes.toBytes("math"))));
} //扫描在rowkey范围内的cell数据
@Test
public void deleteRangeRK() throws IOException {
tname = TableName.valueOf("MyNamespace:students");
Table table = connection.getTable(tname); Scan scan = new Scan(); scan.setStartRow(Bytes.toBytes("leilei1000"));
scan.setStopRow(Bytes.toBytes("leilei9999")); ResultScanner resultScanner = table.getScanner(scan); Iterator<Result> iterator = resultScanner.iterator();
while (iterator.hasNext()) {
System.out.println(Bytes.toString((iterator.next()).getValue(Bytes.toBytes("core"), Bytes.toBytes("english"))));
// System.out.println((iterator.next()).toString());
}
} //KeyValue形式查询一行的数据
@Test
public void getValueFromKey() throws IOException {
tname = TableName.valueOf("MyNamespace:students");
Table table = connection.getTable(tname);
Get get = new Get(Bytes.toBytes("lisi")); Result result = table.get(get);
if (result.raw().length == 0) {
System.out.println("不存在该关键字的行!!"); } else {
for (Cell kv : result.rawCells()) {
System.out.println(
"列:"+Bytes.toString(CellUtil.cloneFamily(kv))+":"+Bytes.toString(CellUtil.cloneQualifier(kv))
+"\t 值:"+Bytes.toString(CellUtil.cloneValue(kv)));
} }
} //KeyValue形式查询所有的数据
@Test
public void getAllData() throws Exception {
tname = TableName.valueOf("MyNamespace:students");
Table table = connection.getTable(tname); Scan scan = new Scan();
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
for (KeyValue kv : r.raw()) {
System.out.println(Bytes.toString(kv.getKey())
+ Bytes.toString(kv.getValue()));
}
}
} // 删除一行Hbase表中记录信息的
@Test
public void deleteRecord() throws IOException {
tname = TableName.valueOf("MyNamespace:students");
Table table = connection.getTable(tname);
Delete de = new Delete(Bytes.toBytes("leilei9997"));
try {
table.delete(de);
System.out.println("删除记录成功!!!");
} catch (IOException e) {
System.out.println("删除记录异常!!!"); }
} @After
public void destory() throws IOException {
admin.close();
connection.close();
}
}
Hbase的基本操作(CDH组件可用)的更多相关文章
- hbase shell 基本操作
hbase shell 基本操作 启动HBASE [hadoop@master ~]$hbase shell 2019-01-24 13:53:59,990 WARN [main] ut ...
- 1.3.3、CDH 搭建Hadoop在安装之前(端口---CDH组件使用的端口)
列出的所有端口都是TCP. 在下表中,每个端口的“ 访问要求”列通常是“内部”或“外部”.在此上下文中,“内部”表示端口仅用于组件之间的通信; “外部”表示该端口可用于内部或外部通信. Compone ...
- HBase可用性分析与高可用实践
HBase作为一个分布式存储的数据库,它是如何保证可用性的呢?对于分布式系统的CAP问题,它是如何权衡的呢? 最重要的是,我们在生产实践中,又应该如何保证HBase服务的高可用呢? 下面我们来仔细分析 ...
- 2、CDH组件安装
一.zookeeper 1.安装 继续->完成: 二.HDFS 1.安装 继续->完成: 三.yarn.hive 1.安装yarn 继续->完成: 2.安装hive 继续->完 ...
- HBase的基本操作
1.输入hbase shell进入HBase shell
- Hbase shell基本操作
1.启动cd <hbase_home>/bin$ ./start-hbase.sh 2.启动hbase shell # find hadoop-hbase dfs fileshadoop ...
- java对Hbase的基本操作
1.新建一个普通java项目,把${hbase}/lib/目录下的jar包全部导入 2.导出jar文件如下 3.运行 注意:需要先把jar文件导入到hbase路径里去,然后运行相应的类 4.查看数据 ...
- CDH高可用hadoop集群性能配置
1.HDFS的高可用配置 dfs.namenode.edits.dir (NameNode 编辑目录) : 写入 NameNode 编辑的本地文件系统上的目录.未指定将存放在namenode数据目录中 ...
- RN组件可用属性整理
随机推荐
- C++中字符串换行(如何拆分为多行)
在C/C++语言中,可能我们要书写的一个字符串太长了,放在一行上影响代码的可读性.这时我们就需要多行书写了. 字符串多行书写有两种规则: 1. 在字符串换行处加一个反斜杠’\’,下一行前不能有空 ...
- spring boot 监听器实例
在日常项目中订单创建成功后,会有类似各式各样的通知.有站内通知.短信通知.微信,app通知. 伪代码: 这里,只用伪代码示例.各式各样的通知 肯定不只一行代码.只是简化.如果后续还要增加各种各样的通知 ...
- Exce 快捷键 tips
1. 填充快捷键 ctrl+R 向下填充 CTRL+D 向右填充 2. 筛选快捷键 CTRL+SHIFT+L 3. 移动到当前区域的边缘: Ctrl + shift + 方向箭头 4. 字符连接:& ...
- ubuntu安装后环境配置
首先实现能够连接外网,宿主机和虚拟机能ping通 进行smb的配置,能实现pytty的远程连接. 首先apt-get update 安装ssh apt-get install ssh 打开ssh服务 ...
- HTTP 响应代码
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成.响应分为五类:信息响应, ...
- 每日一练之贪心算法(P2587)
洛谷——P2587 [ZJOI2008]泡泡堂 两队人马进行比赛, 战斗力值各有差异, 如果一方获胜得两分,战平各得一分,失败不得分,求可取得的最佳战绩与最差战绩. 思路:1)最强的打得过最强的就直接 ...
- Ubuntu下安装pytorch(GPU版)
我这里主要参考了:https://blog.csdn.net/yimingsilence/article/details/79631567 并根据自己在安装中遇到的情况做了一些改动. 先说明一下我的U ...
- Golang源码探索(二) 协程的实现原理(转)
Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱,虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底 ...
- Innodb引擎中Count(*)
select count(*)是MySQL中用于统计记录行数最常用的方法,count方法可以返回表内精确的行数. 在某些索引下是好事,但是如果表中有主键,count(*)的速度就会很慢,特别在千万记录 ...
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...