zoukankan      html  css  js  c++  java
  • HBase(基于HDFS)的介绍及安装

    一:HBase简介

    (一)HBase了解(实现大<普通PC集群、十亿行,百万列>数据随机、实时存取操作

    前提:

    基于Hdfs的查询由于其存储机制的限制,导致查询速度响应缓慢,无法解决一些对速度有要求的场景;
    传统数据库虽然查询快,但是无法支撑海量数据。因此就出现了HBase这种"数据库"。

    HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是建立在hdfs之上,被设计用来提供高可靠性,高性能、列存储、可伸缩、多版本,的Nosql的分布式数据存储系统(相对于文件系统查询等操作效率更高,实时性更高),实现对大型数据的实时,随机的读写请求。更是弥补了hive不能低延迟、以及行级别的增删改的缺点。

       HBASE依赖于hdfs做底层的数据存储
       HBASE依赖于MapReduce做数据计算
       HBASE依赖于zookeeper做服务协调

    HBase基于Hdfs作为默认推荐的存储引擎,采用基于kv结构的存储方式,内部基于LSM算法进行数据排序,可以支持基于rowkey的快速检索,但是不适合复杂的数据分析,比如join,group等。

    另外:相对于其他关系型数据库《优点:主要用于处理复杂的表与表之间关系,进行各自关联查询》,而HBase不提供表与表之间的关联查询(对于关系的处理很弱---也用不到分表),只进行简单的查询数据,几乎没有事务特性

    二:HBase逻辑架构

    (一)传统数据库结构

    传统的数据库需要事先定义数据表的结构,并指定数据的类型,一旦创建就不能改变,修改的代价比较高。

    而HBase则是采用kv的存储方式,按照列族把不同的数据组织在一起。

    (二)HBase数据库结构

     

    要查询某一个具体字段的值,需要指定坐标:表名--->行键--->列族(ColumnFamily):列名(Qualifier)--->版本

    三:HBase数据组织形式(大到小)

    namespace:命名空间

    一般就是逻辑上用于表的区分,类似数据库中的database。在最终物理文件存储的时候,会根据namespace切分目录。

    table:表

    类似于数据库中的table

    column family:列族

    相同列族的列会存放在一起。

    row:行

    由基于字符串的rowkey唯一指定,rowkey全局不能重复,按照字典序顺序存储,rowkey的设计对最终的查询起到关键性作用。

    column:列

    用于存放字段的数据内容。

    version:版本

    如果数据存在多个版本,那么每个时间戳(版本)会对应一个数据。

    四:物理架构

    HBase底层基于hdfs构建,因此最终数据都存储于hdfs中。整个HBase有三种核心角色: 

    Master:负责节点的管理
    RegionServer:负责数据的读写
    Client:维护连接池,缓存元数据

    另外Zookeeper是一个不可缺少的角色,查询或者写入都依赖于zk,因为zk中存储了元数据位置的相关信息

    因此可以看到,HBase中的Master其实是一个相对弱化的Master。

    五:HBase核心组件RegionServer

    HBase中核心的组件就是这个RegionServer,它是由WAL和Region组成。

    WAL是一种顺序写入的日志,全称是write ahead log,主要用于备份数据,当机器宕机后内存中的数据丢失,可以通过预写日志进行恢复。
    Region是主要的存储结构,一个Region就代表一个数据分片,HBase默认提供了很多分片的机制,也可以在创建表时自定义分片。
    Region内部由多个Store组成,每个Store代表一个列族,查询的时候也是每个Store单独进行查询。
    Store由memstore和Hfile组成,一般一个列族对应一个Store。新的数据写入时,会先记录在WAL中,然后存储在内存中的memstore。
    当数据量到达一定的阈值时,memstore中的数据会形成HFile写入hdfs。读数据的时候,会从memstore以及Hfile中读取。

    六:HBase寻址过程

    HBase采用三级寻址方式(不会再多级了,因为每级寻址范围够大),并且客户端不会每次都从头查询数据位置,会在客户端建立缓存,提高查询效率(因为空间、时间就近,极有可能 重复查询该数据或者数据附件数据)

    七:HBase体系架构

    Client

    包含访问HBase的接口并维护cache来加快对HBase的访问

    Zookeeper

    保证任何时候,集群中只有一个master
    存贮所有Region的寻址入口。
    实时监控Region server的上线和下线信息。并实时通知Master
    存储HBase的schema和table元数据

    Master

    为Region server分配region
    负责Region server的负载均衡
    发现失效的Region server并重新分配其上的region
    管理用户对table的增删改操作

    RegionServer

    Region server维护region,处理对这些region的IO请求
    Region server负责切分在运行过程中变得过大的region 

    HLog(WAL log)---存放最新最新数据和操作(小文件)

    – HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey对象,HLogKey中记录了写入数据的归属信息,
            除了table和 region名字外,同时还包括sequence number和timestamp,timestamp是” 写入时间”,sequence number的起始值为0,
           或者是最近一次存入文件系 统中sequence number。
    – HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的 KeyValue

    Region

    – HBase自动把表水平划分成多个区域(region),每个region会保存一个表 里面某段连续的数据;每个表一开始只有一个region,随着数据不断插 入表,
           region不断增大,当增大到一个阀值的时候,region就会等分会 两个新的region(裂变);
    – 当table中的行不断增多,就会有越来越多的region。这样一张完整的表 被保存在多个Regionserver上。

    Memstore 与 storefile

    – 一个region由多个store组成,一个store对应一个CF(列族)
    – store包括位于内存中的memstore和位于磁盘的storefile写操作先写入 memstore,当memstore中的数据达到某个阈值,
           hregionserver会启动 flashcache进程写入storefile,每次写入形成单独的一个storefile
    – 当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、 major compaction),在合并过程中会进行版本合并和删除工作 (majar),
           形成更大的storefile。
    – 当一个region所有storefile的大小和超过一定阈值后,会把当前的region 分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡。
    – 客户端检索数据,先在memstore找,找不到再找storefile  (会将搜索的最多的数据存放在memstore中,而不用去读取storefile
    – HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表 示不同的HRegion可以分布在不同的HRegion server上。
    – HRegion由一个或者多个Store组成,每个store保存一个columns family。
    – 每个Strore又由一个memStore和0至多个StoreFile组成。

    如图:StoreFile 以HFile格式保存在HDFS上。

    八:应用场景

    从上面的架构可以看出HBase适合海量数据、基于列的存储,并且列比较稀疏的场景。典型的应用场景有:

    1 用户画像

    用户画像在精准营销、个性化推荐等场景都有很重要的意义。因此每个用户是一个rowkey,不同的用户所拥有的画像标签不一样,可以用不同的column来表示。在精准营销的场景,则可以根据营销的粒度(如店铺),在用户Id前面拼接店铺id,查询的时候可以通过指定开始和结束的范围,实现快速查询。

    2 用户行为

    如果要分析单个用户的行为,则可以通过设计某个字段最大版本数,存储用户的各种行为数据。当需要分析时,可以搭配Impala或者presto(需要自定义数据源),基于rowkey快速抓取用户行为链路,进行分析。

    九:安装HBase

    (一)确保zk集群安装完毕

    (二)要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下

    (三)修改hbase-env.sh环境配置文件

        export JAVA_HOME=/home/hadoop/App/jdk1.8.0_241
        //告诉hbase使用外部的zk
        export HBASE_MANAGES_ZK=false

    (四)修改hbase-site.xml配置文件

        <configuration>
            <!-- 指定hbase在HDFS上存储的路径 -->
            <property>
                    <name>hbase.rootdir</name>
                    <value>hdfs://ns1/hbase</value>    //无法解析,所以需要我们拷贝Hadoop下的两个配置文件
            </property>
            <!-- 指定hbase是分布式的 -->
            <property>
                    <name>hbase.cluster.distributed</name>
                     <value>true</value>
            </property>
            <!-- 指定zk的地址,多个用“,”分割 -->
            <property>
                    <name>hbase.zookeeper.quorum</name>
                    <value>hadoopH5:2181,hadoopH6:2181,hadoopH7:2181</value>
            </property>
        </configuration>

    (五)配置regionservers节点信息,修改regionservers文件

    hadoopH5
    hadoopH6
    hadoopH7

    (六)拷贝文件到其他节点(可以删除文档目录再传)

    hadoopH3本地上传到hadoopH4、H5、H6、H7。使用scp命令进行

    (七)HBase启动测试

    会自动在启动节点中设置Master

    注意在hadoopH4中也启动一个master用于设置高可用

    ./hbase-daemon.sh start master

    web页面访问:

    通过kill一个master可以测试另一个的使用,实现HA:

  • 相关阅读:
    JS原始类型Number数字类型
    JS数据类型基础知识
    JS基础循环语句和跳转语句
    JS对象类型数组方法篇
    JS对象类型数组基础篇
    JS基础逻辑运算符
    IE6,IE7,FF等浏览器不兼容原因及解决办法(转)
    DML、DDL、DCL区别
    Asp.net(c#)GridView分页时用图片显示上一页,下一页
    P3P完成跨域COOKIE
  • 原文地址:https://www.cnblogs.com/ssyfj/p/12398176.html
Copyright © 2011-2022 走看看