zoukankan      html  css  js  c++  java
  • HBase 简介

     
    HBase
    -
    Hadoop Database
    ,是一个高可靠性、高性能、面向列、可伸缩、
    实时读写的
    分布式数据库
    利用
    Hadoop HDFS
    作为其文件存储系统
    利用
    Hadoop MapReduce
    来处理
    HBase
    中的海量数据
    利用
    Zookeeper
    作为其分布式协同服务
    主要用来存储非结构化和
    半结构化的松散数据(列存
    NoSQL
    数据库)
    列式数据库
    列式数据库是以列相关存储架构进
    行数据存储的数据库,主要适合与批量数据处理和
    即席查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适
    合与小批量的数据处理,常用于联机事务型数据处理。
    列式数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例
    如以下的一个表:
    EmpId
    Lastname
    Firstname
    Salary
    1
    Smith
    Joe
    40000
    2
    Jones
    Mary
    50000
    3
    Johnson
    Cathy
    44000
    这个简单的表包括员工代码
    (EmpId),
    姓名字段
    (L
    astname and Firstname)
    及工资
    (Salary).
    这个表存储在电脑的内存
    (RAM)
    和存储
    (
    硬盘
    )
    中。虽然内存和硬盘在机制上不同,电
    脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字
    节”中,操作系统把它们写到内存或硬盘中。
    行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。
    1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;
    列式数据库把一列中的数据值串在一起存储起来
    ,然后再存储下一列的数据,以此类推。
    1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;
     
    HBase
    数据模型
    HBase
    中,数据是存储在有行有列的表格中。这是与关系型数据库重复的术语,但不能
    做类比。相反,
    HBase
    可以被认为是一个多维度的映射。
    HBase
    数据模型术语
    Table
    (表格)
    一个
    HBase
    表格由多行组成。
    Row
    (行)
    HBase
    中的行里面包含一个
    key
    和一个或者多个包含值的列。行按照行的
    key
    字母顺
    存储在表格中。
    Row key
    只能存储
    64k
    的字节数据
    。因为这个原因,行的
    key
    的设计就显
    得非常重要。数据的存储目标是相近的数据存储到一起。一个常用的行的
    key
    的格式是网
    站域名。如果你的行的
    key
    是域名,你应该将域名进行反转
    (org.apache.www,
    org.apache.mail, org.apache.jira)
    再存储。这样的话,所有
    Apache
    域名将会存储在一起,好
    过基于子域名的首字母分散在各处。
    Column
    (列)
    HBase
    中的列包含用:分隔开的列族和列的限定符。
    Column Family
    (列族)
    为性能的原因,列族物理上包含一组列和它们的值。每一个列族拥有一系列的存储
    属性,例如值是否缓存在内存中,数据是否要压缩或者他的行
    key
    是否要加密等等。表格
    中的每一行拥有相同的列族,尽管一个给定的行可能没有存储任何数据在一个给定的列族
    中。
    Column Qualifier
    (列的限定符)
    列的限定符是列族中数据的索引。例如给定了一个列族
    content
    ,那么限定符可能是
    content:html
    ,也可以是
    content:pdf
    。列族在创建表格时是确定的了,但是列的限定符是动
    态地并且行与行之间的差别也可能是非常大的。
    HBase
    表中的每个列都归属于某个列族,列族必须作为表模式
    (schema)
    定义的一部分预
    先给出。如
    create
    '
    test
    '
    ,
    '
    course
    '
    列名以列族作为前缀,每个“列族”都可以有多个列成员
    (column)
    ;如
    course:math,
    course:english
    新的列族成员(列)可以随后按需、动态加入;
    权限控制、存储以及调优都是在列族层面进行的;
     
    HBase
    把同一列族里面的数据存储在同一目录下,由几个文件保存。
    Cell
    (单元)
    由行和列的坐标交叉决定;
    单元格是有版本的;
    单元格的内容
    是未解析的字节数组;
    单元
    是由行、列族、列限定符、值和代表值版本的时间戳组成的
    {row key
    column( =<family> +<qualifier>)
    version}
    )唯一确定
    单元
    cell
    中的数据是没有类型
    的,全部是字节码形式存储。
    Timestamp
    (时间戳)
    时间戳是写在值旁边的一个用于区分值的版本的数据。默认情况下,时间戳表示的是
    当数据写入时
    RegionSever
    的时间点,但你也可以在写入数据时指定一个不同的时间戳。
    HBase
    每个
    cell
    存储单元对同一份数据有多个版本,根
    据唯一的时间戳来区分每个
    版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
    时间戳的类型是
    64
    位整型。时间戳可以由
    HBase(
    在数据写入时自动
    )
    赋值,此时时间
    戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值,如果应用程序要避免数
    据版本冲突,就必须自己生成具有唯一性的时间戳。
    概念视图
    例子
    :
    一个名为
    webable
    的表格,表格中有两行(
    com.cnn.www
    com.example.www
    )和
    三个列族(
    contents, anchor
    people
    )。在这个例子当中,第一
    (com.cnn.www)
    anchor
    包含两列(
    anchor:cssnsi.com, anchor:my.look.ca
    )和
    content
    包含一列
    contents:html
    )。这个例子中
    com.cnn.www
    拥有
    5
    个版本而
    com.example.www
    有一个版
    本。
    contents:html
    列中包含给定网页的整个
    HTML
    anchor
    限定符包含能够表示行的站点
    以及链接中文本。
    People
    列族表示跟站点有关的人。
    Table 4. Table webtable
    Row Key
    Time Stamp
    ColumnFamily
    contents
    ColumnFamily
    anchor
    ColumnFamily
    people
    列名
    按照所定义好的,一个列名的格式为列族名前缀加限定符。例如,
    contents:html
    由列族
    contents
    html
    限定符。冒号(
    :
    )用于将
    列族和列限定符分开。
    "com.cnn.www"
    t9
    anchor:cnnsi.com
    = "CNN"
    "com.cnn.www"
    t8
    anchor:my.look.ca
    = "CNN.com"
    "com.cnn.w
    ww"
    t6
    contents:html =
    "<html>...
    "
    "com.cnn.www"
    t5
    contents:html =
     
    "<html>...
    "
    "com.cnn.www"
    t3
    contents:html =
    "<html>...
    "
    com.example.www
    t5
    contents:html =
    "<html>...
    "
    people:author:
    =
    "John Doe"
    HBase
    中,表格中的单元如果是空将不占用空间或者事实上不存在。这就使得
    HBase
    看起来“
    稀疏”。表格视图不是唯一方式来查看
    HBase
    中数据,甚至不是最精确
    的。下面的方式以多维度映射的方式来表达相同的信息。
    {
    "com.cnn.www": {
    contents: {
    t6: contents:html: "<html>..."
    t5: contents:html: "<html>..."
    t3: contents:html: "<html>..."
    }
    anchor: {
    t9: anchor:cnnsi.com = "CNN"
    t8: anchor:my.look.
    ca = "CNN.com"
    }
    people: {}
    }
    "com.example.www": {
    contents: {
    t5: contents:html: "<html>..."
    }
    anchor: {}
    people: {
    t5: people:author: "John Doe"
    }
    }
    }
    物理视图
    尽管一个概念层次的表格可能看起来是由一些列稀疏的行组成,但他们是通过列族来
    存储的。一个新建的限定符
    (colu
    mn_family:column_qualifier)
    可以随时地添加到已存在的列
    族中。
    Table 5. ColumnFamily anchor
    Row Key
    Time Stamp
    ColumnFamily anchor
    "com.cnn.www"
    t9
    anchor:cnnsi.com = "CNN"
    "com.cnn.www"
    t8
    anchor:my.look.ca = "CNN.com"
    Table 6. ColumnFamily contents
     
    Row Key
    Time Sta
    mp
    ColumnFamily
    contents
    "com.cnn.www"
    t6
    contents:html = "<html>...
    "
    "com.cnn.www"
    t5
    contents:html = "<html>...
    "
    "com.cnn.www"
    t3
    contents:html = "<html>...
    "
    概念视图中的空单元实际上是没有进行存储的。因此对于返回时间戳为
    t8
    contents:html
    的值的请求,结果为空。同样的,一个返回时间戳为
    t9
    anchor:my.look.ca
    的值的请
    求,结果也为空。然而,如果没有指定时间戳的话,那么会返回特定列的最新
    值。对有多个版本的列,优先返回最新的值,因为时间戳是按照递减顺序存储的。因此对
    于一个返回
    com.cnn.www
    里面所有的列的值并且没有指定时间戳的请求,返回的结果会是
    时间戳为
    t6
    contents:html
    的值、时间戳
    t9
    anchor:cnnsi.com f
    的值和时间戳
    t8
    anchor:my.look.ca
  • 相关阅读:
    Extending Markov to Hidden Markov
    Logistic Regression – Geometric Intuition
    【计算机视觉】会议投稿相关推荐
    NP难问题求解综述
    PCA的数学原理
    Brief History of Machine Learning
    图像局部特征点检测算法综述【修正排版】
    thinkphp输出表格
    1503162139-ny-分数拆分
    C++中经常使用到宏
  • 原文地址:https://www.cnblogs.com/7758521gorden/p/8862184.html
Copyright © 2011-2022 走看看