文章目录
- 一、HBase简介
- 二、HBase结构
- 1.1HBase逻辑结构
- 1.2HBase物理结构
- 1.3HBase基础架构
- 三、HBase安装配置
- 3.1单机模式
- 3.2集群搭建
- 四、HBase JAVA API
一、HBase简介
《HBase官方文档》的原文地址是:http://hbase.apache.org/book.html
W3Cschool.cn进行整理翻译 https://www.w3cschool.cn/hbase_doc/
HBase是Apache的Hadoop项目的子项目,是Hadoop Database的简称。
下载:https://www.apache.org/dyn/closer.cgi/hbase/
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式
二、HBase结构
1.1HBase逻辑结构
行切片 列转列族
1.2HBase物理结构
1.3HBase基础架构
三、HBase安装配置
HBASE分为单机模式,伪分布模式,集群模式:
3.1单机模式
1.上传并解压
tar -zxvf hbase-2.4.15-bin.tar.gz -C /opt/modules/
2.修改配置文件 conf/hbase-site.xml
#前三行是默认的,有分布式需求的话,可以把hbase.cluster.distributed改成true
......
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>./tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!--指定hbase管理页面的端口号-->
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
<!--指定hdfs的地址-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://sunshuo:8020/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/zookeeper</value>
</property>
.......
3.启动服务
bin/start-hbase.sh
bin/hbase shell #shell操作
3.2集群搭建
HBase集群建立在Hadoop集群的基础上,而且依赖于ZooKeeper,因此在搭建HBase集群之前,需要将Hadoop集群和ZooKeeper集群搭建好。
1. 上传解压HBase安装包
$ tar -zxf hbase-2.4.15-bin.tar.gz -C /opt/modules/
2. hbase-env.sh文件配置
......
#conf/hbase-env.sh,配置HBase关联的JDK,并禁用HBase自带的ZooKeeper,
export JAVA_HOME=/opt/modules/jre1.8.0_361
#禁用HBase自带的ZooKeeper,使用外部独立ZooKeeper
export HBASE_MANAGES_ZK=false
......
3. hbase-site.xml文件配置
......
<configuration>
<!--需要与HDFS NameNode端口一致-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://centos1:9820/hbase</value>
</property>
<!--开启分布式-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--ZooKeeper节点列表 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>centos1:2181,centos2:2181,centos3:2181</value>
</property>
<!--ZooKeeper数据存放目录-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/modules/hbase-2.4.9/zkData</value>
</property>
<!--在分布式环境下设置为false,为解决启动HMaster无法初始化WAL的问题-->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>
</configuration>
......
4. regionservers文件配置 #conf/regionservers
......
centos1
centos2
centos3
......
5.复制HBase到其他节点
scp -r hbase-2.4.15/ centos2:/opt/modules/
scp -r hbase-2.4.15/ centos5:/opt/modules/
6.启动
bin/start-hbase.sh
7.启动后shell命令
bin/hbase shell
四、HBase JAVA API
# pom.xml
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.4.15</version>
</dependency>
package hdfs.demo;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
public class HBaseCreateTable{
public static void main(String[] args) throws Exception {
//创建HBase配置对象
Configuration conf= HBaseConfiguration.create();
//指定ZooKeeper集群地址
conf.set("hbase.zookeeper.quorum", "192.168.10.101:2181,192.168.10.102:2181,192.168.10.105:2181");
//创建连接对象Connection
Connection conn= ConnectionFactory.createConnection(conf);
//得到数据库管理员对象
Admin admin=conn.getAdmin();
//创建表描述,并指定表名
TableName tableName=TableName.valueOf("t2");
HTableDescriptor desc=new HTableDescriptor(tableName);
//创建列族描述
HColumnDescriptor family=new HColumnDescriptor("f1");
//指定列族
desc.addFamily(family);
//创建表
admin.createTable(desc);
System.out.println("create table success!!");
}
}