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 ...
随机推荐
- 20155326刘美岑 2016-2017-2 《Java程序设计》第5周学习总结
20155326刘美岑 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 使用 try.catch (1)java中所有的错误都会被打包为对象,如果愿意,可以尝 ...
- 基类的析构函数写成virtual虚析构函数
虚函数作用:动态绑定,实现多态效果. 场景问题: 派生类中有资源需要回收,而在编程中采用多态,由基类的指针指向派生类,则在释放的时候,如果基类的析构函数不是virtual,则派生类的析构函数得不到释放 ...
- 2.Java面向对象编程三大特性之继承
在<Think in Java>中有这样一句话:复用代码是java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复用代码并对其加以改变是不够的,他还必须能够做更多的事情.复用 ...
- PHP搜索 搜索 搜索
//搜索界面 public function search(){ $param=input('param.'); $where=[]; //搜索框 if(!empty($param['content' ...
- POJ2828线段树单点更新——逆序更新
Description 输入n个有序对< pi, vi >,pi表示在第pi个位置后面插入一个值为vi的人,并且pi是不降的.输出最终得到的v的序列 Input 多组用例,每组用例第一行为 ...
- Legal or Not HDU
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- 设置这个属性,progress就可以变成和背景一起的了
这个是放在Panel上的,
- ReLU为什么比Sigmoid效果好
附:双曲函数类似于常见的(也叫圆函数的)三角函数.基本双曲函数是双曲正弦"sinh",双曲余弦"cosh",从它们导出双曲正切"tanh" ...
- Alwasyon环境下增加数据文件需要注意的几点
半夜收到报警短信,服务器磁盘空间不足,爬起来检查一番,发现由于索引重建导致,而且该磁盘下仍有自动增长的数据文件,由于该服务器上其他盘符有剩余空间,于是打算将该磁盘下的数据文件限制增长,并新增几个数据文 ...
- C# winform ListBox实现滚动条自动滚动至底部
效果如图: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...