hbase代码说明(通话记录查询)
Hbase的项目(通话记录查询)
写java的包
导入jar包
Hbase的包,hadoop的包,驱动包
配置文件(hbase,hdfs,regionserver,backup)
建类
设置单机测试
Bulidpath————>addlibrary--->jUnit————》jUnit4
正式些代码:
链接hbase,写类来管理
Hbaseadmin admin=null;
@before
创建对象
Configuration:创建类
@Test
Createtable;创建表
连接上之后,配置文件就没有意义了,可以删除了。
Client客户端链接zk,
@Test
创建表之后加数据
加数据举,一律用put
没有put的话,就去创建put
创建表之前,需要创建rowkey=“1111”
然后将列族加载put中
接着就可以插入数据了
@test
插入完数据之后就是取数据了
Get
首先要创建get对象
在用get取数据之前,需要创建rowkey列族
取数据,所以需要结果的,所以创建result结果集
取到的结果存放在cell中,cell=rs.getcolumnlatestcell
取到数据,最后还需要打印
上边的过时了
System.out.println(new String(cell.getValue()));
上边的过时了,替代码:
System.out.println(new String(cellUtil.cloneValue(cell)));
@Test
第二种取数据的方法:scan
首先需要创建结果集resultscanner
再用scanner取数据的时候,需要先创建scan对象
Scan scan=new Scan();
Resultscanner rss=table.getScanner(scan)
套用for循环输出
代码优化:可以将scan设置一个范围,这样取出来的是一串连续的数据
通话记录:
本机号码
对方号码
时间
时长
主叫/被叫
查询只能查询最近的数据,远一些的数据,不是丢失了,而是以一种比较小的打包方式保存起来了。
五个字段保存需要设计rowkey
Rowkey是按照时间戳
手机号—时间戳
时间戳按照最近的时间去减。
手机号—(long.max-time)
Hadoop是分析离线数据的。
@test
给10个用户,每个用户添加100条数据记录
用for循环插入
首先每起个用户
String phoneNum=getPhoneNum(“158”),同时创建getPhoneNum类,并且给出格式
在内层循环里给出:
手机号
永华时长
通话类型
通话时间
都要给出格式
时间:dateString=sdf.parse(getDate(“2018”)
S四个属性都有了的时候,即可创建rowkey了,
String rowkey=phone+”-”+(Long.max-value-dateString);
用最大的时间一次相减,得出时间戳,既可以倒序排序了。这样创建rowkey,以时间戳作为rowkey了
后边就可以创建put去插入数据了
@test
取数据,分别有两种方式(get 和 scan)
查询二月份的通话时间,即:20180101000000-20180301000000
首先是指定手机号码
取数据的时候,要拿到rowkey,因为是时间段,拿到起始的rowkey和末尾的rowkey
将起始的和末尾的放进去,然后创建结果集,用结果集去接收
然后,打印输出。
优化就是减少重复数据
@Test
查询某一个用户某一天主叫的通话,相当于where子查询,在这里不是where,而是过滤器
创建过滤器
添加前缀(列有前缀prefix,没有后缀的)