栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hbase

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

    
    
        hbase.rootdir
        hdfs://L00:8020/hbase
    

    
    
        hbase.cluster.distributed
        true
    

    
    
        hbase.zookeeper.quorum
        L00:2181,L01:2181,L02:2181
    

    
    
        hbase.zookeeper.property.dataDir
        /opt/zookeeper-3.4.14/data
    

  • regionservers
#设置所有安装需要启动Regionserver的机器
L00
L01
L02

4.分发安装包

scp /opt/hbase-1.3.5/ L01://opt/hbase-1.3.5/
scp /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

引入相关依赖


    org.apache.hbase
    hbase-client
    1.3.5

创建实现类

   
    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);
    }
    
    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;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336294.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号