一、 hbase架构简介
HBase 是一个开源的、分布式的、数据多版本的,列式存储的nosql数据库。依托 Hadoop 的分布式文件系统 HDFS 作为底层存储, 能够为数十亿行数百万列的海量数据表提供随机、实时的读写访问。 HBase 集群服务包含:HBase 数据库服务、HDFS 分布式文件系统、Phoenix 查询引擎。压缩格式方面支持 GZIP、BZIP2、LZO、SNAPPY,可自行在应用中指定。 关于 HBase 更多的详细信息,可参阅 HBase 官方文档,关于 Phoenix 查询引擎的详细信息,可参阅 Phoenix 官方网站 。
与 Hadoop 一样,HBase 集群采用的是 master/slave 架构。 如下图所示,HBase 集群分三种节点类型:主节点 (HBase Master 和 HDFS NameNode),从节点 (HBase RegionServer 和 HDFS DataNode) 和客户端节点 (HBase Client)。 用户在HBase 客户端可通过HBase Shell、Java API(本地或MapReduce)、Rest API 或其他工具来访问HBase。 若需要使用除java外的其他语言时,可在客户端节点 (HBase Client)自行启动 Thrift Server 以供支持。
二、 hbase源码编译
1. 下载源码
$ git://git.apache.org/hbase.git
2. hbase编译
$ mvn clean package -DskipTests assembly:single
$ ls hbase-assembly/target/
三、 hbase配置安装
1. 配置JAVA_HOME
$ vim ./hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/lib/java
export HBASE_MANAGES_ZK=true
2. 配置HDFS
$ vim ./hbase/conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>master:60000</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60001</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/spark/workspace/zookeeper/data</value>
</property>
</configuration>
其中第一个属性指定本机的hbase的存储目录,必须与Hadoop集群的core-site.xml文件配置保持一致;第二个属性指定hbase的运行模式,true代表全分布模式;第三第四个属性指定hbase master的ip和port;第五个属性指定 Zookeeper 管控机器,一般为奇数个;第六个属性是数据存放的路径。这里我使用的默认的 HBase 自带的 Zookeeper。
3. 配置regionservers
$ vim ./hbase/conf/regionservers
slave1
slave2
4. hbase安装运行
$ pscp -r -h all_iplist hbase /home/hbase/
$ ./bin/start-hbase.sh
$ /home/hbase/bin/hbase shell
list
四、 hbase测试
1. hbase表创建插入查询删除操作
$ ./bin/hbase shell
hbase(main):001:0> create 'test', 'cf'
0 row(s) in 1.2130 seconds
=> Hbase::Table - test
hbase(main):002:0> list 'test'
TABLE
test
1 row(s) in 0.0180 seconds
=> ["test"]
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0850 seconds
hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0110 seconds
hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row