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:关闭

 

增加的限制条件

 

 

 

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/81057539
今日推荐