- 浏览: 283116 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (247)
- free talking (11)
- java (18)
- search (16)
- hbase (34)
- open-sources (0)
- architect (1)
- zookeeper (16)
- vm (1)
- hadoop (34)
- nutch (33)
- lucene (5)
- ubuntu/shell (8)
- ant (0)
- mapreduce (5)
- hdfs (2)
- hadoop sources reading (13)
- AI (0)
- distributed tech (1)
- others (1)
- maths (6)
- english (1)
- art & entertainment (1)
- nosql (1)
- algorithms (8)
- hadoop-2.5 (16)
- hbase-0.94.2 source (28)
- zookeeper-3.4.3 source reading (1)
- solr (1)
- TODO (3)
- JVM optimization (1)
- architecture (0)
- hbase-guideline (1)
- data mining (3)
- hive (1)
- mahout (0)
- spark (28)
- scala (3)
- python (0)
- machine learning (1)
最新评论
-
jpsb:
...
为什么需要分布式? -
leibnitz:
hi guy, this is used as develo ...
compile hadoop-2.5.x on OS X(macbook) -
string2020:
撸主真土豪,在苹果里面玩大数据.
compile hadoop-2.5.x on OS X(macbook) -
youngliu_liu:
怎样运行这个脚本啊??大牛,我刚进入搜索引擎行业,希望你能不吝 ...
nutch 数据增量更新 -
leibnitz:
also, there is a similar bug ...
2。hbase CRUD--Lease in hbase
经过几天来的看资料,写代码,终于对这个东东有点眉目了。
package linhon.crud; import java.util.Date; import java.util.Map.Entry; import java.util.NavigableMap; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; /*** * test hbase crud operations * @author leibnitz * @create jan,12,11 */ public class TestHbaseCrud { /** * 不存在rowKey则添加;否则代表修改某column(s).这些操作在行级上更新是原子的。 * @param tableName * @param rowkey * @param content * @param addTime * @throws Exception */ public static void add(String tableName,int rowkey,String content,Date addTime) throws Exception{ HBaseConfiguration hbaseConf = new HBaseConfiguration(); HTable htable = new HTable(hbaseConf, tableName); htable.setAutoFlush(false); htable.setWriteBufferSize(1024 * 5); //add byte[] rowKey = Bytes.toBytes(rowkey); Put put = new Put(rowKey ); if(content != null) put.add(Bytes.toBytes("info"), Bytes.toBytes("content"), addTime.getTime(),Bytes.toBytes(content)); if(addTime != null) //can add more than one column at the same time put.add(Bytes.toBytes("info"), Bytes.toBytes("add_time"), addTime.getTime(),Bytes.toBytes(addTime.getTime())); htable.put(put); htable.flushCommits(); htable.close(); //invoke flushCommits() also } /** * add a column(member) to specified row * @param tableName * @param rowkey * @param family * @param column * @throws Exception */ public static void addColumnOnly(String tableName,int rowkey,String family,String column) throws Exception{ HBaseConfiguration hbaseConf = new HBaseConfiguration(); HTable htable = new HTable(hbaseConf, tableName); htable.setAutoFlush(false); htable.setWriteBufferSize(1024 * 5); //add byte[] rowKey = Bytes.toBytes(rowkey); Put put = new Put(rowKey ); put.add(Bytes.toBytes(family), Bytes.toBytes(column),Bytes.toBytes("")); htable.put(put); htable.flushCommits(); htable.close(); //invoke flushCommits() also } public static void query(String tblName,int rowKey,String family,String... columns) throws Exception{ HBaseConfiguration hconf = new HBaseConfiguration(); HTable htbl = new HTable(hconf,tblName); Scan s = new Scan(); ResultScanner scan = htbl.getScanner(s); //add a filer param if necessary Result rst = null; while(( rst = scan.next() ) != null){ //scan by row int row = Bytes.toInt(rst.getRow()); System.out.println("row:" + row ); for(String col : columns){ //NOTE :可以使用rst.list()显示所有列 if(col.contains("time") || col.contains("date")){ System.out.printf(" %s:%2$tF %2$tH:%2$tM:%2$tS ", col,Bytes.toLong(rst.getValue(Bytes.toBytes(family),Bytes.toBytes(col)))); }else{ String content = Bytes.toString(rst.getValue(Bytes.toBytes(family), Bytes.toBytes(col))); System.out.printf(" %s:%s " ,col,content); } byte[] key = Bytes.toBytes(rowKey); long ts = 1295977940837l;//1294813460620l;//1295977421536l;//1295976774855l;//1295969908063l;//1294813460625l; //note:the second column param is family instead of column. // String qualifier = family + KeyValue.COLUMN_FAMILY_DELIMITER + col; final Get g = new Get(key); g.addColumn(Bytes.toBytes(family), Bytes.toBytes(col)); g.setTimeStamp( ts); //query by time range.this means time range:[ts,ts+1) boolean b = htbl.exists(g); System.out.println(" has versions:" + ts + "," + b); } } scan.close(); htbl.close(); } /** * test retrieve by versions * @param tblName * @param rowKey * @param family * @param maxVersions 由于建表时指定只保留二个版本,所以如果大于2时输出不会有三个版本。 * @param columns * @throws Exception */ public static void queryByMaxVersions(String tblName,int rowKey,String family,int maxVersions,String...columns) throws Exception{ HBaseConfiguration hconf = new HBaseConfiguration(); HTable htbl = new HTable(hconf,tblName); final Get g = new Get(Bytes.toBytes(rowKey)); if(columns == null || columns.length == 0) g.addColumn(Bytes.toBytes(family)); else{ for(String col : columns){ g.addColumn(Bytes.toBytes(family), Bytes.toBytes(col)); } } g.setMaxVersions(maxVersions); Result rst = htbl.get(g); // System.out.println(rst.getMap()); for(Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> entry : rst.getMap().entrySet()){ System.out.println("family: " + Bytes.toString(entry.getKey())); for(Entry<byte[],NavigableMap<Long, byte[]>> entry2 : entry.getValue().entrySet()){ String col = Bytes.toString(entry2.getKey()); System.out.println(" qualifier: " + col); for(Entry<Long, byte[]> entry3 : entry2.getValue().entrySet()){ if(col.contains("time") || col.contains("date")){ System.out.println(" version: " + entry3.getKey() + ",value:" + Bytes.toLong(entry3.getValue())); }else{ System.out.println(" version: " + entry3.getKey() + ",value:" + Bytes.toString(entry3.getValue())); } } } } // 当输出所有columns,并且maxVersions >=2时,output is: // family: info // qualifier: add_time // version: 1295977940837,value:1295977940837 已经是倒序输出(比早版本大) // version: 1295977489609,value:1295977488769 此版本小 // qualifier: content // version: 1295977940837,value:linhon 同上 // version: 1295976774855,value:bye,linhon htbl.close(); } //见add() public static void modify(){ } /** * 删除可以根据以下条件进行: * 1.family or family+column * 2.timestamp range * 3.regexp */ public static void deleteColumnData(String tblName,int rowKey,String family,String column,long timestamp) throws Exception{ HBaseConfiguration hconf = new HBaseConfiguration(); HTable htbl = new HTable(hconf,tblName); Delete dlt = new Delete(Bytes.toBytes(rowKey)); dlt.deleteColumn(Bytes.toBytes(family), Bytes.toBytes(column), timestamp); htbl.delete(dlt); htbl.flushCommits(); htbl.close(); } /** * delete the column(and data) but family * @param tblName * @param rowKey * @param family * @param column * @param timestamp * @throws Exception */ public static void deleteColumnFamily(String tblName,String family,String column) throws Exception{ HBaseConfiguration hconf = new HBaseConfiguration(); HBaseAdmin admin = new HBaseAdmin(hconf); //disable table is a must if(admin.isTableEnabled(tblName)) admin.disableTable(tblName); admin.deleteColumn(tblName, family /*+ ":" + column*/); //columnName参数是任意family,':',qualifier组合的,有没有qualifier均可 // admin.enableTable(tblName); //this is a artifice(技巧) admin.flush(tblName); } /** * @param args */ public static void main(String[] args) throws Exception{ // add("test_user",1,"linhon",new Date()); // add("test_user",1,"hello,linhon",new Date()); // add("test_user",1,"bye,linhon",new Date()); // add("test_user",1,null,new Date()); // add("test_user",1,null,new Date()); // System.out.println(System.currentTimeMillis()); // query("test_user",1,"info",new String[]{"content","add_time"}); // queryByMaxVersions("test_user",1,"info",3,new String[]{"content","add_time"}); // queryByMaxVersions("test_user",1,"info",3,new String[]{"content"/*,"add_time"*/}); // addColumnOnly("test_user", 1, "info", "age"); // deleteColumnData("test_user",1,"info","age",1296030610746l); // deleteColumnFamily("test_user","info","age"); addColumnOnly("test_user2", 1, "num", "age"); // deleteColumnFamily("test_user2","num","age"); //test table } } 我觉得既然它有横向切分(书上是这样说的,但没有在真正分布式跑过,只在伪分布,所以不是否正确??),非结构化 儲存,支持版本化,那么就不应该只是进行简单的CRUD的普通表似的操作,所以我挖倔一些新功能点出来。 注意问题: 1.旧版本的:exists(final byte [] row, final byte [] column,long timestamp),其中的timestamp代表是从0开始到timestamp 的time range;新版本的exists(Get)可以指定一个具体的timestamp范围而不是使用从0开始的范围。 hbase(main):014:0> scan 'test_user' ROW COLUMN+CELL \x00\x00\x00\x01 column=info:add_time, timestamp=1294813460625, value=\x00\x00\x01-x\xE5uw \x00\x00\x00\x01 column=info:content, timestamp=1295976774855, value=bye,linhon 2.pub或get中的addColumn(column)如果只有一个参数,代表这是old format column,that means the form is:<family:column> 3.Htable是对表数据的修改查询操作;HBaseAdmin是对表结构操作; 4.在shell下进行的scan操作,各cell只输出最后一个version的value 5.添加数据时,row key是必须指定的。 6.在已有数据情况下添加新column,HTable中需要指定一个rowkey,代表只添加到些行上,其它行是没有这列数据的。 7.deleteColumn(tbl,col)使用family+":"+column作为col时删除全部列(family) 8.hbase无法做到动态增加/删除列族(要先disable);删除只能删除列族,不能单独删除column成员
发表评论
-
zookeeper-network partition
2016-02-29 17:36 1855env: hbase,94.26 zookeeper, ... -
hbase-export table to json file
2015-12-25 17:21 1667i wanna export a table to j ... -
hbase-logroll optimizations
2015-09-21 12:10 1054as u know,the hbas's dat ... -
hoya--hbase on yarn
2015-04-23 17:00 445Introducing Hoya – HBase on YA ... -
upgrades of hadoop and hbase
2014-10-28 11:39 7391.the match relationships ... -
hbase-how to know which regionservers are stuck when shutdown a cluster
2014-10-22 15:09 574u know,when u shutdowning a ... -
hbase-bloom filter
2014-10-20 16:06 352there is no notable performa ... -
compile hbase
2014-10-15 17:42 898IF u want to compile a ... -
hbase-region balancer
2014-08-28 13:52 683why along with the time go ... -
HBase Versus Bigtable(comparison)
2014-07-01 23:13 561below views are all from hbas ... -
hbase -how many regions are fit for a table when prespiting or keeping running
2014-06-27 11:46 712how many regions are thinked ... -
hbase -tables replication/snapshot/backup within/cross clusters
2014-06-24 18:09 802serial no soluti ... -
some important optimized advices for hbase-0.94.x
2014-06-20 17:56 1231The following gives you ... -
hbase PerformanceEvaluation benchmark - 0.94.2 VS 0.94.16 VS 0.96
2014-03-23 17:56 1090i worked to benchmark hbase p ... -
install snappy compression in hadoop and hbase
2014-03-08 00:36 4541.what is snappy ... -
downgrade hbase from 0.94.16 to 0.94.2
2014-03-07 02:25 1459we have a cluster about 25 no ... -
2。hbase CRUD--Caching VS Batch
2013-08-26 17:28 8141 in case of ONE region,a ta ... -
5。hbase高级部分:compact/split/balance及其它维护原理-delete table
2013-08-18 02:53 1092* table disabled is NOT ... -
2。hbase CRUD--Read(Scan) operations(server side)
2013-08-15 17:39 961just recovered from a di ... -
2。hbase CRUD--Read(query) operations
2013-08-15 16:41 854read Note: -Ge ...
相关推荐
标题中的“hbase&hadoop初探”表明我们将要探讨的是大数据处理领域中的两个关键组件:HBase和Hadoop。这两个技术是Apache软件基金会的重要项目,对于理解和掌握大数据存储与处理有着至关重要的作用。 首先,Hadoop...
HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data Hadoop是Spring框架的一部分,它提供了与Hadoop生态系统集成的工具,包括对HBase的操作支持。本篇文章...
Hadoop版本至少需要2.7.1或更高,这是HBase运行的基础,因为HBase构建在Hadoop的HDFS之上,用于存储数据。HBase版本至少为1.1.2,它提供了一套强大的数据管理特性。JDK版本至少1.7,这是运行HBase和相关Java程序的...
首先需要准备三个虚拟机,并在其上放置 HBase 和 ZooKeeper 的 tar 包。这些包需要解压,并将解压后的 `hbase-1.3.1` 文件夹重命名为 `hbase`。 ##### 2. 配置环境变量 接下来是配置环境变量,这一步对于确保 ...
搭建pinpoint需要的hbase初始化脚本hbase-create.hbase
HBase设计目标是提供大规模数据的实时读写能力,它运行在Hadoop之上,利用HDFS作为其底层存储系统。HBase的数据模型基于稀疏、多维度、排序的映射表,其中行键、列族、列限定符和时间戳构成数据的唯一标识。 二、...
#### 三、HBase的Java API 除了Shell命令之外,HBase还提供了丰富的Java API,用于更高级的编程操作。以下是一些关键的Java API概念和使用方法: 1. **创建连接**: - `ConnectionFactory.createConnection...
#### 三、HBase与Hadoop的集成 - **高度集成**:HBase与Hadoop生态系统紧密结合,充分利用Hadoop提供的资源管理和计算框架。 - **MapReduce集成**:HBase支持MapReduce任务直接对存储在HBase中的数据进行处理,这...
本文主要介绍了三种HBase的权限管理方式,包括静态数据透明加密、Kerberos认证以及用户权限访问控制。 首先,静态数据透明加密是一种保护存储在HDFS(Hadoop Distributed File System)上的HFile和WAL(Write-Ahead...
#### 三、HBase核心技术详解 **1. 数据存储模型**:HBase中的数据以表格形式存储,每张表由一个或多个列族组成,每个列族又包含多个列。每个单元格包含一个版本号,可以存储不同时间的数据。 **2. 数据分区与分布*...
在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...
#### 三、测试审计日志功能 为了验证审计日志功能是否正常工作,可以执行一些基本的HBase命令,例如创建表、插入数据、删除表等操作,并检查审计日志中是否有相应的记录。 - **示例操作**: ```shell hbase(main...
在传统的HBase存储模型中,小文件直接存储在HFile中,可能会导致过多的小文件,从而影响性能。MOB特性通过将小对象集中存储,减少了HRegion内的文件数量,提升了读写效率。它将小对象存储在一个称为Mob File的特殊...
就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非...
hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记
HBase是一种分布式、基于列族的NoSQL数据库,它在大数据领域中扮演着重要的角色,尤其是在需要实时查询大规模数据集时。HBase以其高吞吐量、低延迟和水平扩展能力而闻名,常用于存储非结构化和半结构化数据。在HBase...
三、安装HBase 1. 解压下载的压缩包。 2. 在conf/hbase-env.sh文件中添加配置项,例如export JAVA_HOME=/cygdrive/c/Progra~1/Java/jdk1.6.0_18。 四、配置HBase 1. 新建hbase-site.xml文件,内容如下: ``` ...
5. Indexing:虽然HBase本身不支持索引,但可以通过第三方库如 phoenix 或 hbase-indexer 实现索引功能。 六、监控与维护 1. 使用HBase自带的JMX监控工具或第三方监控工具(如Ambari、Grafana)监控HBase集群的...
HBase 是一款构建于 Hadoop 之上的分布式、可扩展的大规模数据存储系统。它提供了类似 Google BigTable 的功能特性,非常适合处理海量数据和高并发读写需求的应用场景。本文主要介绍如何在 Linux 环境下安装和配置 ...
HBase,全称为Hadoop Distributed File System上的基础结构(HBase on Hadoop Distributed File System),是一种分布式的、面向列的开源数据库,它构建在Apache Hadoop文件系统(HDFS)之上,提供高可靠性、高性能...