1.HBase基本概览:
(1)下载hbase安装文件,解压文件:hbase-1.0.1.1-bin.tar.gz:
(2)启动hbase(之前需要启动hadoop):
Hbase主目录:/opt/hbase-1.0.1.1
pmpa@namenode:/opt/hbase-1.0.1.1$cd bin
pmpa@namenode:/opt/hbase-1.0.1.1/bin$./start-hbase.sh
namenode: starting zookeeper, logging to /opt/hbase-1.0.1.1/bin/../logs/hbase-pmpa-zookeeper-namenode.out
datanode1: starting zookeeper, logging to /opt/hbase-1.0.1.1/bin/../logs/hbase-pmpa-zookeeper-datanode1.out
datanode2: starting zookeeper, logging to /opt/hbase-1.0.1.1/bin/../logs/hbase-pmpa-zookeeper-datanode2.out
starting master, logging to /opt/hbase-1.0.1.1/logs/hbase-pmpa-master-namenode.out
datanode1: starting regionserver, logging to /opt/hbase-1.0.1.1/bin/../logs/hbase-pmpa-regionserver-datanode1.out
datanode2: starting regionserver, logging to /opt/hbase-1.0.1.1/bin/../logs/hbase-pmpa-regionserver-datanode2.out
(3)启动Hbase Shell:
pmpa@namenode:/opt/hbase-1.0.1.1/bin$hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hbase-1.0.1.1/lib/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/pmpa/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
(4)查看Hbase状态:
hbase(main):001:0> status
2 servers, 0 dead, 1.0000 average load
(5)创建带有一个列族(colfam1)的表(testtable),并通过list命令来检查这张表是否已经存在:
hbase(main):003:0> create 'testtable', 'colfam1'
0 row(s) in 10.0010 seconds
=> Hbase::Table - testtable
hbase(main):004:0> list 'testtable'
TABLE
testtable
1 row(s) in 0.2010 seconds
=> ["testtable"]
(6)通过二个不同的行键myrow-1和myrow-2把新增数据添加到两个不同的行中。列族(colfam1)必须添加一个任意的限定符才能形成实际的列,如:colfam1:q1、colfam1:q2、colfam1:q3。
hbase(main):005:0> put 'testtable','myrow-1','colfam1:q1','value-1'
0 row(s) in 0.9320 seconds
hbase(main):006:0> put 'testtable','myrow-2','colfam1:q2','value-2'
0 row(s) in 0.1260 seconds
hbase(main):007:0> put 'testtable','myrow-2','colfam1:q3','value-3'
0 row(s) in 0.0820 seconds
(7)打印表里的数据,使用scan命令。如果想要获得单行数据,可以使用get命令。
hbase(main):008:0> scan 'testtable'
ROW COLUMN+CELL
myrow-1 column=colfam1:q1, timestamp=1445774635733, value=value-1
myrow-2 column=colfam1:q2, timestamp=1445774652735, value=value-2
myrow-2 column=colfam1:q3, timestamp=1445774658086, value=value-3
2 row(s) in 0.5730 seconds
hbase(main):009:0> get 'testtable','myrow-1'
COLUMN CELL
colfam1:q1 timestamp=1445774635733, value=value-1
1 row(s) in 0.2590 seconds
(8)可以使用delete命令删除数据,例如下边例子删除myrow-2行键的q2列。利用scan检查是否数据正确删除。
hbase(main):010:0> delete 'testtable','myrow-2','colfam1:q2'
0 row(s) in 0.1350 seconds
hbase(main):012:0> scan 'testtable'
ROW COLUMN+CELL
myrow-1 column=colfam1:q1, timestamp=1445774635733, value=value-1
myrow-2 column=colfam1:q3, timestamp=1445774658086, value=value-3
2 row(s) in 0.1380 seconds
(9)禁用 并删除这个测试表:
hbase(main):013:0> disable 'testtable'
0 row(s) in 2.6470 seconds
hbase(main):014:0> drop 'testtable'
0 row(s) in 1.3320 seconds
hbase(main):015:0> list 'testtable'
TABLE
0 row(s) in 0.0300 seconds
=> []
(10)退出Hbase Shell
hbase(main):016:0> exit
pmpa@namenode:/opt/hbase-1.0.1.1/bin$
2.HBase安装:
1.配置文件conf/hbase-site.xml :
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://namenode:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://namenode:8020</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/pmpa/zookeeper-3.4.6/tmp</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>namenode,datanode1,datanode2</value>
</property>
</configuration>
(1)配置完全分布式的运行模式,属性hbase.cluster.distributed设置为true。
(2)hbase.rootdir设置HDFS NameNode的访问地址,将决定HBase的数据会写到哪里。
2.配置region服务器,配置文件conf/regionservers
datanode1
datanode2
3. 分布式HBase依赖于Zookeeper集群。所有节点和客户端都必须能够正常访问,在配置文件conf/hbase-env.sh
中 export HBASE_MANAGES_ZK=true 可以将Zookeeper作为HBase的一部分来进行管理启动(默认值是true)如果是在HBase中管理Zookeeper,可以在Zookeeper安装目录的zoo.cfg中配置,也可以在HBase的安装目录的hbase-site.xml中进行配置。
为了避免混乱,推荐在hbase-site.xml中单独配置zookeeper。如果使用hbase-site.xml首先配置hbase.zookeeper.quorum,可以设置可用服务器列表。另外,hbase.zookeeper.property.dataDir可以设置存储zookeeper元数据的位置,hbase.zookeeper.property.clientPort可以绑定客户端服务器端口。
3.HBase配置
1. conf/hbase-env.sh:包括HBase启动时要使用到的环境变量。
2. conf/hbase-site.xml:该文件配置会覆盖HBase的默认设置。
3. 在配置好了之后需要在不能节点间把这些文件进行同步操作。可以使用工具rsync
4. hbase-default.xml和hbase-site.xml:
进程启动后,会先读取hbase-default.xml,然后读取hbase-site.xml文件,hbase-site.xml的内容会覆盖hbase-default.xml的内容。
5. HBase的Java客户端需要在CLASSPATH中指出依赖的JAR文件:
hbase
hadoop-core
zookeeper
log4j
commons-logging
cmmons-lang
6.在实际应用中,可以写shell脚本来在HBase集群的不同节点同步配置文件。Whirr、Puppet 和 Chef(可以了解下这几个工具)
7. hbase的web UI界面:
可以访问master 和 regionserver的UI界面,可以配置master和regionserver的端口(port),这2个变量分别是:
(1)hbase.master.info.port (默认值是60010)
(2)hbase.regionserver.port (默认值是60020)
访问时,如果要访问master的UI地址,则访问地址是http:// 主机名(或者IP): master端口 即可。从1.0版本开始,必须要在hbase-site.xml配置master和regionserver的port后才能访问,否则无法访问web UI。