• Hbase学习Hbase基础介绍


    一、产生背景

    自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案。大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像Hadoop的解决方案。Hadoop使用分布式文件系统,用于存储大数据,并使用MapReduce来处理。Hadoop擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化数据的处理。

    Hadoop的限制

    Hadoop只能执行批量处理,并且只以顺序方式访问数据。这意味着必须搜索整个数据集,即使是最简单的搜索工作。当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。

    Hadoop随机存取数据库

    应用程序,如HBase,Cassandra,CouchDB,Dynamo和 MongoDB 都是一些存储大量数据和 以随机方式访问数据的数据库。

    总结:

    1、海量数据量存储成为瓶颈,单台机器无法负载大量数据。

    2、单台机器IO读写请求成为海量数据存储时候高并发大规模请求的瓶颈

    3、随着数据规模越来越大,大量业务场景开始考虑数据存储横向水平扩展,使得存储服务可以增加/删除,而目前的关系型数据库更专注于一台机器

    二、Hbase简介

    Hbase是BigTable(源码使用Java编写)版本。是Apache Hadoop的数据库,是建立在HDFS之上,被设计用来提供高可靠性、高性能、、列存储、可伸缩、多版本的NoSQL的分布式数据存储系统,实现对大型数据的实时,随机的读写访问。

    Hbase依赖于HDFS做底层的数据存储,BigTable依赖于Google GFS做数据存储

    Hbase依赖于Mapreduce做数据计算,BigTable依赖于Google MapReduce做数据计算

    HBase依赖于Zookeeper做服务协调,BigTable依赖Google Chubby做服务协调

    三、关系型数据库和非关系型数据库的典型代表

    NoSQL:Hbase、redis、Mongdb

    RDBMS:mysql,oracle、sqlserver,db2

    四、Hbase这个NOsql数据库的要点

    1、它介于NoSQL和RDBMS之间,仅能通过主键(rowkey)和主键的range([startkey,endkey))来检索数据

    2、Hbase查询数据功能很简单,不支持join等复杂操作

    3、不支持复杂的事务,只支持行级事务(可以通过hive支持来实现多表join等复杂操作)

    4、Hbase中支持的数据类型:Byte[]  (底层所有数据的存储都是字节数组)

    5、主要用来存储结构化数据和半结构化的松散数据。

    6、列可以动态增加,并且列为空就不存储数据,节省存储空间

    五、Hbase中的表特点

    1、大:一个表可以有上十亿行,上白袜列

    2、面向列:面向列(族)的存储和权限控制,列(簇)独立检索。

    3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

    4、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列

    六、Hbase表结构逻辑视图

    初次接触HBase,可能看到以下描述会懵:“基于列存储”,“稀疏MAP”,“RowKey”,“ColumnFamily”。

    其实没那么高深,我们需要分两步来理解HBase, 就能够理解为什么HBase能够“快速地”“分布式地”处理“大量数据”了。

      1.内存结构

      2.文件存储结构

    七、名词概念

    假如我们有如下一张表

    1、Rowkey概念

    Rowkey的概念和mysql中的主键是完全一样,Hbase使用Rowkey来唯一的区分某一行的数据。

    由于Hbase只支持3中查询方式:

    a、基于Rowkey的单行查询

    b、基于Rowkey的范围扫描

    c、全表扫描

    因此,Rowkey对Hbase的性能影响非常大,Rowkey的设计就显得尤为的重要。设计的时候要兼顾基于Rowkey的单行查询也要键入Rowkey的范围扫描。rowkey 行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),最好是 16。在 HBase 内部,rowkey 保存为字节数组。HBase 会对表中的数据按照 rowkey 排序 (字典顺序)

  • 相关阅读:
    JAVA多态
    JAVA中的继承
    Nginx配置中root和alisa指定文件路径的区别
    NGINX配置详解
    Jenkins填坑之邮件模板分享
    jenkins填坑之HTML报告样式问题
    Jenkins填坑之仅获取本次构建的HTML报告作为附件发送邮件
    Jenkins填坑之发送邮件无法获取HTML报告作为附件
    jenkins填坑之邮件模板中的变量无法正常获取值
    Jenkins填坑之构建ant项目时,执行结果提示input file xxx.jtl does not exist
  • 原文地址:https://www.cnblogs.com/yfb918/p/10636597.html
Copyright © 2020-2023  润新知