28-hadoop-hbase入门小程序
hbase的完全分布式建立起来了, 可以试下好使不
1, 导包, {HBASE_HOME}/lib 下所有的jar包, 导入
2, 使用junit测试, 会报错, 因为缺少一个jar

3, 获取链接, 只需要提供zookeeper的地址即可
/**
* 获取链接, 只需要zookeeper的链接就可了
*/
@Before
public void beforeTest() throws IOException {
Configuration conf = HBaseConfiguration.create();
// hbase端口默认2181, 可以使用hbase.zookeeper.property.clientPort设置
conf.set("hbase.zookeeper.quorum", "192.168.208.106,192.168.208.107,192.168.208.108");
// 去的数据库连接对象
connect = ConnectionFactory.createConnection(conf);
} /**
* 关闭资源
*/
@After
public void afterTest() throws IOException {
if (connect != null) {
connect.close();
}
}
4, 新建表
@Test
public void testCreate() throws IOException {
//去的一个数据库元操作对象
Admin admin = connect.getAdmin();
if (admin.tableExists(table)) {
// 删除需要先disable
admin.disableTable(table);
admin.deleteTable(table);
}
// 创建表描述对象
HTableDescriptor htable = new HTableDescriptor(table); // 创建列族描述对象
HColumnDescriptor hColumn = new HColumnDescriptor("cf1".getBytes());
hColumn.setMaxVersions();
hColumn.setBlockCacheEnabled(true);
hColumn.setBlocksize(); // 数据库中新建一个列族
htable.addFamily(hColumn);
// 新建数据库
admin.createTable(htable);
}
5, 插入模拟数据
/**
* 数据插入
*/
@Test
public void testInsert() throws IOException {
Table table = connect.getTable(tableName); List<Put> list = new ArrayList<>(); for (int i = ; i < ; i++) {
int month = i % ;
int day = i % ;
Put put = new Put(getRowKey("", month, day).getBytes());
// 列1
put.addColumn("cf1".getBytes(), "address".getBytes(), "bj".getBytes());
// 列2
put.addColumn("cf1".getBytes(), "type".getBytes(), String.valueOf(random.nextInt()).getBytes());
list.add(put);
}
table.put(list);
table.flushCommits();
}
生成模拟rowkey的方法为:
/**
* rowkey 生成策略, 电话号 + 日期
*/
public String getRowKey(String prePhone, int month, int day) {
return prePhone + random.nextInt() + "_2017" + month + day;
}
6, 根据rowkey进行查询
因为, rowkey 默认按照字典进行排序
/**
* 根据rowkey 查询
* @throws IOException
*/
@Test
public void scan() throws IOException {
Table table = connect.getTable(tableName);
//rowkey 按照字典排序, 所以可以截取
Scan scan = new Scan("13862288854_201700".getBytes(), "13899338829_201714".getBytes());
ResultScanner scanner = table.getScanner(scan); for (Iterator<Result> iterator = scanner.iterator(); iterator.hasNext(); ) {
Result next = iterator.next();
byte[] value = next.getValue("cf1".getBytes(), "type".getBytes());
System.out.println(new String(value, "utf8"));
}
}
7, filter条件过滤
更多可见: http://hbase.apache.org/book.html#client.filter 第67条, 82.8 条
更多filter, 找了个比较详细的博客: http://blog.csdn.net/cnweike/article/details/42920547
@Test
public void filter() throws IOException {
// All表示全部匹配, 相当于and, one 相当于 or
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); // 查询某一个电话, type 等于 1
PrefixFilter prefixFilter = new PrefixFilter("".getBytes());
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("cf1".getBytes(), "type".getBytes(), CompareFilter.CompareOp.EQUAL, "".getBytes());
// 过滤器是对结果排序, 所以顺序影响效率
filterList.addFilter(prefixFilter);
filterList.addFilter(singleColumnValueFilter); // 创建查询对象
Scan scan = new Scan();
scan.setFilter(filterList);
Table table = connect.getTable(tableName);
ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) {
byte[] value = result.getValue("cf1".getBytes(), "type".getBytes());
System.out.println(new String(value, "utf8"));
} }
8, 根据单个rowkey查询
@Test
public void testGet() throws IOException {
Table table = connect.getTable(tableName);
Get get = new Get("13899126419_201717".getBytes()); Result result = table.get(get);
Cell cell = result.getColumnLatestCell("cf1".getBytes(), "address".getBytes());
System.out.println(new String(cell.getValueArray(), "utf8"));
}
系列来自尚学堂视频
28-hadoop-hbase入门小程序的更多相关文章
- Spring IoC、DI入门小程序
Alt+/智能提示xml配置文件节点及属性:在接口上使用Ctrl+T可以提示其实现类 一.IoC控制反转(将创建对象的权利交给spring)入门小程序 1.引入jar包 2.工程基本结构 3.新建Us ...
- 40个Python入门小程序
有不少同学学完Python后仍然很难将其灵活运用.我整理 37 个Python入门的小程序.在实践中应用Python会有事半功倍的效果. 分享 Github 项目,里面收集了 Python 学习资料 ...
- springMVC学习笔记(二)-----注解和非注解入门小程序
最近一直在做一个电商的项目,周末加班,忙的都没有时间更新博客了.终于在上周五上线了,可以轻松几天了.闲话不扯淡了,继续谈谈springMvc的学习. 现在,用到SpringMvc的大部分使用全注解配置 ...
- WebService概述和CXF入门小程序
一. 什么是WedService? WebService不是框架, 甚至不是一种技术, 而是一种跨平台,跨语言的规范, WebService的出现是为了解决这种需求场景: 不同平台, 不同语言所编写的 ...
- Spring MVC 的环境搭建和入门小程序
1.1.下载spring框架包. 1.1.1百度搜索Spring Framework. 进入spring官网,在网页右边选择想要下载的版本.如图 1.1.2进入页面按Ctrl+F搜索Distribut ...
- 微信小程序导航:官方工具+精品教程+DEMO集合(1月7更新)
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=14764346784612:简易教程:https://mp.weixin.qq.com/debug ...
- 微信小程序之小豆瓣图书
最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有.了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序 ...
- 【开源】微信小程序、小游戏以及 Web 通用 Canvas 渲染引擎 - Cax
Cax 小程序.小游戏以及 Web 通用 Canvas 渲染引擎 Github → https://github.com/dntzhang/cax 点我看看 DEMO 小程序 DEMO 正在审核中敬请 ...
- 利用Bomb打造自己的小程序
小程序开发 Bomb免费后端云开发 首先,小程序的开发已是热门,一个前段技术人员必备的技术就是开发小程序.在这里推荐一个入门小程序文章(连胜出品). 对于小程序的入门开发就不再做详细介绍,这里针对Bm ...
随机推荐
- stm32常识
cmsis全称Cortex Microcontroller Software Interface Standard,就是Cortex微处理器软件接口标准 stm32每组gpio有7组端口,分别是2个3 ...
- 终端简单使用 &vim编写代码
vim简单实用 & 用vim编写代码 ## 简单介绍 ## vi 1.c 建立1.c(文件存在,则打开1.c) vi共有三种模式: 按esc进入指令模式 按i进入编辑模式(按i光标位置不变 ...
- Leetcode-448. Find All Numbers Disappeared in an Array(solve without extra space easy)
Given an array of integers where 1 ≤ a[i] ≤ n (n= size of array), some elements appear twice and oth ...
- noip第34课作业
1. 信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...
- 省赛在即!最大流问题回顾学习!!DInic
Dinic是很好的算法,但是我还是从ek算法复习起步 面对最大流问题,印象最深的就是反向边的思想,他给我们提供了反悔的机会,其实现在放到实际上来想,可以相当于两边的水都流了这条边,只是方向不一样,放到 ...
- 1.mybatis入门
一:创建表 CREATE TABLE `country` ( `id` ) NOT NULL AUTO_INCREMENT, `countryname` varchar() DEFAULT NULL, ...
- 1.虚拟机中安装ubuntu
1.VMware安装很简单,全部默认安装即可. 2.安装完VMware之后,打开VMware,点击创建虚拟机 典型安装易出问题,所以这里选择自定义安装 安装过程选项配置如下 处理器数,核数,内存都可以 ...
- DFS遍历中forward、backward以及cross边的界定
再来看以下具体例子:
- Python学习--和 Oracle 交互(2)
当在 mac 电脑上用 Python 读取 oracle 数据库中的中文时,有可能返回数据为“?” 解决方案: 在数据库操作的函数前添加以下代码, import sysreload(sys)sys.s ...
- .net core 与ELK(1)安装Elasticsearch
1.安装java jdk [elsearch@localhost bin]$ java -version openjdk version "1.8.0_181" OpenJDK R ...