Bigdata

HBase 协处理器

Submitted by Lizhe on Thu, 05/04/2017 - 23:46

协处理器可以将一部分运算工作移动到数据的存放端

协处理器允许用户在region服务器上运行自己的代码, 更准确地说是让用户可以在region上进行具体操作并且可以使用类似RDBMS数据库中trigger的功能

1 配置文件式 hbase-site.xml

    <property>
        <name>hbase.coprocessor.region.classes</name>
        <value>hbase.observer.RegionObserverExample</value>
    </property>

2 命令行式

删除

alter 'test', METHOD => 'table_att_unset',NAME => 'coprocessor$1'

添加

Hive 入门

Submitted by Lizhe on Wed, 05/03/2017 - 23:19

下载

http://apache.fayea.com/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz

这里我解压到

/download/apache-hive-1.2.2-bin

以下操作均已上面路径为基础

先创建几个目录

[root@lzvm apache-hive-1.2.2-bin]# ls
bin  conf  examples  hcatalog  lib  LICENSE  NOTICE  README.txt  RELEASE_NOTES.txt  scripts
[root@lzvm apache-hive-1.2.2-bin]# mkdir log
[root@lzvm apache-hive-1.2.2-bin]# mkdir tmp

[root@lzvm apache-hive-1.2.2-bin]# mkdir tmp2

HBase 计数器

Submitted by Lizhe on Wed, 05/03/2017 - 22:37

 

计数器功能可以用来做点击统计,增长的id这类需要每次都保证线程安全的场景

计数器是一类特殊的列, 也挂在列簇下,不过不能使用put去赋值

无论是使用下面哪种方式都只会创建一个带有值的普通列,而不是一个计数器

put 'test','row1','cf:hits','1'

put 'test','row1','cf:hits',1

当尝试使用incr命令来处理上面的方式设置的列值时,会得到如下错误

hbase(main):005:0> incr 'test','row1','cf:hits',1

HBase CRUD Scan

Submitted by Lizhe on Mon, 05/01/2017 - 17:51

scan操作每次使用next()方法获得一行数据都会发送一个RPC请求而不是一次性拿回全部数据

最后要像jdbc一样调用close释放资源

hbase-site.xml 中的 hbase.regionserver.lease.period 属性可以帮助设置超时多久后hbase会释放一个失联的scanner

package hbase.sample;

import java.io.IOException;

HBase CRUD Get

Submitted by Lizhe on Sun, 04/30/2017 - 23:10

HTable类提供了get()方法

我们可以一次获取一条数据或者多条

如果不设置时间戳的话,默认会返回最新版本

get.setTimeStamp(1493569159412l); 会帮助你获取一个指定的时间戳数据

get.setTimeRange(1l, 1493569168382l); 会得到 >=1 和 < 1493569168382 的最大时间戳的数据,下面的数据内容使用上面的时间戳范围会得到data1-2, 因为最大时间戳为不包含

HBase CRUD Put

Submitted by Lizhe on Sat, 04/29/2017 - 19:51

HBase 通过org.apache.hadoop.hbase.client 包中的HTable类提供存储,检索和删除数据的基本功能

所有对数据的操作都以行为级别保证了原子性, 当许多客户端需要同时修改同一行时会产生问题,

应该使用batch来更新减少单独操作同一行数据的次数.

在创建HTable实例时,每个实例都需要扫描.META.表, 以检查该表是否存在,可用.

推荐用户只创建一个或是为每个线程只创建一个HTable实例 (当然在Java环境中我们还是推荐对所有对象在可能的情况下都采用单例模式)

存取数据的主要方法如下

public Put add(byte [] family, byte [] qualifier, byte [] value)

public List<Cell> get(byte[] family, byte[] qualifier)

Cell类实现了KeyValue接口, 代表了一个唯一的数据单元格,使用行键,列簇,列限定符,时间戳指向一个单元格的值.

HBase 分区 (region)

Submitted by Lizhe on Thu, 04/27/2017 - 17:47

HBase中扩展和负载均衡的基本单元称为region 

region是使用rowkey进行排序的连续存储空间 ( HBase的region和HDFS中的文件不是一个概念)

一个table一开始只有一个region,随着存储数据的增长而增加

每个region只会由一个region server加载, 一个region server一般(最佳) 加载10~1000ge 个region

当存储的数据大小超过配置的最大值时, region会采取一种"分裂"的机制来让自己变成2个region

(系统会在middle key处将region拆分成两个)

 

再强调一次

HBase的region和HDFS中的文件不是一个概念

region在拆分后,仍然会使用原来的存储文件, 直到合并动作(需要离线后使用工具)运行后,把存储文件异步地写成独立的文件