- 浏览: 145085 次
- 性别:
- 来自: 哈尔滨
最新评论
-
yuesen0007:
厉害
MySQL逗号分割字段的行列转换技巧(转载) -
书音棋:
107x 写道 不错,谢谢!很早之前搞的,希望对你有用。
hive优化之------控制hive任务中的map数和reduce数 -
书音棋:
chwshuang 写道感觉哥们是做开发的,不是专门做测试的! ...
压力测试你应该知道的几个道理 -
chwshuang:
感觉哥们是做开发的,不是专门做测试的!因为我也深有体会!不知道 ...
压力测试你应该知道的几个道理 -
107x:
不错,谢谢!
hive优化之------控制hive任务中的map数和reduce数
1、需要的jar包:
commons-codec-1.4.jar
commons-logging-1.0.4.jar
hadoop-0.20.2-core.jar
hbase-0.20.6.jar
log4j-1.2.15.jar
zookeeper-3.2.2.jar
2、已有表结构:
1、表名:scores
2、列族:
course:art
course:math
grade:
3、scan 'scores'的内容:
ROW COLUMN+CELL
Jerry column=course:art, timestamp=1301294630194, value=80
Jerry column=course:math, timestamp=1301294630132, value=100
Jerry column=grade:, timestamp=1301294630073, value=2
Jim column=course:art, timestamp=1301294630363, value=97
Jim column=course:math, timestamp=1301294630305, value=100
Jim column=grade:, timestamp=1301294630247, value=3
Tom column=course:art, timestamp=1301294630015, value=97
Tom column=course:math, timestamp=1301294629987, value=87
Tom column=grade:, timestamp=1301294629931, value=1
package org.myhbase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
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.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.io.Cell;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseBasic03 {
private static HBaseConfiguration hbaseConfig=null;
static{
Configuration config=new Configuration();
config.set("hbase.zookeeper.quorum","192.168.10.149,192.168.10.44,192.168.10.49");
config.set("hbase.zookeeper.property.clientPort", "2181");
hbaseConfig=new HBaseConfiguration(config);
}
/**
* get方式,通过rowKey查询
* @param tablename
* @param rowKey
* @throws IOException
*/
public static void selectByRowKey(String tablename,String rowKey) throws IOException{
HTable table=new HTable(hbaseConfig,tablename);
Get g = new Get(Bytes.toBytes(rowKey));
Result r=table.get(g);
for(KeyValue kv:r.raw()){
System.out.println("column: "+new String(kv.getColumn()));
System.out.println("value: "+new String(kv.getValue()));
}
}
/**
* get方式,通过rowKey、column查询
* @param tablename
* @param rowKey
* @param column
* @throws IOException
*/
public static void selectByRowKeyColumn(String tablename,String rowKey,String column) throws IOException{
HTable table=new HTable(hbaseConfig,tablename);
Get g = new Get(Bytes.toBytes(rowKey));
g.addColumn(Bytes.toBytes(column));
Result r=table.get(g);
for(KeyValue kv:r.raw()){
System.out.println("column: "+new String(kv.getColumn()));
System.out.println("value: "+new String(kv.getValue()));
}
}
public static void selectByFilter(String tablename,List<String> arr) throws IOException{
HTable table=new HTable(hbaseConfig,tablename);
FilterList filterList = new FilterList();
Scan s1 = new Scan();
for(String v:arr){ // 各个条件之间是“与”的关系
String [] s=v.split(",");
filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes(s[0]),
Bytes.toBytes(s[1]),
CompareOp.EQUAL,Bytes.toBytes(s[2])
)
);
// 添加下面这一行后,则只返回指定的cell,同一行中的其他cell不返回
// s1.addColumn(Bytes.toBytes(s[0]), Bytes.toBytes(s[1]));
}
s1.setFilter(filterList);
ResultScanner ResultScannerFilterList = table.getScanner(s1);
for(Result rr=ResultScannerFilterList.next();rr!=null;rr=ResultScannerFilterList.next()){
for(KeyValue kv:rr.list()){
System.out.println("row : "+new String(kv.getRow()));
System.out.println("column : "+new String(kv.getColumn()));
System.out.println("value : "+new String(kv.getValue()));
}
}
}
public static void main(String [] args) throws IOException{
// 按rowkey查询,查询Tom行的所有cell
HBaseBasic03.selectByRowKey("scores","Tom");
// 按rokey 和 column 来查询,查询Tom行course列族的所有列值
HBaseBasic03.selectByRowKeyColumn("scores","Tom","course");
// Filter多条件查询,条件:查询 course列族中art列值为97 ,且 course列族中math列值为100的行
List<String> arr=new ArrayList<String>();
arr.add("course,art,97");
arr.add("course,math,100");
HBaseBasic03.selectByFilter("scores",arr);
}
}
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;
}
发表评论
-
压力测试你应该知道的几个道理
2016-03-11 12:03 269811.从压力测试说 ... -
压力测试你应该知道的几个道理
2016-02-25 17:41 371.从压力测试说起 压 ... -
MySQL逗号分割字段的行列转换技巧(转载)
2013-07-24 19:10 28521前言: 由于很多业务表因为历史原因或者性能原因,都 ... -
MongoDB shell命令行的使用
2013-03-26 17:21 1178首先要启动MongoDB shell工具,即bin下的mo ... -
HBase Merging Regions
2013-03-09 09:45 2138我承认我之前不知道hbase还能做merge region操 ... -
datanode或者tasktracker crash
2013-03-04 19:29 1083有的时候, datanode或者tasktracker c ... -
Tomcat线程池设置
2012-12-24 15:57 1659在Tomcat6下可以更改配置,为Tomcat更改线程池实现: ... -
Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
2012-12-21 17:01 925tomcat的运行模式有3种.修改他们的运行模式.3种模 ... -
安装m2eclipse插件 (转载)
2012-12-19 14:22 9951. 安装m2eclipse插件 要用Eclips ... -
mysql定时器
2012-10-18 11:35 1804ALTER EVENT `testEvent` ON S ... -
Command模式(命令)
2012-09-14 10:01 1231Command模式(命令) Java深入到一 ... -
hive导出查询结果到本地文件
2012-08-15 15:00 7302最近在使用hive时,需要将hive查询的数据导出到本地文件系 ... -
hive 调优(转)
2012-08-15 14:27 1183优化时,把hive sql当做map reduce程序来 ... -
使用hive读取hbase数据
2012-08-15 10:25 5065Mapr框架安装完后,安装与配置hbase、hive。其 ... -
hive的Specified key was too long; max key length is 767 bytes问题解决
2012-08-14 15:08 4357当在hive中show table 时如果报以下错时 ... -
M2_REPO介绍
2012-08-13 22:32 1154M2_REPO是一个用来定义 maven 2仓库在硬盘中 ... -
hadoop优化
2012-08-13 22:16 962从三个方面着手优化 :1. hadoop配置2. 设计mapr ... -
大数据量处理(转载)
2012-08-10 15:23 15701. 给定a、b两个文件,各存放50亿个url,每个url各占 ... -
js url传参 中文乱码
2012-07-13 15:41 2532在项目中经常回存在通过JS去请求操作的事件发生,而这些请 ... -
hadoop hbase Ganglia 汇总
2012-07-09 17:16 21049.2.1. hbase.regionserver.bl ...
相关推荐
`HBaseConfiguration`用于配置HBase连接参数,`HTable`代表一个HBase表,`Put`用于添加新行,而`BatchOperation`则用于执行批量操作。 3. **批量导入原理**: 批量导入通常使用`HTable`的`put`方法或者`batch`方法...
在这个“hbase-java开发连接工具类”中,包含了一个1.2.1版本的`hbase-client.jar`,这是与HBase通信的核心库。 `hbase-client.jar`包含了以下关键组件和功能: 1. **HBase客户端API**:Java开发者可以通过这个API...
在Java中使用HBase,首先要建立与HBase服务器的连接。这通常通过`HBaseConfiguration.create()`方法创建一个配置对象,然后设置相关配置,如Zookeeper地址(`HBASE_ZOOKEEPER_QUORUM`),端口(`HBASE_ZOOKEEPER_...
可以通过HBase Shell命令来查看是否成功执行了Java API的操作,例如,`hbase hbasetest.jar hbase.java.txt` 可能是一个运行包含上述操作的Java程序,并输出结果到`hbase.java.txt`的命令。 以上就是HBase常用Java...
HBASE的java版本的客户端,运行代码需要设定环境变量且打包成jar文件运行
对于HBase,可以创建HTable实例来连接到表,使用Put对象添加数据,Get对象读取数据,Scan对象进行范围查询。 在实际项目中,可能还需要考虑数据模型设计、性能优化、故障恢复等方面。例如,为了提高HBase的查询效率...
下面我们将深入探讨如何使用Java API连接并操作HBase,以及在实际应用中可能遇到的关键知识点。 首先,为了能够与HBase进行交互,我们需要在项目中引入必要的依赖。描述中提到,引用的jar包可能包含冗余,因此确保...
这个源代码包是针对Java开发者的宝贵资源,可以帮助他们深入理解HBase的内部工作原理,优化自己的应用,以及对HBase进行定制化开发。 HBase的核心概念包括: 1. 表(Table):HBase的数据存储在表中,每个表由行键...
在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...
在HBase这个分布式列式数据库中,Java API是开发者常用的一种接口来操作HBase,包括创建表、插入数据、查询数据以及实现分页等操作。本文将深入探讨如何使用HBase Java API进行数据访问和分页查询。 首先,我们要...
Java连接远程HBase数据库是一项常见的任务,特别是在大数据处理和分布式存储的应用场景中。HBase是一个构建在Hadoop文件系统(HDFS)之上的分布式、版本化的NoSQL数据库,它提供了高性能、低延迟的数据访问能力。...
开发者可以在`src/main/java`下找到具体的Java源代码文件,而在`src/main/resources`下可能会有配置文件,如HBase的连接配置。 7. **博客链接**: 提到的博客链接(已省略)可能提供了一个实际示例,演示了如何...
Java SpringBoot 连接 Hbase Demo 创建表 插入数据 列族 列 查询:全表、数据过滤 删除数据 删除表 Hbase 集群搭建:https://blog.csdn.net/weixin_42176639/article/details/131796472
整个流程就是这样,它涉及到了Java I/O操作、HBase连接与表操作、以及数据的读取和写入。在实际应用中,可能还需要考虑错误处理、性能优化、并发控制等问题。对于大型文件,可能需要使用多线程或者Hadoop MapReduce...
使用这些JAR文件,开发者可以在Java代码中创建HBase连接,定义表结构,插入、查询和更新数据,以及执行扫描操作。通过编写适当的方法和逻辑,可以构建高效的数据处理应用。然而,值得注意的是,精简版的JAR包可能不...
1. **连接HBase**:在Java代码中,我们使用`HBaseConfiguration.create()`来创建一个配置对象,然后可以设置各种配置参数,如Zookeeper的地址(`HBASE_ZOOKEEPER_QUORUM`),端口(`HBASE_ZOOKEEPER_CLIENT_PORT`)...
Java Hbase jar api hbase-0.20.6.jar hadoop-core-0.20.1.jar commons-logging-1.1.1.jar zookeeper-3.3.0.jar log4j-1.2.91.jar commons-codec-1.4.jar
在Java客户端上连接HBase集群时,需要配置一系列的环境和依赖,其中包括了`winutils`工具。`winutils-2.2.0.zip`这个压缩包就是针对Windows用户提供的,用于配置Hadoop环境,以便于与HBase交互。 首先,`winutils....
本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先,让我们从HBase的基础开始。HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非...
这里我们使用JDBC连接MySQL,使用HBase Java API操作HBase。以下是一个简单的示例: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop....