HBase应用

几个column family比较合适呢
几个column family比较合适呢
Table Schema的设计
RowKey的设计一
RowKey的设计二
RowKey的设计三
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger; public class KeySalter {
private AtomicInteger index = new AtomicInteger(0); private String[] prefixes = {"a", "b", "c", "d"}; public String getRowKey(String originalKey) {
StringBuilder sb = new StringBuilder(prefixes[index.incrementAndGet() % 4]);
sb.append("-").append(originalKey);
return sb.toString();
} public List<String> getAllRowKeys(String originalKey) {
List<String> allKeys = new ArrayList<>();
for (String prefix : prefixes) {
StringBuilder sb = new StringBuilder(prefix);
sb.append("-").append(originalKey);
allKeys.add(sb.toString());
}
//a-boo0001
//b-boo0001
//c-boo0001
//d-boo0001
return allKeys;
}
}
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; public class SaltingTest {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create(); try (Connection connection = ConnectionFactory.createConnection(config);
Table table = connection.getTable(TableName.valueOf("test_salt"))) { KeySalter keySalter = new KeySalter(); List<String> rowkeys = Arrays.asList("boo0001", "boo0002", "boo0003", "boo0004");
List<Put> puts = new ArrayList<>();
for (String key : rowkeys) {
Put put = new Put(Bytes.toBytes(keySalter.getRowKey(key)));
put.addColumn(Bytes.toBytes("f"), null, Bytes.toBytes("value" + key));
puts.add(put);
}
table.put(puts);
}
} }
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; public class SaltingGetter {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create(); try (Connection connection = ConnectionFactory.createConnection(config);
Table table = connection.getTable(TableName.valueOf("test_salt"))) {
KeySalter keySalter = new KeySalter();
List<String> allKeys = keySalter.getAllRowKeys("boo0001"); //读取boo001
List<Get> gets = new ArrayList<>(); for (String key : allKeys) {
Get get = new Get(Bytes.toBytes(key));
gets.add(get);
} Result[] results = table.get(gets); for (Result result : results) {
if (result != null) {
//do something
}
}
}
} }
RowKey的设计三
import org.apache.hadoop.hbase.util.MD5Hash;
public class KeyHasher {
public static String getRowKey(String originalKey) {
return MD5Hash.getMD5AsHex(originalKey.getBytes());
}
}
package com.twq.hbase.rowkey.hash; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; public class HashingTest {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create(); try (Connection connection = ConnectionFactory.createConnection(config);
Table table = connection.getTable(TableName.valueOf("test_hash"))) { List<String> rowkeys = Arrays.asList("boo0001", "boo0002", "boo0003", "boo0004");
List<Put> puts = new ArrayList<>();
for (String key : rowkeys) {
Put put = new Put(Bytes.toBytes(KeyHasher.getRowKey(key)));
put.addColumn(Bytes.toBytes("f"), null, Bytes.toBytes("value" + key));
puts.add(put);
}
table.put(puts);
}
} }
import com.twq.hbase.rowkey.salt.KeySalter;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class HashingGetter {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create(); try (Connection connection = ConnectionFactory.createConnection(config);
Table table = connection.getTable(TableName.valueOf("test_hash"))) { Get get = new Get(Bytes.toBytes(KeyHasher.getRowKey("boo0001"))); Result results = table.get(get); // process result...
for (Cell cell : results.listCells()) {
System.out.println(Bytes.toString(CellUtil.cloneRow(cell)) + "===> " +
Bytes.toString(CellUtil.cloneFamily(cell)) + ":" +
Bytes.toString(CellUtil.cloneQualifier(cell)) + "{" +
Bytes.toString(CellUtil.cloneValue(cell)) + "}");
} }
} }
RowKey的设计三

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; public class DataFilter {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create();
//Add any necessary configuration files (hbase-site.xml, core-site.xml)
config.addResource(new Path("src/main/resources/hbase-site.xml"));
config.addResource(new Path("src/main/resources/core-site.xml")); try(Connection connection = ConnectionFactory.createConnection(config)) {
Table table = connection.getTable(TableName.valueOf("sound")); Scan scan = new Scan(); scan.setStartRow(Bytes.toBytes("00000120120901"));
scan.setStopRow(Bytes.toBytes("00000120121001")); SingleColumnValueFilter nameFilter = new SingleColumnValueFilter(Bytes.toBytes("f"), Bytes.toBytes("n"),
CompareFilter.CompareOp.EQUAL, new SubstringComparator("中国好声音")); SingleColumnValueFilter categoryFilter = new SingleColumnValueFilter(Bytes.toBytes("f"), Bytes.toBytes("c"),
CompareFilter.CompareOp.EQUAL, new SubstringComparator("综艺")); FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
filterList.addFilter(nameFilter);
filterList.addFilter(categoryFilter); scan.setFilter(filterList); ResultScanner rs = table.getScanner(scan);
try {
for (Result r = rs.next(); r != null; r = rs.next()) {
// process result...
for (Cell cell : r.listCells()) {
System.out.println(Bytes.toString(CellUtil.cloneRow(cell)) + "===> " +
Bytes.toString(CellUtil.cloneFamily(cell)) + ":" +
Bytes.toString(CellUtil.cloneQualifier(cell)) + "{" +
Bytes.toString(CellUtil.cloneValue(cell)) + "}");
}
}
} finally {
rs.close(); // always close the ResultScanner!
}
}
}
}
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; /**
* create 'sound',
*/
public class DataPrepare {
public static void main(String[] args) throws IOException {
InputStream ins = DataPrepare.class.getClassLoader().getResourceAsStream("sound.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(ins)); List<SoundInfo> soundInfos = new ArrayList<>();
String line = null;
while ((line = br.readLine()) != null) {
SoundInfo soundInfo = new SoundInfo();
String[] arr = line.split("\\|");
String rowkey = format(arr[4], 6) + arr[1] + format(arr[0], 6);
soundInfo.setRowkey(rowkey);
soundInfo.setName(arr[2]);
soundInfo.setCategory(arr[3]);
soundInfos.add(soundInfo);
} Configuration config = HBaseConfiguration.create();
//Add any necessary configuration files (hbase-site.xml, core-site.xml)
config.addResource(new Path("src/main/resources/hbase-site.xml"));
config.addResource(new Path("src/main/resources/core-site.xml")); try (Connection connection = ConnectionFactory.createConnection(config)) {
Table table = connection.getTable(TableName.valueOf("sound"));
List<Put> puts = new ArrayList<>();
for (SoundInfo soundInfo : soundInfos) {
Put put = new Put(Bytes.toBytes(soundInfo.getRowkey()));
put.addColumn(Bytes.toBytes("f"), Bytes.toBytes("n"), Bytes.toBytes(soundInfo.getName()));
put.addColumn(Bytes.toBytes("f"), Bytes.toBytes("c"), Bytes.toBytes(soundInfo.getCategory()));
puts.add(put);
}
table.put(puts);
}
} public static String format(String str, int num) {
return String.format("%0" + num + "d", Integer.parseInt(str));
}
}
HBase应用的更多相关文章
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- Redis/HBase/Tair比较
KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式 支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...
- Hbase的伪分布式安装
Hbase安装模式介绍 单机模式 1> Hbase不使用HDFS,仅使用本地文件系统 2> ZooKeeper与Hbase运行在同一个JVM中 分布式模式– 伪分布式模式1> 所有进 ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- Spark读写Hbase的二种方式对比
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...
- 深入学习HBase架构原理
HBase定义 HBase 是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtabl ...
- hbase协处理器编码实例
Observer协处理器通常在一个特定的事件(诸如Get或Put)之前或之后发生,相当于RDBMS中的触发器.Endpoint协处理器则类似于RDBMS中的存储过程,因为它可以让你在RegionSer ...
- hbase集群安装与部署
1.相关环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4 本篇文章仅涉及hbase集群的搭建,关于hadoop与zookeeper的相关部 ...
- 从零自学Hadoop(22):HBase协处理器
阅读目录 序 介绍 Observer操作 示例下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,Sour ...
- Hbase安装和错误
集群规划情况: djt1 active Hmaster djt2 standby Hmaster djt3 HRegionServer 搭建步骤: 第一步:配置conf/regionservers d ...
随机推荐
- Docker容器安装配置SQLServer服务(Linux)
一:前言 随着不断的对Docker容器的实践和学习,越来越觉得容器的强大,把 SQL Server 数据库服务放在docker容器中,比你自己在宿主服务器上面安装配置一个SQL Server服务器是要 ...
- aspnetcore identity result.Succeeded SignInManager.IsSignedIn(User) false?
登陆返回的是 result.Succeeded 为什么跳转到其他页面SignInManager.IsSignedIn(User)为false呢? result.Succeeded _signInMan ...
- Java学习笔记二——正则表达式
Java正则表达式 正则表达式的规则 “abc” 匹配字符串abc [abc] 匹配[]里任意一个字符 [a-z]: 匹配所有小写字母中的任意一个字符 [A-Z]: 匹配所有大写字母中的任意一个字符 ...
- 【C语言】学不会的指针
指针 前言: 指针是C语言程序的核心,刚开始学指针,嗯....这样呀,貌似不难呀:之后开始用指针,&p,p,*p,**p,这些指针在用的时候,额.....什么东东?每次都要想半天,特别是遇到双 ...
- JAVA知识点总结篇(三)
抽象类 使用规则 abstract定义抽象类: abstract定义抽象方法,只有声明,不需要实现: 包含抽象方法的类是抽象类: 抽象类中可以包含普通方法,也可以没有抽象方法: 抽象类不能直接创建,可 ...
- go 程序整个执行过程
- 使用 kill 命令杀死 java进程,你用对了吗?
在本地调试agent相关功能,需要经常性的杀掉Java进程,验证一些极端情况. 每次都是本能执行如下步骤 jps kill -9 <pid> reboot 有一次验证,发现代码中添加的Sh ...
- 守护线程在logback中的使用 - 论基础知识的重要性
守护线程在logback中的使用 先说问题,在java应用中,logback的异步Appender是怎么在主线程结束后,停下来的? 复盘 我在一个logback的测试用例中,写了这样的代码和logba ...
- Java Annontation 注解的学习和理解
/** * <html> * <body> * <P> Copyright 1994 JsonInternational</p> * <p> ...
- AutoFac的简单使用教程
Autofac可以对代码进行依赖注入,实现控制反转.以下是本菜鸟在初次入门时的代码配置,其源码,内部原理都还有待日后研究.目前也只是仅仅做到了能够使项目正常使用而已. 跟我一样刚刚入门的菜鸟朋友们可以 ...