- 浏览: 484000 次
- 性别:
- 来自: 南阳
文章分类
最新评论
-
yuanhongb:
这么说来,感觉CGI和现在的JSP或ASP技术有点像啊
cgi -
draem0507:
放假了还这么勤啊
JXL操作Excel -
chenjun1634:
学习中!!
PHP/Java Bridge -
Jelen_123:
好文章,给了我好大帮助!多谢!
hadoop安装配置 ubuntu9.10 hadoop0.20.2 -
lancezhcj:
一直用job
Oracle存储过程定时执行2种方法(转)
做了几天工程,对HBase中的表操作熟悉了一下。下面总结一下常用的表操作和容易出错的几个方面。当然主要来源于大牛们的文章。我在前人的基础上稍作解释。
1.连接HBase中的表testtable,用户名:root,密码:root
public void ConnectHBaseTable()
{
Configuration conf = new Configuration();
conf.set("hadoop.job.ugi", "root,root");
HBaseConfiguration config = new HBaseConfiguration();
try
{
table = new HTable(config, "testtable");
}catch(Exception e){e.printStackTrace();}
}
2.根据行名name获得一行数据,存入Result.注意HBase中的表数据是字节存储的。
下面的例子表示获得行名为name的行的famA列族col1列的数据。
String rowId = "name";
Get get = new Get(rowId);
Result result = hTable.get(get);
byte[] value = result.getValue(famA, col1);
System.out.println(Bytes.toString(value));
3.向表中存数据
下面的例子表示写入一行。行名为abcd,famA列族col1列的数据为"hello world!"。
byte[] rowId = Bytes.toBytes("abcd");
byte[] famA = Bytes.toBytes("famA");
byte[] col1 = Bytes.toBytes("col1");
Put put = new Put(rowId).
add(famA, col1, Bytes.toBytes("hello world!"));
hTable.put(put);
4.扫描的用法(scan):便于获得自己需要的数据,相当于SQL查询。
byte[] famA = Bytes.toBytes("famA");
byte[] col1 = Bytes.toBytes("col1");
HTable hTable = new HTable("test");
//表示要查询的行名是从a开始,到z结束。
Scan scan = new Scan(Bytes.toBytes("a"), Bytes.toBytes("z"));
//用scan.setStartRow(Bytes.toBytes(""));设置起始行
//用scan.setStopRow(Bytes.toBytes(""));设置终止行
//表示查询famA族col1列
scan.addColumn(famA, col1);
//注意,下面是filter的写法。相当于SQL的where子句
//表示famA族col1列的数据等于"hello world!"
SingleColumnValueFilter singleColumnValueFilterA = new SingleColumnValueFilter(
famA, col1, CompareOp.EQUAL, Bytes.toBytes("hello world!"));
singleColumnValueFilterA.setFilterIfMissing(true);
//表示famA族col1列的数据等于"hello hbase!"
SingleColumnValueFilter singleColumnValueFilterB = new SingleColumnValueFilter(
famA, col1, CompareOp.EQUAL, Bytes.toBytes("hello hbase!"));
singleColumnValueFilterB.setFilterIfMissing(true);
//表示famA族col1列的数据是两者中的一个
FilterList filter = new FilterList(Operator.MUST_PASS_ONE, Arrays
.asList((Filter) singleColumnValueFilterA,
singleColumnValueFilterB));
scan.setFilter(filter);
ResultScanner scanner = hTable.getScanner(scan);
//遍历每个数据
for (Result result : scanner) {
System.out.println(Bytes.toString(result.getValue(famA, col1)));
}
5.上面的代码容易出错的地方在于,需要导入HBase的类所在的包。导入时需要选择包,由于类可能出现在HBase的各个子包中,所以要选择好,下面列出常用的包。尽量用HBase的包
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.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.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
6.下面列出HBase常用的操作
(1)时间戳到时间的转换.单一的时间戳无法给出直观的解释。
public String GetTimeByStamp(String timestamp)
{
long datatime= Long.parseLong(timestamp);
Date date=new Date(datatime);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
String timeresult=format.format(date);
System.out.println("Time : "+timeresult);
return timeresult;
}
(2)时间到时间戳的转换。注意时间是字符串格式。字符串与时间的相互转换,此不赘述。
public String GetStampByTime(String time)
{
String Stamp="";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
try
{
date=sdf.parse(time);
Stamp=date.getTime()+"000";
System.out.println(Stamp);
}catch(Exception e){e.printStackTrace();}
return Stamp;
}
上面就是我的一点心得。以后碰到什么问题,再来解决。
参考文献:http://www.nearinfinity.com/blogs/aaron_mccurry/using_hbase-dsl.html
发表评论
-
实现mapreduce多文件自定义输出
2012-07-13 15:02 2568普通maprduce中通常是有map和reduce两个阶 ... -
hadoop中mapred.tasktracker.map.tasks.maximum的设置
2012-06-11 16:33 1175目前,我们邮件的一部分log已经迁移到Hadoop集群上 ... -
Hadoop集群的NameNode的备份
2012-06-01 15:58 1439Hadoop集群中,NameNode节 ... -
Hbase Shell的常用命令
2012-06-01 15:54 1388总结的一些Hbase shell的命令 都很简单,可以h ... -
Hadoop集群中增加新节点
2012-06-01 15:53 1160向一个正在运行的Hadoo ... -
Hadoop集群上使用Lzo压缩
2012-06-01 15:47 1204自从Hadoop集群搭建以来,我们一直使用的是Gzip进行 ... -
SSH连接反应慢的分析解决
2012-06-01 09:41 1480原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 ... -
云计算大会视频与演讲备忘
2012-05-29 15:53 834<!--StartFragment --> 阿里 ... -
HBase HFile与Prefix Compression内部实现全解--KeyValue格式
2012-05-25 14:40 19581. 引子 HFile (HBase File)是HB ... -
HFile详解-基于HBase0.90.5
2012-05-25 14:25 23921. HFile详解 HFile文件分为以下六大部分 ... -
Hive-0.8.1索引的实验
2012-05-19 09:29 1549先说一个0.7.1和0.8.1的Metastore不兼容 一 ... -
Hive HBase 整合(中文)
2012-05-07 09:07 1489hive hbase整合,要求比较多,1.hive的得是0.6 ... -
编写hive udf函数
2012-05-04 19:13 1279udf编写入门大写转小写package com.afan;im ... -
Hive与HBase的整合
2012-04-28 10:48 1875开场白:Hive与HBase的整合功能的实现是利用两者本身对外 ... -
hadoop,hbase,hive安装全记录
2012-04-26 10:09 2570操作系统:CentOS 5.5Hadoop:hadoop- ... -
HDFS+MapReduce+Hive+HBase十分钟快速入门
2012-04-15 16:19 11071. 前言 本文的目的是让一个从未接触Hadoo ... -
云框架Hadoop之部署Hive
2012-04-12 15:47 903标签:Hive 云框架 Hadoop 部署 原创作品,允许 ... -
hive实战
2012-04-10 16:01 9961. 安装hive 2. hive实战 3. hi ... -
hadoop hive 资料
2012-04-09 11:10 1159Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供 ... -
Hadoop的rmr和trash
2012-02-14 10:40 1189这两天在操作Hadoop集 ...
相关推荐
HBase多语言访问 HBase是一种基于分布式的、面向列的NoSQL数据库,它提供了Java API、Thrift API、REST API等多种访问方式,以满足不同语言和平台的需求。本文将详细介绍HBase的多语言访问机制,包括Thrift API、...
通过HTable类,可以向HBase表中插入数据。首先,创建一个HTable实例,然后使用Put对象来指定要插入的行键和列值: ```java HTable table = new HTable(conf, "myTable"); Put put = new Put(Bytes.toBytes("rowKey")...
设计时要考虑数据访问模式,利用字典序存储特性,将关联数据放在一起,并考虑时间戳作为部分key,以便新数据能快速被访问。此外,多HTable并发写能提高写入吞吐量,适合大数据量写入场景。 HTable参数的设置也是...
- **RowKey的重要性**:良好的RowKey设计可以显著提升数据访问效率。 - **灵活性**:支持存储任意二进制数据,无需预先定义数据类型。 - **列族统一性**:同一列族内的数据通常遵循相同的访问模式。 - **索引机制**...
Rowkey设计应考虑到查询模式和数据访问频率,将常一起读取的数据放在一起,并将热点数据设计在Rowkey的前面,以利用HBase的Bloom Filter和Memstore缓存提高查询效率。 综上所述,HBase性能调优涉及多个层面,需要...
设计Rowkey时需要考虑到数据访问模式和访问频率,以及如何利用其排序特性实现高效的范围查询。 HBase作为列式存储数据库,其面向列的特性带来了极高的灵活性和可扩展性。HBase适合于需要快速读写大量数据的场景,...
对于插入数据,我们需要创建一个`Put`对象并设置行键和列族的值,然后将其添加到`HTable`实例中: ```java Table table = connection.getTable(TableName.valueOf("MyTable")); Put put = new Put(Bytes.toBytes(...
如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为row key的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE – timestamp作为row key,这样能保证新写入的数据在读取时可以被快速命中。...
HBase通常被用在需要快速读写和随机访问大量数据的应用场景中,例如日志分析、数据仓库、大数据处理等。由于HBase基于列的存储方式,它在处理某些特定的数据模型时比传统关系型数据库具有更好的性能。
HBase是Apache Hadoop生态系统中的一个分布式、高性能、版本化、列族式数据库,它主要设计用于处理海量数据...同时,了解源代码有助于开发者更好地利用HBase特性,优化数据访问性能,以及在遇到问题时进行排查和解决。
例如,用户可以使用 HConnection 对象来连接 HBase 数据库,然后使用 HTable 对象来创建表、添加数据、删除数据等。 三、 数据操作 在 HBase 中,数据操作主要包括创建表、添加数据、删除数据、获取数据等。 1. ...
其设计灵感来源于Google的Bigtable,但HBase更注重于提供高并发和低延迟的数据访问。HBase的数据模型是基于行的,每个表由行和列族组成,列族下又包含多个列,这样的设计使得数据的存储和查询更加灵活。 在Java API...
在大数据处理领域,Hadoop和HBase是两个重要的开源组件,它们分别扮演着分布式存储和实时数据访问的角色。Hadoop提供了强大的数据处理能力,而HBase则是一个基于Hadoop的分布式列式数据库,适合处理大规模的半结构化...
4. 实时读/写:提供了低延迟的数据访问。 5. 索引和查询:支持基于行键的快速查找,同时可以通过时间戳进行版本控制。 HBase的体系结构主要包括Region Server、Master Server、ZooKeeper和HDFS四个组件。Region ...
- **实时读写能力**:提供低延迟的数据访问能力,适合实时应用的需求。 #### 二、HBase基本操作详解 ##### 1. 表的管理 HBase中的表是基本的数据存储单位,通过`HBaseAdmin`类可以进行表的创建、删除、显示以及...
HBase的数据模型是基于行、列族和时间戳的,适合于大数据的快速随机访问。 另一方面,关系型数据库如MySQL、Oracle等,遵循ACID(原子性、一致性、隔离性和持久性)原则,提供结构化的表格数据存储,以及SQL语言...
这里涉及到HBase的Region分裂和合并机制,以确保数据分布的均匀性和高效访问。Region分裂是自动进行的,当一个Region的大小超过设定阈值时,Region Server会将该Region分裂成两个新的Region,然后更新Meta表记录新...
**HBase** 是构建在Hadoop之上的非关系型数据库(NoSQL),设计用于大规模、实时的数据访问。它是一个列族数据库,支持随机读写,适用于大数据分析场景。HBase利用Hadoop的HDFS作为底层存储,通过Zookeeper进行协调...