HBase是一个分布式,版本化,面向列的数据库,构建在 Apache Hadoop和 Apache ZooKeeper之上。
       HBase是Nosql,是适合海量数据(如20PB)的秒级简单查询的数据库

总体思路,准备主从服务器,配置主服务器可以无密码SSH登录从服务器,解压安装JDK,安装Hadoop集群,安装Zookeeper集群,解压安装Hbase集群,配置文件

一、环境,3台CentOS 6,64位,Hbase 1.2.2需要64位Linux Master 192.168.0.21 主机名 hbase Slave1 192.168.0.20 主机名 hbaseslave Slave2 192.168.0.56 主机名 testlv

二、安装和配置Hadoop分布式集群,下面为主要步骤,详细内容请参考Hadoop分布式集群部署

  1. 配置21 SSH免密码登录20,56
  2. SSH免密码登录,因为Hadoop需要通过SSH登录到各个节点进行操作,我用的是root用户,每台服务器都生成公钥,再合并到authorized_keys
  3. 安装JDK8,/etc/profile设置系统JDK环境变量
  4. 主服务器安装Hadoop 2.7.2和配置hadoop安装目录/etc/hadoop下面的core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
  5. 配置/home/hadoop/hadoop/etc/hadoop目录下hadoop-env.sh、yarn-env.sh的JAVA_HOME,不设置的话,启动不了, export JAVA_HOME=/usr/local/jdk/
  6. 配置/usr/local/hadoop/etc/hadoop目录下的slaves,删除默认的localhost,增加2个从节点, hbaseslave testlv 7.将配置好的Hadoop复制到各个节点对应位置上,通过scp传送 scp -r /usr/local/hadoop/ root@192.168.0.20:/usr/local/ scp -r /usr/local/hadoop/ root@192.168.0.56:/usr/local/

三、安装和配置Zookeeper集群 1.Zookeeper服务集群规模不小于三个节点,要求各服务之间系统时间要保持一致。

2.下载zookeeper-3.4.6并解压到usr/local目录下及更名为zookeeper wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar –zvxf zookeeper-3.4.6.tar.gz -C /usr/local/ cd /usr/local/ mv zookeeper-3.4.6 zookeeper

3.设置环境变量和执行source /etc/profile使环境变量生效

/etc/profile文件最后加入下面内容

 #set java & hadoop & zookeeper 

 export ZOOKEEPER_HOME=/usr/local/program/zookeeper  

 export PATH=.:$ZOOKEEPER_HOME/bin:$PATH
  1. 在解压后的zookeeper的目录下进入conf目录修改配置文件

更名操作:mv zoo_sample.cfg zoo.cfg

  1. 编辑zoo.cfg (vi zoo.cfg)

修改dataDir=/usr/local//zookeeper/data/

新增server.1=hbase:2888:3888
server.2=hbaseslave:2888:3888
server.3=testlv:2888:3888

文件内容如下:

The number of milliseconds of each tick

tickTime=2000

The number of ticks that the initial

synchronization phase can take

initLimit=10

The number of ticks that can pass between

sending a request and getting an acknowledgement

syncLimit=5

the directory where the snapshot is stored.

do not use /tmp for storage, /tmp here is just

example sakes.

dataDir=/usr/local/zookeeper/data

the port at which the clients will connect

clientPort=2181

the maximum number of client connections.

increase this if you need to handle more clients

#maxClientCnxns=60

Be sure to read the maintenance section of the

administrator guide before turning on autopurge.

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

Purge task interval in hours

Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1 server.1=hbase:2888:3888
server.2=hbaseslave:2888:3888
server.3=testlv:2888:3888

备注:server.1=hbase:2888:3888
server.2=hbaseslave:2888:3888
server.3=testlv:2888:3888

这三行为配置zookeeper集群的机器(hbase、hbaseslave、testlv)分别用server.1和server.2、server.3标识,2888和3888为端口号(zookeeper集群包含一个leader(领导)和多个follower(随从),启动zookeeper集群时会随机分配端口号,分配的端口号为2888的为leader,端口号为3888的是follower)

6.建文件夹mkdir /usr/local/zookeeper/data

7.在data目录下,创建文件myid,值为1 (1用来标识hbase这台机器的zookeeper )

到此为止hbase服务器上zookeeper的配置就已经完成;接下来配置hbaseslave和testlv.

  1. 把zookeeper目录复制到hbaseslave和testlv中 scp –r /usr/local/zookeeper hbaseslave:/usr/local/zookeeper scp –r /usr/local/zookeeper testlv:/usr/local/zookeeper
  2. 把修改后的etc/profile文件复制到hbaseslave和testlv中

(复制完后记得在hbaseslave和testlv中执行命令source /etc/profile)

  1. 把hbase中相应的myid中的值改为2,testlv中相应的myid中的值改为3
  2. 在三台机器的/etc/hosts中都添加如下内容 192.168.0.20 hbaseslave 192.168.0.21 hbase 192.168.0.56 testlv
  3. 启动,在三个节点上分别执行命令/usr/local/zookeeper/bin/zkServer.sh start
  4. 检验,在三个节点上分别执行命令/usr/local/zookeeper/bin/zkServer.sh status

21 hbase为Leader [root@hbase zookeeper]# ./bin/zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: leader

20 hbaseslave和56 testlv为follower [root@hbaseslave ~]# /usr/local/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower

56 testlv为follower [root@testlv ~]# /usr/local/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower You have new mail in /var/spool/mail/root

14.zookeeper的shell操作 启动zookeeper:/usr/local/zookeeper/bin/zkServer.sh start

进入zookeeper:/usr/local/zookeeper/bin/zkCli.sh

四、HBase基本概念:数据模型、物理模型、体系结构

1.HBase(NoSQL)的数据模型 1.1 表(table),是存储管理数据的。

1.2 行键(row key),类似于MySQL中的主键。

行键是HBase表天然自带的。

1.3 列族(column family),列的集合。

HBase中列族是需要在定义表时指定的,列是在插入记录时动态增加的。

HBase表中的数据,每个列族单独一个文件。

1.4 时间戳(timestamp),列(也称作标签、修饰符)的一个属性。

行键和列确定的单元格,可以存储多个数据,每个数据含有时间戳属性,数据具有版本特性。    

如果不指定时间戳或者版本,默认取最新的数据。

1.5 存储的数据都是字节数组。

1.6 表中的数据是按照行键的顺序物理存储的。

2.HBase的物理模型

2.1 HBase是适合海量数据(如20PB)的秒级简单查询的数据库。

2.2 HBase表中的记录,按照行键进行拆分,拆分成一个个的region。

许多个region存储在region server(单独的物理机器)中的。

这样,对表的操作转化为对多台region server的并行查询。

3.HBase的体系结构

3.1 HBase是主从式结构,HMaster、HRegionServer

五、安装与配置Hbase分布式集群

HBase的完全分布集群 1.hbase的集群搭建过程

1.1 集群结构,主节点(HMaster)是hbase,从节点(region server)是hbaseslave和testlv

1.2 服务器hbase上下载和解压缩安装HBase到/usr/local/ wget http://mirrors.hust.edu.cn/apache/hbase/stable/hbase-1.2.2-bin.tar.gz tar -xvf hbase-1.2.2-bin.tar.gz -C /usr/local/ cd /usr/local/ mv hbase-1.2.2 hbase

1.3修改hbase上的HBase的几个文件

(1)修改/usr/local/hbase/conf/hbase-env.sh的其中一行export HBASE_MANAGES_ZK=false

(2)hbase-site.xml文件内容如下 hbase.rootdir hdfs://hbase:9000/hbase hbase.cluster.distributed true hbase.master hbase:60000 hbase.zookeeper.property.datadir /usr/local/hadoop/tmp/zookeeper--> hbase.zookeeper.quorum hbase,hbaseslave,testlv hbase.master.port 16000

<property>
          <name>hbase.master.info.port</name>
               <value>16010</value>
  </property>
   <property>
          <name>hbase.master.info.bindAddress</name>
               <value>192.168.0.21</value>
    </property>

(3)修改regionservers文件(存放的region server的hostname),内容修改为hbaseslave、testlv

2 复制hbase中的hbase文件夹到hbaseslave、testlv中
scp -r /usr/local/hbase root@hbaseslave:/usr/local/
scp -r /usr/local/hbase root@testlv:/usr/local/ 复制hbase中的/etc/profile到hbaseslave、testlv中,在hbaseslave、testlv上执行source /etc/profile scp /etc/profile root@hbaseslave:/etc/
scp /etc/profile root@testlv:/etc/

3 启动HBase集群

3.1 先启动hadoop(在hbase上start-all.sh) [root@hbase ~]#/usr/local/hadoop/sbin/start-all.sh

3.2 然后启动zookeeper集群(分别在三台机器上zkServer.sh start;可以使用zkServer.sh status查看zk的状态)。

3.3 最后在hbase上启动hbase集群(start-hbase.sh)。 [root@hbase ~]#/usr/local/hbase/bin/start-hbase.sh

4.我们可以通过链接 http://192.168.0.21:16010/master-status 查看HBase的信息 可以通过链接 http://192.168.0.21:16010/zk.jsp 查看zookeeper的信息 请参考附件图片。

HBase Shell操作(增删改查) 说明: hbase提供了一个shell的终端给用户交互

[root@hbase ~]#/usr/local/hbase/bin/hbase shell

创建表

create 'users','user_id','address','info'

(说明:表users,有三个列族user_id,address,info)

列出全部表

list

得到表的描述

describe 'users'

创建表

create 'users_tmp','user_id','address','info'

删除表

disable 'users_tmp'

drop 'users_tmp'

添加记录 put ‘表名’,’行键(标识)’,’列族:字段’,’数值’

示例: put 'users','xiaoming','info:age','24';

put 'users','xiaoming','info:birthday','1987-06-17';

put 'users','xiaoming','info:company','alibaba';

put 'users','xiaoming','address:contry','china';

put 'users','xiaoming','address:province','zhejiang';

put 'users','xiaoming','address:city','hangzhou';

put 'users','zhangyifei','info:birthday','1987-4-17';

put 'users','zhangyifei','info:favorite','movie';

put 'users','zhangyifei','info:company','alibaba';

put 'users','zhangyifei','address:contry','china';

put 'users','zhangyifei','address:province','guangdong';

put 'users','zhangyifei','address:city','jieyang';

put 'users','zhangyifei','address:town','xianqiao'

获取一条记录

  1. 取得一个id的所有数据

get 'users','xiaoming'

  1. 获取一个id,一个列族的所有数据

get 'users','xiaoming','info'

3.获取一个id,一个列族中一个列的所有数据

get 'users','xiaoming','info:age'

更新记录

put 'users','xiaoming','info:age' ,'29'

get 'users','xiaoming','info:age'

put 'users','xiaoming','info:age' ,'30'

get 'users','xiaoming','info:age'

获取单元格数据的版本数据

get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>1}

get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>2}

get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>3}

获取单元格数据的某个版本数据 〉get 'users','xiaoming',{COLUMN=>'info:age',TIMESTAMP=>1364874937056}

全表扫描

scan 'users'

删除xiaoming值的'info:age'字段

delete 'users','xiaoming','info:age'

get 'users','xiaoming'

删除整行

deleteall 'users','xiaoming'

统计表的行数

count 'users'

清空表

truncate 'users'