一、介绍
Apache HBase是Hadoop数据库,一个分布式的、可伸缩的大型数据存储。
当您需要随机的、实时的读/写访问您的大数据时,请使用Apache HBase。这个项目的目标是承载非常大的表——数十亿行X百万列的列——运行在在商用硬件的集群上。Apache HBase是一个开源的、分布式的、版本化的、非关系数据库,以谷歌的Bigtable为模型:一个结构化的分布式存储系统,由Chang 等l提供。就像Bigtable利用谷歌文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS上提供了类似于Bigtable的功能。
可以直接下载国内网站的 Hbase:hbase-1.3.1-src.tar.gz
特征:
- 线性和模块化的可伸缩性。
- 严格一致的读和写。
- 表的自动和可配置分片
- 区域服务器之间的自动故障转移支持。
- 使用Apache HBase表支持Hadoop MapReduce作业的方便的基类。
- 易于使用Java API用于客户端访问。
- 块缓存和Bloom过滤器用于实时查询。
- 查询谓词通过服务器端过滤器向下推
- 节约网关和一种支持XML、原buf和二进制数据编码选项的rest式Web服务
- 可扩展jruby-based(JIRB)壳
- 支持通过Hadoop度量子系统向文件或Ganglia导出指标;或通过JMX
51 export HBASE_HOME=$HOME/hbase
52 export PATH=$HBASE_HOME/bin:$PATH
53 export HBASE_CLASSPATH=$HBASE_HOME/lib/*
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mymac:9000/hbase</value> 主目录
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>mymac,master,slave1,slave2</value> 配置 zookeeper
</property>
<property>
<name>hbase.zookeeper.sission.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value> zookeeper 地址
</property>
<property>
<name>hbase.master</name>
<value>mymac</value> 指定主服务器
</property>
<property>
<name>hbase.regionserver.lease.period</name>
<value>60000</value>
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>60000</value>
</property>
</configuration>
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将元数据存放路径
将启动的 slave 服务器的主机名称加入其中即可。
mymac
master
slave1
slave2
starting master, logging to /usr/local/var/log/hbase/hbase-wangxinnian-master-mymac.out
mymac: starting regionserver, logging to /usr/local/var/log/hbase/hbase-wangxinnian-regionserver-mymac.out
18816 ResourceManager
64624 HMaster
18626 DataNode
42148 RunJar
63813 RunJar
64728 HRegionServer
18714 SecondaryNameNode
18555 NameNode
62635 Launcher
18893 NodeManager
64765 Jps
进程中有 HMaster 和 HRegionServer 即可表示启动成功。必须注意,尽管设置 Hbase 不需要 管理 zookeeper,但是hbase 还是依赖 zookeeper 的运行的。所以在此之前必须先安装 zookeeper。大家可以参考 zookeeper 的安装。export HBASE_MANAGES_ZK=true,这样启动的时候可以一起启动 zookeeper。使用 jps 可以看到 HQuorumPeer进程。
建议先启动 zookeeper,再启动 hbase
五、拷贝到集群中其它的服务器上
1、拷贝.bash_profile 或者 /etc/profile 到集群其它服务器上。
如: scp ~/.bash_profile wangxinnian@master:~
2、拷贝 hbase 目录到集群其它的服务器上。
如: scp -r ~/hbase wangxinnian@master:~/
其它集群服务器同理启动即可。
六、验证Hbase
1、web 查看
输入地址: http://mymac: 16010 。出现 web 页面表示正常。
2、一个简单的操作
wangxinnian@mymac:~/hbase$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/wangxinnian/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/wangxinnian/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
//创建一个名为 small的表,这个表只有一个 column family 为 cf。可以列出所有的表来检查创建情况,然后插入些值。
hbase(main):001:0> create 'small','cf'
0 row(s) in 1.4160 seconds
=> Hbase::Table - small
hbase(main):002:0> list
TABLE
small
1 row(s) in 0.0200 seconds
=> ["small"]
hbase(main):003:0> put 'small','row1','cf:a','value'
0 row(s) in 0.1110 seconds
hbase(main):004:0> put 'small', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0130 seconds
hbase(main):005:0> put 'small', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0130 seconds
//检查插入情况.Scan这个表
hbase(main):006:0> scan 'small'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1503310610537, value=value
row2 column=cf:b, timestamp=1503310632539, value=value2
row3 column=cf:c, timestamp=1503310644605, value=value3
3 row(s) in 0.0240 seconds
//Get一行,操作如下
hbase(main):007:0> get 'small', 'row1'
COLUMN CELL
cf:a timestamp=1503310610537, value=value
1 row(s) in 0.0240 seconds
//disable 再 drop 这张表,可以清除你刚刚的操作
hbase(main):008:0> disable 'small'
0 row(s) in 2.2720 seconds
hbase(main):009:0> drop 'small'
0 row(s) in 1.2610 seconds
hbase(main):010:0> quit
导出与导入,注意再重复上述的步骤,但是不要 drop,否则 small 被删除不存在了。
$hbase org.apache.hadoop.hbase.mapreduce.Driver export small small
导出的表,在hadoop文件系统的当前用户目录下,small文件夹中。例如,导出后在hadoop文件系统中的目录结构:
wangxinnian@mymac:~/hbase$ hadoop fs -ls /user/wangxinnian/small
Found 2 items
-rw-r--r-- 1 wangxinnian supergroup 0 2017-08-21 18:25 /user/wangxinnian/small/_SUCCESS
-rw-r--r-- 1 wangxinnian supergroup 273 2017-08-21 18:25 /user/wangxinnian/small/part-m-00000
$ ./bin/local-master-backup.sh 2 3 5
杀掉一个备份master ,找到PID. PID存储在 /tmp/hbase-USER-X-master.pid这样的文件中. 文件内容就只有 PID. 所以可以使用
kill -9命令杀掉
PID. 一个命令如下:$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9比如:wangxinnian@mymac:/tmp$ cat hbase-wangxinnian-2-master.pid | xargs kill -9查看 pid 的值,wangxinnian@mymac:/tmp$ cat hbase-wangxinnian-3-master.pid 685972、启动和停止备份 RegionServer
HRegionServer按照HMaster的指示管理其存储库中的数据。通常,一个HRegionServer在集群中的每个节点上运行。在相同的系统上运行多个HRegionServer对于在伪分布模式下进行测试是很有用的。local-regionservers.sh命令允许您运行多个HRegionServer。它以类似于local-master-backup.sh命令,您所提供的每个参数代表一个实例的端口偏移量。每个 HRegionServer都需要两个端口,默认端口是16020和16030。但是,额外的 HRegionServer的基础端口不是默认端口,因为HMaster使用默认端口,它也是自HBase 1.0.0以来的 HRegionServer。基本端口是16200和16300。您可以在服务器上运行99个额外的 HRegionServer,而不是HMaster或备份HMaster。下面的命令将启动4个附加的 HRegionServer,从1620/16302(基本端口16200/16300+2)开始运行。$ .bin/local-regionservers.sh start 2 3 4 5
手动停止一个 RegionServer也是用
local-regionservers.sh命令,带
stop参数和服务器的数值。
直接 stop-abase.sh停止集群服务。$ .bin/local-regionservers.sh stop 3