- 浏览: 155316 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (113)
- Java工具类 (3)
- Hibernate (1)
- Struts>1&2 (0)
- Spring (0)
- Web前端 (1)
- 数据库 (2)
- 中间件 (3)
- 搜索引擎 (11)
- EJB (1)
- Log日志 (1)
- OS操作系统 (7)
- Java文档 (4)
- Security (1)
- Exception&Error (7)
- 日志&心情 (7)
- 开心一下 (3)
- 云计算 (41)
- Cache缓存 (4)
- MongoDB (1)
- OS操作系统 Linux (7)
- jquery (1)
- 机器学习 (2)
- Plugins (2)
- AJAX (1)
- Java工具 (1)
- WebService (1)
最新评论
-
a420144030:
你好,我想计算n篇文章的相似度,用mahout能处理吗,如何做 ...
mahout使用 -
di1984HIT:
OK,真的很牛啊
hadoop常见错误 -
xwl1991:
还真是这个问题 !
quartz报错java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.ord
Version: 0.20.x
-
配置
HBaseConfiguration 是每一个 hbase client 都会使用到的对象,它代表的是 HBase 配置信息。它有两种构造方式:
public HBaseConfiguration()
public HBaseConfiguration(final Configuration c)
默认的构造方式会尝试从 hbase-default.xml 和 hbase-site.xml 中读取配置。如果 classpath 没有这两个文件,就需要你自己设置配置。
Configuration HBASE_CONFIG = new Configuration();
HBASE_CONFIG.set(“hbase.zookeeper.quorum”, “zkServer”);
HBASE_CONFIG.set(“hbase.zookeeper.property.clientPort”, “2181″);
HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG);
-
创建表
创建表是通过 HBaseAdmin 对象来操作的。 HBaseAdmin 负责表的 META 信息处理。 HBaseAdmin 提供了 createTable 这个方法:
public void createTable(HTableDescriptor desc)
HTableDescriptor 代表的是表的 schema, 提供的方法中比较有用的有
setMaxFileSize ,指定最大的 region size
setMemStoreFlushSize 指定 memstore flush 到 HDFS 上的文件大小
增加 family 通过 addFamily 方法
public void addFamily(final HColumnDescriptor family)
HColumnDescriptor 代表的是 column 的 schema ,提供的方法比较常用的有
setTimeToLive: 指定最大的 TTL, 单位是 ms, 过期数据会被自动删除。
setInMemory: 指定是否放在内存中,对小表有用,可用于提高效率。默认关闭
setBloomFilter: 指定是否使用 BloomFilter, 可提高随机查询效率。默认关闭
setCompressionType: 设定数据压缩类型。默认无压缩。
setMaxVersions: 指定数据最大保存的版本个数。默认为 3 。
一个简单的例子,创建了 4 个 family 的表:
HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);
HTableDescriptor t = new HTableDescriptor(tableName);
t.addFamily(new HColumnDescriptor(“f1″));
t.addFamily(new HColumnDescriptor(“f2″));
t.addFamily(new HColumnDescriptor(“f3″));
t.addFamily(new HColumnDescriptor(“f4″));
hAdmin.createTable(t);
-
删除表
删除表也是通过 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.getColumn()));
}
}
-
插入数据
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);
}
}
发表评论
-
用Sqoop把数据从HDFS导入到MYSQL
2012-10-27 23:30 2356转自:http://www.kaifajie.cn/mySQL ... -
大数据的储存:百度HDFS集群的数据压缩
2012-08-30 17:48 12112012年4月13日,由IT168(ITP ... -
用sqoop进行mysql和hdfs系统间的数据互导
2012-07-31 16:32 1944转自:http://abloz.com/2012/07/19/ ... -
从hive将数据导出到mysql
2012-07-31 16:31 1826转自:http://abloz.com/2012/07/20/ ... -
Hive SQL
2012-07-19 13:49 1427转自:http://www.tbdata.org/ ... -
Hive优化总结
2012-07-09 15:18 4335优化时,把hive sql当做ma ... -
hadoop/mapred 优化方法
2012-06-12 11:47 1397从三个方面着手优化 : 1. hadoop配置 2. ... -
hadoop集群dfs.data.dir目录权限问题导致节点无法启动
2012-06-11 18:32 6229安装使用Hive的时候发现文件无法从本地拷贝到hadoo ... -
hadoop中的balancer
2012-06-11 15:49 1148对于HDFS集群,经常长时间的运行,尤其是大量的delete操 ... -
Hadoop集群上使用Lzo压缩
2012-05-28 11:03 935转自:http://www.tech126.com/hadoo ... -
使用Hive读取Hbase中的数据
2012-05-23 13:12 2277转自:http://www.4ucode.com/Study/ ... -
在XP系统下配置eclipse集成hadoop开发
2012-05-05 11:09 1051一、目的:由于hadoop只能在Linux环境下运行,所以对于 ... -
使用Hive读取Hbase中的数据
2012-04-18 14:24 1100转自:http://www.4ucode.com/Study/ ... -
Web日志分析方法概述 让复杂的数据挖掘变得简单可行
2012-04-13 16:31 875志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志 ... -
应用sqoop将MySQL数据库中的数据导入Hbase
2012-04-12 11:31 2066转自:http://www.bwxxkj.com/a/jish ... -
hadoop中的trash机制,恢复删除的文件
2012-03-31 13:46 2203Hadoop回收站trash,默认是关闭的。 1.修改con ... -
Hadoop 和DBMS 的互补性
2012-03-29 12:22 675随着Microsoft 也加入Hadoop 阵营,Hadoop ... -
Hadoop 中的两表join
2012-03-29 12:20 853转自:http://www.gemini52013 ... -
各版本编译hadoop eclipse plugin
2012-03-29 12:19 1386转自:http://www.gemini52013 ... -
hadoop常见错误
2012-03-24 13:04 1674错误1:bin/hadoop dfs 不能正常启动,持续提 ...
相关推荐
### HBase客户端API指南知识点详解 #### 一、HBase数据读写流程 **1.1 创建表** 在HBase中,创建表是一项关键任务,通常由`Master`节点完成。这一过程涉及到以下步骤: - **获取Master地址**: 客户端首先需要从...
赠送原API文档:hbase-client-1.4.3-javadoc.jar; 赠送源代码:hbase-client-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.4.3.pom; 包含翻译后的API文档:hbase-client-1.4.3-javadoc-API文档-...
《HbaseClient详解》 HbaseClient是Apache HBase的核心组件之一,它是客户端与HBase分布式数据库进行交互的桥梁。本文将深入探讨HbaseClient的工作原理、主要功能以及使用技巧,帮助读者更好地理解和掌握HBase的...
赠送原API文档:hbase-client-1.1.2-javadoc.jar; 赠送源代码:hbase-client-1.1.2-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.1.2.pom; 包含翻译后的API文档:hbase-client-1.1.2-javadoc-API文档-...
赠送原API文档:hbase-client-1.2.12-javadoc.jar; 赠送源代码:hbase-client-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.2.12.pom; 包含翻译后的API文档:hbase-client-1.2.12-javadoc-API文档...
HydraQL`是基于HBase的client API设计的一款SQL查询器,专为简化HBase原生API的使用而打造。 `HydraQL`旨在提供一种更直观、易用的方式来查询和操作HBase数据库。通过使用SQL语法或更精简的API,用户可以通过简单的...
### HBase Java API类介绍 #### 一、概述 HBase是一个分布式的、面向列的开源数据库,基于Google的Bigtable论文实现。它适合于非结构化数据存储,并且能够实时处理PB级别的数据。HBase提供了Java API供开发者使用...
HBase The Definitive Guide, 2nd Edition HBase The Definitive Guide, 2nd Edition
本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先,让我们从HBase的基础开始。HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非...
当前状态:完全通过 HBase 0.94 和 0.94.16Java hbase-client支持 HBase 服务器的版本[√] 0.94.x[√] 0.94.0[√] 0.94.160.95.x0.96.x安装$ npm install hbase-client使用 CRUD:通过 zookeeper 创建 HBase ...
HBase数据查询API HBase是一种分布式的、面向列的NoSQL数据库,主要应用于存储大量的半结构化数据。HBase提供了多种查询方式,包括单条查询和批量查询。 单条查询 单条查询是通过rowkey在table中查询某一行的数据...
赠送原API文档:hbase-client-1.1.2-javadoc.jar; 赠送源代码:hbase-client-1.1.2-sources.jar; 包含翻译后的API文档:hbase-client-1.1.2-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId...
- **存储API**(Storage API):HBase提供了一套用于数据存储和访问的API,使得开发人员能够方便地与之交互。 - **实现细节**:HBase的核心组件包括Master、RegionServer等,其中Master负责管理和监控整个集群的...
在本文中,我们将深入探讨如何使用HBase的Java API进行数据的增加、修改和删除操作。HBase是一个基于Google Bigtable设计的开源分布式数据库,它属于Apache Hadoop生态系统的一部分,适用于处理大规模数据存储。通过...
自行制作的HBase 1.2.0 Javadoc API CHM版本。内容抽取自官方站点网页
- **hbase-client.jar**:包含了HBase的客户端API,是我们进行Java开发的主要依赖。 - **hbase-common.jar**:包含HBase通用的类和工具,如数据模型、配置等。 - **hbase-server.jar**:虽然不是所有场景都需要,...
HBaseConfiguration 可以设置 ZooKeeper 的配置信息,如 hbase.zookeeper.quorum 和 hbase.zookeeper.property.clientPort。 创建表是通过 HBaseAdmin 对象来操作的。HBaseAdmin 负责表的 META 信息处理,提供了 ...
hbase-client-2.1.0-cdh6.3.0.jar
hbase 1.0 对api做了较大改动,该文件对此做了详细说明