1.ZooKeeper和Hbase的简答介绍:
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
- HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
- 两者联系:Hbase的运行依赖ZooKeeper。Hbase自身带有一个默认的ZooKeeper,本文讲解的是自己搭建ZooKeeper环境。
2.ZooKeeper环境搭建:
2.1软件下载:
我使用的是zookeeper-3.4.5.tar.gz。下载改文件后,将文件解压到/usr/local目录下:
sudo mv zookeeper-3.4.5.tar.gz /usr/local
tar -xvzf zookeeper-3.4.5.tar.gz12复制代码
2.2配置
进入zookeeper-3.4.5/conf/目录:,拷贝zoo_sample.cfg生成一个新文件zoo.cfg(zk默认读取的文件)。然后修改zoo.cfg中dataDir目录地址,增加访问地址和端口
cd zookeeper-3.4.6/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
###修改如下
dataDir=/usr/local/zookeeper-3.4.6/data ----修改此目录,可以任意
##添加如下内容
server.1=192.168.1.127:2887:3887
server.2=192.168.1.1128:2888:3888
server.3=192.168.1.129:2889:3889123456789复制代码
进入zookeeper-3.4.5目录,创建刚才配置中增加的data目录, 然后进入data目录,创建myid文件,输入服务器编号,比如在192.168.1.127上,myid文件就存储数字1,192.168.1.128上就存储数字2,192.168.1.129上就存储数字3.
mkdir data
cd data
vim myid
11234复制代码
2.3拷贝数据到其他服务器
1.复制zookeeper-3.4.5目录到其他从服务器
scp -r zookeeper-3.4.5 hadoop@192.168.1.128:~
scp -r zookeeper-3.4.5 hadoop@192.168.1.129:~
##注意在从服务器将zookeeper-3.4.5移动到/usr/local 不要这部也是没事的,只是为了保证集群环境一致
mv zookeeper-3.4.5 /usr/local1234复制代码
2.复制完成,登录到其他服务器,修改zookeeper-3.4.5/data/myid 文件的内容,slave1服务器就改成2,slave2服务器就改成3
2.4启动验证:
在从master,slave1,slave2依次执行zkServer.sh start 来启动 zookeeper,所有服务器启动完成后,就可以通过zkServer.sh status来查看服务器状态。没有报错说明都正常了。输入jps可以看到服务器中多了一个QuorumPeerMain服务。
cd /zookeeper-3.4.6
sh bin/zkServer.sh start
jps
输出:
QuorumPeerMain
###状态查询
sh bin/zkServer.sh status
leader---表示master
Mode: follower 表示是跟从123456789复制代码
到这里zk环境搭建完毕
3.Hbase环境搭建
HBase集群需要依赖于一个Zookeeper ensemble。HBase集群中的所有节点以及要访问HBase的客户端都需要能够访问到该Zookeeper ensemble。HBase自带了Zookeeper,但为了方便其他应用程序使用Zookeeper,最好使用单独安装的Zookeeper ensemble。
此外,Zookeeper ensemble一般配置为奇数个节点,并且Hadoop集群、Zookeeper ensemble、
HBase集群是三个互相独立的集群,并不需要部署在相同的物理节点上,他们之间是通过网
络通信的。
3.1软件下载
我下载的是hbase-0.94.16.tar.gz,hbase的版本需要与hadoop对应,查看是否对应只需要看hbase-0.94.1/lib/hadoop-core后面的版本号是否与hadoop的版本对应,如果不对应,可以将hadoop下hadoop-core文件复制过来,但是不能保证不会有问题
解压到/usr/local下
3.2配置
1.配置hbase-env.sh
该文件在{HBASE_HOME}/conf目录下。
vim conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk
export HBASE_CLASSPATH=/usr/local/hadoop/conf
export HBASE_MANAGES_ZK=false
1234567复制代码
其中,HBASE_CLASSPATH指向存放有Hadoop配置文件的目录,这样HBase可以找到HDFS的配置信息,由于本文Hadoop和HBase部署在相同的物理节点,所以就指向了Hadoop安
装路径下的conf目录。HBASE_MANAGES_ZK=false指示HBase使用已有的Zookeeper而不是自带的。
2.配置hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.1.127:9000/hbase</value>
<description>The directory shared by region servers.</description>
</property>
<property>
<name>hbase.hregion.max.filesize</name>
<value>1073741824</value>
<description>
Maximum HStoreFile size. If any one of a column families' HStoreFiles has
grown to exceed this value, the hosting HRegion is split in two.
Default: 256M.
</description>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>1073741824</value>
<description>
Memstore will be flushed to disk if size of the memstore
exceeds this number of bytes. Value is checked by a thread that runs
every hbase.server.thread.wakefrequency.
</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>The mode the cluster will be in. Possible values are
false: standalone and pseudo-distributed setups with managed Zookeeper
true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
</description>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description>Property from ZooKeeper's config zoo.cfg.
The port at which the clients will connect.
</description>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.zookeeper.property.tickTime</name>
<value>6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
<description>Comma separated list of servers in the ZooKeeper Quorum.
For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of servers which we will start/stop ZooKeeper on.
</description>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/hbase/tmp</value>
</property>
</configuration>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869复制代码
参数介绍:
1,hbase.rootdir:hbase所使用的文件系统为HDFS,根目录为hdfs://192.168.1.127:9000/hbase,该目录应该由HBase自动创建,只需要指定到正确的HDFS NameNode上即可。
2,hbase.hregion.max.filesize:设置HStoreFile的大小,当 大于这个数时,就会split 成两个文件
3,hbase.hregion.memstore.flush.size:设置memstore的大小,当大于这个值时,写入磁盘
4,hbase.cluster.distributed:指定hbase为分布式模式
5,hbase.zookeeper.property.clientPort:指定zk的连接端口
6,zookeeper.session.timeout:RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管.
7,hbase.zookeeper.property.tickTime:
8,hbase.zookeeper.quorum:默认值是 localhost,列出zookeepr的master,slave1,slave2
9,hbase.tmp.dir:指定HBase将元数据存放路径
123456789101112131415161718复制代码
3.配置regionservers 相当于hadoop的slave
vim conf/regionservers
192.168.1.127
192.168.1.128123复制代码
3.3拷贝数据到其他服务器
1.复制hbase目录到其他从服务器
scp -r hbase hadoop@192.168.1.128:~
scp -r hbase hadoop@192.168.1.129:~
##注意在从服务器将hbase移动到/usr/local 不要这部也是没事的,只是为了保证集群环境一致
mv hbase /usr/local1234复制代码
3.4启动验证:
注意需要先启动Hadoop
##启动Hadoop
start-all.sh
##启动Hbase
cd hbase
bin/start-hbase.sh
jps
输出:HRegionServer 1234567复制代码
通过浏览器查看:在浏览器中输入 : http://192.168.1.127:60010/
##停止
bin/stop-hbase.sh
1234复制代码
3.5hbase简答测试:
bin/hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.12, r1524863, Fri Sep 20 04:44:41 UTC 2013
hbase(main):001:0>
##创建一个名为 small的表,这个表只有一个 column family 为 cf。可以列出所有的表来检查创建情况,然后插入些值。
hbase(main):003:0> create 'small', 'cf'
0 row(s) in 1.2200 seconds
hbase(main):003:0> list
small
1 row(s) in 0.0550 seconds
hbase(main):004:0> put 'small', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0560 seconds
hbase(main):005:0> put 'small', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0370 seconds
hbase(main):006:0> put 'small', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0450 seconds
##检查插入情况.Scan这个表
hbase(main):005:0> scan 'small'
Get一行,操作如下
hbase(main):008:0> get 'small', 'row1'
disable 再 drop 这张表,可以清除你刚刚的操作
hbase(main):012:0> disable 'small'
0 row(s) in 1.0930 seconds
hbase(main):013:0> drop 'small'
0 row(s) in 0.0770 seconds
##导出与导入
bin/hbase org.apache.hadoop.hbase.mapreduce.Driver export small small
导出的表,在hadoop文件系统的当前用户目录下,small文件夹中。例如,导出后在hadoop文件系统中的目录结构:
bin/hadoop dfs -ls
Found 1 items
drwxr-xr-x - hadoop supergroup /small复制代码