Hadoop之HBase

文章目录

  • 一、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逻辑结构

行切片 列转列族

Hadoop之HBase_第1张图片

1.2HBase物理结构

Hadoop之HBase_第2张图片

1.3HBase基础架构

Hadoop之HBase_第3张图片

三、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

Hadoop之HBase_第4张图片
Hadoop之HBase_第5张图片

四、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!!");
    }
}

你可能感兴趣的:(hadoop,hbase)