zoukankan      html  css  js  c++  java
  • HBase

    hbase

    第一部分 初始 HBase

    第1节 HBase简介

    1.1 HBase是什么

    HBase基于Google的BigTable论文而来,是一个分布式海量列式非关系型数据库系统,可以提供超大规模数据集的实时随机读写

    接下来通过一个场景,初步认识HBase列式存储

    如下是Mysql存储机制,空值字段会浪费存储空间

    idnameagesalaryjob
    1 小明 23   学生
    2 小红   10w 律师
             

    如果是列式存储可以这样

    rowkey :1 name:小明

    rowkey :1 age:23

    rowkey :1 job:学生

    rowkey :2 name:小红

    rowkey :2 salary:10w

    rowkey :2 job:律师

    列式存储的优点
    1. 减少存储空间占用

    2. 支持好多列

    1.2 HBase的特点

    • 海量存储:底层基于hdfs存储海量数据

    • 列式存储: HBase表的数据是基于列族进行存储的,一个列族包含若干列

    • 极易扩展:底层依赖HDFS,当磁盘不足时,增加dataNode节点就可以

    • 高并发:支持高并发读写请求

    • 稀疏:列的灵活性,在列族中,可以指定任意多的列,空不占空间

    • 数据的多版本:HBase表中数据有多个版本,默认通过版本号区分,值为插入时的时间戳

    • 数据类型单元:以字节数组存储

     

    第2节 HBase数据模型

    以表(有列有行)形式存储

    2.1 逻辑架构

    • 列族,建表时指定,存储时写入文件以列族为整体存储

    • 每个列族下包含多个列

    • rowkey 主键唯一标识 按字典顺序排序

    • region 横向切分表的一部分,大了可以再切

    • store 保存一个列族,有几个列族就有几个store

     

    2.2 物理存储

    storeFile 以列族为整体存储,store中有写其他属性

    timestamp 版本号 写入的时间戳

    type put写 delete 删除

     

    关键字
    概念描述
    命名空间 类似于关系型数据库的database概念,每个命名空间下有多个表。HBase两个⾃带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是⽤户默认使⽤的命名空间。⼀个表可以⾃由选择是否有命名空间,如果创建表的时候加上了命名空间后,这个表名字以:作为区分!
    Table 类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族即可,数据属性,⽐如超时时间(TTL),压缩算法(COMPRESSION)等,都在列族的定义中定义,不需要声明具体的列。
    Row(⼀⾏逻辑数据) HBase表中的每⾏数据都由⼀个RowKey和多个Column(列)组成。⼀个⾏包含了多个列,这些列通过列族来分类,⾏中的数据所属列族只能从该表所定义的列族中选取,不能定义这个表中不存在的列族,否则报错NoSuchColumnFamilyException。
    RowKey(每⾏数据主键) Rowkey由⽤户指定的⼀串不重复的字符串定义,是⼀⾏的唯⼀标识!数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进⾏检索,所以RowKey的设计⼗分重要。如果使⽤了之前已经定义的RowKey,那么会将之前的数据更新掉!
    ColumnFamily(列族) 列族是多个列的集合。⼀个列族可以动态地灵活定义多个列。表的相关属性⼤部分都定义在列族上,同⼀个表⾥的不同列族可以有完全不同的属性配置,但是同⼀个列族内的所有列都会有相同的属性。列族存在的意义是HBase会把相同列族的列尽量放在同⼀台机器上,所以说,如果想让某⼏个列被放到⼀起,你就给他们定义相同的列族。
    ColumnQualifier(列) Hbase中的列是可以随意定义的,⼀个⾏中的列不限名字、不限数量,只限定列族。因此列必须依赖于列族存在!列的名称前必须带着其所属的列族!例如info:name,info:age
    TimeStamp(时间戳--》版本) ⽤于标识数据的不同版本(version)。时间戳默认由系统指定,也可以由⽤户显式指定。在读取单元格的数据时,版本号可以省略,如果不指定,Hbase默认会获取最后⼀个版本的数据返回!
    Cell ⼀个列中可以存储多个版本的数据。⽽每个版本就称为⼀个单元格(Cell)。
    Region(表的分区) Region由⼀个表的若⼲⾏组成!在Region中⾏的排序按照⾏键(rowkey)字典排序。Region不能跨RegionSever,且当数据量⼤的时候,HBase会拆分Region。

    第3节 HBase整体架构

    zookeeper
    • 实现HMaster高可用

    • 保存HBase的元数据信息,是所有HBase表的寻址入口(存储的地址信息,元数据表在哪个regionServer上)

    • 监控HMaster和HRegionServer

    HMaster
    • 为HRegionServer分配Region

    • 维护整个集群的负载均衡

    • 管理和维护元数据信息

    • 发现失效的Region,将region移动到正常的HRegionServer上

    HRegionServer
    • 管理Region

    • 接受客户端读写请求

    • 切换运行中变大的Region

    Region
    • 每个HRegion由多个store组成

    store
    • 每个store保存一个列族(columns family),有几个列族就有几个store

    • 由一个metaStore和多个storeFile组成,metaStore是store在内存中的内容,写到文件后就是storeFile,StoreFile底层是以HFile的格式保存

     

     

    第4节 HBase集群安装部署

    1. 下载安装包

    2. 规划安装目录

      /opt/lagou/servers/

       

    3. 上传安装包

      rz

       

    4. 解压到安装目录

      tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/lagou/servers

       

    5. 修改配置文件

      • 把hadoop的hdfs-site.xml core-site.xml拷贝到hbase的conf目录

      ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/core-site.xml /opt/lagou/servers/hbase-1.3.1/conf/core-site.xml
      ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml /opt/lagou/servers/hbase-1.3.1/conf/hdfs-site.xml
      • 修改hbase conf下的配置文件

        • hbase-env.sh

          #添加java环境变量
          export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231/
          #指定使⽤外部的zk集群
          export HBASE_MANAGES_ZK=false
        • hbase-site.xml

        <configuration> 
        <!-- 指定hbase在HDFS上存储的路径 -->
        <property>
        <name>hbase.rootdir</name>
        <value>hdfs://lxl20:9000/hbase</value>
        </property>
        <!-- 指定hbase是分布式的 -->
        <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
        </property>
        <!-- 指定zk的地址,多个⽤“,”分割 -->
        <property>
        <name>hbase.zookeeper.quorum</name> <value>lxl20:2181,lxl21:2181,lxl22:2181</value>
        </property>
        </configuration>

         

    6.  

     

  • 相关阅读:
    SQL JOB
    Log4net配置
    教你怎么使用Windows7系统自带的备份与还原的方法
    在LINQ TO SQL 中使用MVC3中的DataAnnotations 【MetadataType】
    图片下载
    DOS的一些常用命令
    自动合并多个文件如js css等 可以增加效率
    利用$.getJSON() 跨域请求操作
    在razor中使用递归,巧用递归
    Use ASP.NET and DotNetZip to Create and Extract ZIP Files
  • 原文地址:https://www.cnblogs.com/jiaozi-li/p/14213811.html
Copyright © 2011-2022 走看看