Hbase

1.Hbase概述

  • Hbase是hadoop生态中的一个列式存储的非关系型数据库
  • 常用的mysql数据库采用的是行式存储,但是由于行式存储造成大量的稀疏,不适用于大数据的 存储,因此出现了Hbase这样的列式存储引擎
  • 列式存储是指,将数据用行键和列限定符来标识数据,将关系型表中的稀疏结构中有值的内容按行保存,节省空间并提高查询效率
    在这里插入图片描述

2.Hbase中的两个角色

  • HMaster
  1. 监控HRegionServer
    • 当在集群中启动Hbase服务的时候,在第一台启动的这台机器上默认成为HMaster,其他的均处于热备状态,服务启动时所有的机器上都会启动一个HRegionServer,而此时的HMaster就来管理这些HRegionServer
  2. 处理HRegionServer 故障转移
    • 当众多的HRegionServer中有有机器发生问题时,HMaster负责将该机器人上的数据迁移到其他机器上
  3. 处理元数据的变更
    • 在Hbase中创建表的时候,会默认的在一张名为MATA的表中记录所有的创建信息(region的数量以及存储的位置等)
  4. 处理region 的分配或移除
    • 当一张表中的数据量过大时,Hmaster会将该表分解成众多的region以此来提高表的查询效率,然后将这些region交给HRegionServer来进行管理
  5. 在空闲时间进行数据的负载均衡
    • 平衡各个HRegionServer之间的region数量
  6. 通过 Zookeeper 发布自己的位置给客户端
    • 将自己的管理信息注册在zookeeper中,已提供给客户端方便进行查询
  • HRegionServer
  1. 负责管理 HBase 的实际表数据
    • region其实是一个表的描述信息,真实的数据都存储在底层的HDFS上面,被分为一个个的Block且有备份
  2. 处理分配给它的 Region
  3. 刷新缓存到 HDFS
    • 当表中的数据要进行增删改操作时,会先记录这些信息到缓存当中,然后再将所有的操作在HDFS上从新写一个新的修改好的文件保存在HDFS上面而不是直接在原文件上进行修改
  4. 维护Hlog Write-Ahead Log WAL 预写入日志
    • 为了防止在数据的写入操作时,机器发生意外,所有会优先将写入操作预写入一个文件当中保存在磁盘里,即使发生宕机,待机器从新启动时也会读取该日志中的内容,从而进行数据的修改,保证数据不丢失
  5. 执行压缩
  6. 负责处理 Region 分片
  • 集群关系概览

在这里插入图片描述

3.集群搭建

1.安装前提

正常安装并启动HDFS和Zookeeper

2.下载并解压Hbase-1.3.5

3.修改配置文件

  • hbase-evn.sh
# 添加JAVA运行环境
export JAVA_HOME=/opt/jdk1.8
# 关闭HBase自带的zk服务,使用已经搭建好的ZK服务
export HBASE_MANAGES_ZK=false
# 将JDK8以上版本不需要的配置注释掉
# export HBASE_MASTER_OPTS ………
# export HBASE_REGIONSERVER_OPTS…………
  • hbase-site.xml
<configuration>
    <property>
    <!-- hbase保存数据的hdfs根目录 -->
        <name>hbase.rootdir</name>
        <value>hdfs://L00:8020/hbase</value>
    </property>

    <property>
    <!-- 开启habse的集群模式 -->
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <property>
    <!-- 设置Hbase连接的zk集群 -->
        <name>hbase.zookeeper.quorum</name>
        <value>L00:2181,L01:2181,L02:2181</value>
    </property>

    <property>
    <!-- 设置ZK保存数据的路径 -->
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/opt/zookeeper-3.4.14/data</value>
    </property>
</configuration>
  • regionservers
#设置所有安装需要启动Regionserver的机器
L00
L01
L02

4.分发安装包

scp -r /opt/hbase-1.3.5/ L01://opt/hbase-1.3.5/
scp -r /opt/hbase-1.3.5/ L02://opt/hbase-1.3.5/

5.配置环境变量

echo 'export HBASE_HOME=/opt/hbase-1.3.5' >> /etc/profile
echo 'export PATH=$HBASE_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

6.启动服务

start-hbase.sh
# Hbase会默认在执行启动命令的机器上启动HMaster服务
# 其他机器也可以启动HMaster服务,作为高可用的主备节点
如果启动执行命令提示master未初始化
可以尝试删除hadoop的data目录 格式化namenode
删除zk的data目录 重启启动zk

4.Hbase的客户端操作

# 开启HBase的命令行客户端
hbase shell
# 查看所有命令的帮助
help
# 查看具体单个命令的帮助
help 命令
直接敲命令
# 查看 命名空间(namespace,类似RDB中database)
list_namespace
# 查看 表
list
# 创建表
create '表名','列族'
# 插入数据
put '表名','行键','列族:列','值'
# 查询单行数据
get '表名','行键','列族:列'
# 扫描多行数据
scan '表名'
scan 't1',{STARTROW=>'12',STOPROW=>'13'}

5.javaAPI操作Hbase

引入相关依赖

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.3.5</version>
</dependency>

创建实现类

   /**
     *
     * @param zookeeperStr zookeeper的集群地址
     * @return 返回一个Hbase的Admin
     */
    public static HBaseAdmin getHBaseAdmin(String zookeeperStr){
        HBaseAdmin Admin = null;
        Connection connection = getConnection(zookeeperStr);
        try {
            Admin = (HBaseAdmin)connection.getAdmin();
        } catch (IOException e) {
            logger.error("获取HBaseAdmin失败",e);
        }
        return Admin;
    }
    public static Connection getConnection(){
        return getConnection(zookeeperStr);
    }
    /**
     *
     * @param zookeeperStr  zookeeper的集群地址
     * @return Hbase客户端连接
     */
    public static Connection getConnection(String zookeeperStr){
        Connection connection = null;
        // 1. 创建配置文件对象
        Configuration conf = new Configuration();
        // 1.1 添加集群的连接配置
        conf.set("hbase.zookeeper.quorum", zookeeperStr);
        // 2. 使用工厂类创建连接
        try {
            connection = ConnectionFactory.createConnection(conf);
        } catch (IOException e) {
            logger.error("连接Hbase失败",e);
        }
        return connection;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值