HBaseConfiguration是用来配置HBase的对象。
意思是把HBase的配置文件添加到配置信息中,这个类继承自org.apache.hadoop.conf.Configuration,
他只有两个过时的构造方法,这里不讲。他还有两个静态的创造配置文件的方法,
create() 和create(org.apache.hadoop.conf.Configuration that)
无参数的是创建一个新的与Hbase的资源配置,带参数的是创建一个资源配置的副本。
资源配置创建好了,我们还需要手动设置配置的位置。
用Confguration的set方法:
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "服务器地址");
配置搞定。
---
创建表
使用HBaseAdmin
它提供了一个接口来管理HBase的数据库表的元数据。使用HBaseAdmin可以创建,删除,查看,启用和禁用表。它也使用添加和删除表列的字段。
setMaxFileSize,指定最大的region size
setMemStoreFlushSize 指定memstore flush到HDFS上的文件大小
setTimeToLive:指定最大的TTL,单位是ms,过期数据会被自动删除。
setInMemory:指定是否放在内存中,对小表有用,可用于提高效率。默认关闭
setBloomFilter:指定是否使用BloomFilter,可提高随机查询效率。默认关闭
setCompressionType:设定数据压缩类型。默认无压缩。
setMaxVersions:指定数据最大保存的版本个数。默认为3。
一个简单的例子:
public static void creatTable() {
HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists("table")) {
admin.disableTable("table");
admin.deleteTable("table");
}
HTableDescriptor tableDescripter = new HTableDescriptor("table".getBytes());
tableDescripter.addFamily(new HColumnDescriptor("one"));
tableDescripter.addFamily(new HColumnDescriptor("two"));
tableDescripter.addFamily(new HColumnDescriptor("three"));
admin.createTable(tableDescripter);
}
删除表
删除表也是通过HBaseAdmin来操作,删除表之前首先要disable表。这是一个非常耗时的操作,所以不建议频繁删除表。
disableTable和deleteTable分别用来disable和delete表。
Example:
HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);
if (hAdmin.tableExists(tableName)) {
hAdmin.disableTable(tableName);
hAdmin.deleteTable(tableName);
}
查询数据
查询分为单条随机查询和批量查询。
单条查询是通过rowkey在table中查询某一行的数据。HTable提供了get方法来完成单条查询。
批量查询是通过制定一段rowkey的范围来查询。HTable提供了个getScanner方法来完成批量查询。
public Result get(final Get get)
public ResultScanner getScanner(final Scan scan)
Get对象包含了一个Get查询需要的信息。它的构造方法有两种:
public Get(byte [] row)
public Get(byte [] row, RowLock rowLock)
Rowlock是为了保证读写的原子性,你可以传递一个已经存在Rowlock,否则HBase会自动生成一个新的rowlock。
Scan对象提供了默认构造函数,一般使用默认构造函数。
Get/Scan的常用方法有:
addFamily/addColumn:指定需要的family或者column,如果没有调用任何addFamily或者Column,会返回所有的columns.
setMaxVersions:指定最大的版本个数。如果不带任何参数调用setMaxVersions,表示取所有的版本。如果不掉用setMaxVersions,只会取到最新的版本。
setTimeRange:指定最大的时间戳和最小的时间戳,只有在此范围内的cell才能被获取。
setTimeStamp:指定时间戳。
setFilter:指定Filter来过滤掉不需要的信息
Scan特有的方法:
setStartRow:指定开始的行。如果不调用,则从表头开始。
setStopRow:指定结束的行(不含此行)。
setBatch:指定最多返回的Cell数目。用于防止一行中有过多的数据,导致OutofMemory错误。
ResultScanner是Result的一个容器,每次调用ResultScanner的next方法,会返回Result.
public Result next() throws IOException;
public Result [] next(int nbRows) throws IOException;
Result代表是一行的数据。常用方法有:
getRow:返回rowkey
raw:返回所有的key value数组。
getValue:按照column来获取cell的值
Example:
Scan s = new Scan();
s.setMaxVersions();
ResultScanner ss = table.getScanner(s);
for(Result r:ss){
System.out.println(new String(r.getRow()));
for(KeyValue kv:r.raw()){
System.out.println(new String(kv.getValue()));
}
}
插入数据
HTable通过put方法来插入数据。
public void put(final Put put) throws IOException
public void put(final List<Put> puts) throws IOException
可以传递单个批Put对象或者List put对象来分别实现单条插入和批量插入。
Put提供了3种构造方式:
public Put(byte [] row)
public Put(byte [] row, RowLock rowLock)
public Put(Put putToCopy)
Put常用的方法有:
add:增加一个Cell
setTimeStamp:指定所有cell默认的timestamp,如果一个Cell没有指定timestamp,就会用到这个值。如果没有调用,HBase会将当前时间作为未指定timestamp的cell的timestamp.
setWriteToWAL: WAL是Write Ahead Log的缩写,指的是HBase在插入操作前是否写Log。默认是打开,关掉会提高性能,但是如果系统出现故障(负责插入的Region Server挂掉),数据可能会丢失。
另外HTable也有两个方法也会影响插入的性能
setAutoFlash: AutoFlush指的是在每次调用HBase的Put操作,是否提交到HBase Server。默认是true,每次会提交。如果此时是单条插入,就会有更多的IO,从而降低性能.
setWriteBufferSize: Write Buffer Size在AutoFlush为false的时候起作用,默认是2MB,也就是当插入数据超过2MB,就会自动提交到Server
Example:
HTable table = new HTable(hbaseConfig, tableName);
table.setAutoFlush(autoFlush);
List<Put> lp = new ArrayList<Put>();
int count = 10000;
byte[] buffer = new byte[1024];
Random r = new Random();
for (int i = 1; i <= count; ++i) {
Put p = new Put(String.format(“row%09d”,i).getBytes());
r.nextBytes(buffer);
p.add(“f1″.getBytes(), null, buffer);
p.add(“f2″.getBytes(), null, buffer);
p.add(“f3″.getBytes(), null, buffer);
p.add(“f4″.getBytes(), null, buffer);
p.setWriteToWAL(wal);
lp.add(p);
if(i%1000==0){
table.put(lp);
lp.clear();
}
}
删除数据
HTable 通过delete方法来删除数据。
public void delete(final Delete delete)
Delete构造方法有:
public Delete(byte [] row)
public Delete(byte [] row, long timestamp, RowLock rowLock)
public Delete(final Delete d)
Delete常用方法有
deleteFamily/deleteColumns:指定要删除的family或者column的数据。如果不调用任何这样的方法,将会删除整行。
注意:如果某个Cell的timestamp高于当前时间,这个Cell将不会被删除,仍然可以查出来。
Example:
HTable table = new HTable(hbaseConfig, “mytest”);
Delete d = new Delete(“row1″.getBytes());
table.delete(d)
切分表
HBaseAdmin提供split方法来将table 进行split.
public void split(final String tableNameOrRegionName)
如果提供的tableName,那么会将table所有region进行split ;如果提供的region Name,那么只会split这个region.
由于split是一个异步操作,我们并不能确切的控制region的个数。
Example:
public void split(String tableName,int number,int timeout) throws Exception {
Configuration HBASE_CONFIG = new Configuration();
HBASE_CONFIG.set(“hbase.zookeeper.quorum”, GlobalConf.ZOOKEEPER_QUORUM);
HBASE_CONFIG.set(“hbase.zookeeper.property.clientPort”, GlobalConf.ZOOKEEPER_PORT);
HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG);
HBaseAdmin hAdmin = new HBaseAdmin(cfg);
HTable hTable = new HTable(cfg,tableName);
int oldsize = 0;
t = System.currentTimeMillis();
while(true){
int size = hTable.getRegionsInfo().size();
logger.info(“the region number=”+size);
if(size>=number ) break;
if(size!=oldsize){
hAdmin.split(hTable.getTableName());
oldsize = size;
} else if(System.currentTimeMillis()-t>timeout){
break;
}
Thread.sleep(1000*10);
}
}
分享到:
相关推荐
### Hadoop之Hbase从入门到精通 #### HBase技术介绍与概述 HBase是一种分布式、高可靠性且高性能的列式存储系统,它基于Hadoop生态体系构建,并且能够支持大规模的数据存储需求。HBase的设计灵感来源于Google的...
Hadoop之HBase从入门到精通 本文将详细介绍HBase技术,从基础概念到高级应用,旨在帮助读者快速掌握HBase技术。 一、HBase技术介绍 HBase是Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储...
### HBase从入门到编程——核心知识点解析 #### 一、HBase简介 **HBase** 是一个构建在 **Hadoop** 分布式文件系统 (HDFS) 之上的分布式、可扩展、高性能的列族数据库。它为海量数据提供了灵活的存储方式,并支持...
"Hadoop之Hbase从入门到精通" HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。HBase 是 Google Bigtable 的开源实现,类似 ...
### HBase入门与使用 HBase作为Apache Hadoop生态系统中的一个关键组件,提供了一种分布式、版本化的非关系型数据库,特别适用于大规模数据处理。它借鉴了Google Bigtable的设计理念,能够实现在廉价硬件上存储PB...
HBase入门和使用知识点总结: 1. HBase基本介绍: HBase是建立在Hadoop文件系统(HDFS)之上的一种开源、分布式、可扩展的非关系型数据库。它是一种列式存储系统,模仿Google的Bigtable模型,适用于海量数据的实时...
### HBase从入门到精通——关键技术点解析 #### 一、HBase技术概览 **HBase**(Hadoop Database)是一种分布式、可扩展的NoSQL数据库系统,它基于Google Bigtable论文的思想构建而成,并且作为Apache Hadoop生态...
HDFS+MapReduce+Hive+HBase十分钟快速入门,包括这几个部分的简单使用
### Zookeeper快速入门知识点 #### 一、Zookeeper基本功能及应用场景 Zookeeper是一个分布式的、开放源码的协调服务,用于大型应用中管理和协调分布式环境下的服务。它提供了简单的接口来实现复杂的一致性问题,如...
本文接着上期介绍的”简单了解Hbase及快速入手之入门教程_01“,着重介绍了hbase的伪分布式部署以及hbase的过滤器。适合刚入门或者刚接触的小伙伴参考。
01.Storm项目实战课程大纲02.CDH5搭建之CM5安装部署03.CDH5搭建和CM界面化集群管理04.Hadoop、HBase、Zookeeper集群管理和角色分配05.Kafka基础知识和集群搭建06.Kafka基本操作和最优设置07.Kafka Java API 简单开发...
- **命令行工具**:讲解了如何使用HBase Shell进行简单的交互式操作。 - **停止集群**:提供了停止HBase集群服务的步骤。 5. **第3章:客户端API基础知识** - **一般注意事项**:指出了使用HBase客户端API时需要...
例如,对于生产环境,可能需要更加稳定和可控的部署方式,而开发环境则可能更倾向于快速和简单的安装方式。 HBase读写流程: HBase的读写流程对于性能至关重要。写入数据时,数据首先被写入到WAL(Write-Ahead Log...
根据提供的文件信息,我们可以总结出以下关于HBase与Hadoop结合使用的大数据系统入门的关键知识点: ### HBase简介 HBase是一种分布式、可扩展的列式存储系统,它基于Google的Bigtable论文设计并实现。HBase是...
- **第2章:入门指南**:通过一个简单的例子来展示如何安装配置HBase环境,以及如何使用命令行工具进行基本操作,如创建表、插入数据和查询数据。 - **第3章:分布式HBase、HDFS和MapReduce**:深入探讨HBase如何...
《HBase教程:简单易懂,初学者必备》 在大数据处理领域,HBase作为一款分布式、列式存储的NoSQL数据库,因其高效、可扩展的特性,深受广大开发者的青睐。尤其对于初学者而言,掌握HBase的基本概念、操作与应用是至...
给出一份我们日常都可以接触到的数据样例,先简单给出示例数据的字段定义:示例数据字段定义本文力求简洁,仅给出了最简单的几个字段定义。如下是”虚构”的样例数据:示例数据在本文大部分内容中所涉及的一条数据,...
进公司的第一个课题,内含hbase基础、其数据存储的物理视图、逻辑视图、hbase shell的简单介绍、hbase的架构分析及读写流程、和简单的crud操作,为了讲许多知识可能介绍不是很完全,不懂的可私聊,毕竟同为萌新,...