zookeeper 配置

 

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

2.         m1的usr/local目录下,解压缩zookeeper(执行命令tar –zvxf zookeeper.tar.gz)

3.         设置环境变量

打开/etc/profile文件!内容如下:

 


#set java & hadoop

export JAVA_HOME=/usr/local/program/jdk

export HADOOP_HOME=/usr/local/program/hadoop

export ZOOKEEPER_HOME=/usr/local/program/zookeeper

export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

 


 

注:修改完后profile记得执行source /etc/profile

 

4.         zookeeper的目录下进入conf目录修改配置文件

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

5.         zoo.cfg (vi zoo.cfg)

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

新增server.0=m1:2888:3888

         server.1=s1:2888:3888

         server.2=s2: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/program/zookeeper/data

# the port at which the clients will connect

clientPort=2181

#

# 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.0=m1:2888:3888

server.1=s1:2888:3888

server.2=s2:2888:3888



 


  注:


server.0=m1:2888:3888

server.1=s1:2888:3888

server.2=s2:2888:3888



这三行为配置

zookeeper集群的机器( m1、 s1、 s2)分别用 server.0和 server.1、 server.2标识, 2888和 3888为端口号( zookeeper集群包含一个 leader(领导 )和多个 fllower(随从 ),启动 zookeeper集群时会随机分配端口号,分配的端口号为 2888的为 leader,端口号为 3888的是 fllower)



6.         mkdir /usr/local/program/zookeeper/data
7.         data目录下,创建文件myid,值为0  (0用来标识m1这台机器的zookeeper )

到此为止 m1上的配置就已经完成;接下来配置s1和s2.


8.         zookeeper目录复制到s1和s2中(scp –r /usr/local/program/zookeeper s1:/usr/local/program/zookeeper)

9.         etc/profile文件复制到s1和s2中

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

10.     s1中相应的myid中的值改为1,s2中相应的myid中的值改为2

11.     zkServer.sh  start

12.     zkServer.sh  status

 

 

 

zookeeper的shell操作

启动zookeeper:zkServer.sh  start

进入zookeeper:zkCli.sh

 

 

hbase配置

 

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的伪分布

1.         m1上解压缩、重命名、设置环境变量HBASE_HOME

如下:


#set java & hadoop

export JAVA_HOME=/usr/local/jdk

export HADOOP_HOME=/usr/local/hadoop

export ZOOKEEPER_HOME=/usr/local/zookeeper

export HBASE_HOME=/usr/local/hbase

export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$JAVA_HOME/bin:$PATH

 


注:修改完成后记得source /etc/profile

 

2.         $HBASE_HOME/conf/hbase-env.sh,修改内容如下


export JAVA_HOME=/usr/local/jdk

         export HBASE_MANAGES_ZK=true



3.        

修改文件hbase-site.xml,修改内容如下

     

<property>

           <name>hbase.rootdir</name>

           <value>hdfs://m1:9000/hbase</value>

         </property>

         <property>

           <name>hbase.cluster.distributed</name>

           <value>true</value>

         </property>

         <property>

           <name>hbase.zookeeper.quorum</name>

           <value>m1</value>

         </property>

         <property>

           <name>dfs.replication</name>

           <value>1</value>

         </property>

4.         (可选)修改regionservers,具体操作见ppt


5.         start-hbase.sh

    注意:启动hbase之前要先启动hadoop,确保hadoop可写入数据。

 

 

HBase的完全分布集群

1.hbase的机群搭建过程(在原来的m1上的hbase伪分布基础上进行搭建)

1.1 集群结构,主节点(hmaster)是m1,从节点(region server)是s1和s2

1.2 修改m1上的hbase的几个文件

    (1)修改hbase-env.sh的最后一行export HBASE_MANAGES_ZK=false

         (2)修改hbase-site.xml文件的hbase.zookeeper.quorum的值为m1,s1,s2

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

1.3 复制m1中的hbase文件夹到s1、s2中        

    复制m1中的/etc/profile到s1、s2中,在s1、s2上执行source /etc/profile

1.4 启动集群

Ø  首先启动hadoop(在m1上start-all.sh),

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

Ø  最后在m1上启动hbase集群(start-hbase.sh)。

HBase Shell操作(增删改查)

说明:

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'

 

2. 获取一个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'