Hbase听课笔记
Hbase完全分布式的安装
独立式:Standalone
完全分布式:fully-distributed
当hbase中某一个节点挂了的时候:
Hbase-daemon.sh start master
Hbase-daemon.sh start regionserver
./hbase shell 进入
List查看表
为什么hbase到2.2了,我们用0.98
软件整合
版本有要求,要有一整套
Hbase中删除表的时候,首先要禁用:
disable 'tbl'
报错:
Failed 1 action: NotServingRegionException: 1 time,
禁用之后,不能插入数据
Drop ‘tbl’
开启之后,才可以插入数据
put 'tbl','1111','cf:name','lisi'
创建命名空间
create_namespace 'sxt'
展示命名空间:
list_namespace
Ddl
Dml:put 、get、scan
count 'tbl':计算行数
Delete删除的时候,一定要按照rowkey来删
Scan:扫描
每次书写完,执行flush,才会写入磁盘
三个会合并在一起
Thrift:rpc:远程过程调用
过滤器:有前缀过滤器,没有后缀过滤器
表的层面
数据的层面
master running as process 2109. Stop it first.
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,没有后缀的)
@After
又开始就有结束
写单机方法测试
设置:
@before:是指在正式执行之前先导入
Zookeeper的端口号是2181
Rowkey:1111
Before:导入
Test:建表
Test:插入数据
Test:取数据
After:关闭
增加的限制条件