精华内容
下载资源
问答
  • Hbase属性说明及与关系数据库区别

    千次阅读 2015-09-22 21:53:55
    1. HBase有哪些基本特征? 2. HBase相对于关系数据库能解决的问题是什么? 3. HBase的数据模型是什么?如何表述?有哪些操作形式? 4. HBase的模式Schema设计的一些概念和原则 5. HBase的拓扑结构是...

    1. HBase有哪些基本的特征?

    2. HBase相对于关系数据库能解决的问题是什么?

    3. HBase的数据模型是什么?如何表述?有哪些操作形式?

    4. HBase的模式Schema设计的一些概念和原则

    5. HBase的拓扑结构是什么样的?

    6. HBase与Cassender的比较?


    1. HBase有哪些基本的特征?

    HBase是类似于google的bigtable的开源实现,拥有以下特征:

    1). 在HDFS之上

    2). 基于列存储的分布式数据库

    3). 用于实时地读、写大规模数据集

    其他HBase的特性: 

    1).没有真正的索引,行顺序存储,也没有所谓的索引膨胀问题。

    2) 自动分区,表增长时,自动分区到新的节点上。

    3) 线性扩展和区域会自动重新平衡,运行RegionServer,达到负载均衡的目的。

    4).容错和普通商用的硬件支持。这点同hadoop类似。


    2. HBase相对于关系数据库能解决的问题是什么?

    HBase与关系数据的区别?

    其实就是关系数据库与HBase各自的优缺点。

    关系数据库的缺憾:

    1). 扩展困难

    2). 维护复杂

    HBase就是解决可伸缩行的问题。通过简单增加节点来获取线性扩展性。不支持SQL。

    HBase与RDBMS的区别?

    1). 表的设计:HBase的表可以很高,很宽,可伸缩性很强。而且表的模式是物理存储的直接反映。

    2). 拓扑: HBase能水平分区并在上千个节点上自动复制。

    3). 应用形式: 开发者必须承担更多的责任来正确地利用HBase的检索和存储方式。

    4). RDBMS 遵循固定的模式,如“codd 12 规则”,强调事务的“强一致性”、参照完整性、SQL支持、数据的逻辑与物理形式相对独立。等等。适用于中小规模的数据,但对于数据的规模和并发读写方面进行大规模扩展时,RDBMS会性能大大降低,分布式更为困难,因为其需要放弃很多RDBMS的易用的特性。


    HBase适用于上亿、上千亿级的数据,如果是只有上千、上百万级别是数据,传统的RDBMS是更好的选择。

    HBase需要更多硬件,如果硬件较少,如5个,干不成什么好事。

    如果从RDBMS移植到HBase,需要消除RDBMS的很多额外特性,如列数据类型、第二索引、事务、高级查询等。


    3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等

    1). 数据模式

    如下列三个表:

    第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。

    而后两个表才是真正的表,物理视图,他们是实际的存储形式,而且它们是按列族进行存储的。

    Row Key Time Stamp ColumnFamily contents ColumnFamily anchor
    "com.cnn.www" t9   anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8   anchor:my.look.ca = "CNN.com"
    "com.cnn.www" t6 contents:html = "<html>..."  
    "com.cnn.www" t5 contents:html = "<html>..."  
    "com.cnn.www" t3 contents:html = "<html>..."  


    Row Key Time Stamp Column Family anchor
    "com.cnn.www" t9 anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8 anchor:my.look.ca = "CNN.com"


    Row Key Time Stamp ColumnFamily "contents:"
    "com.cnn.www" t6 contents:html = "<html>..."
    "com.cnn.www" t5 contents:html = "<html>..."
    "com.cnn.www" t3 contents:html = "<html>..."


    2). HBase的基本元素:

    表、行、列、单元格: 表的基本要素

    键:一般是指行的键,即唯一标识某行的元素。表中的行,可以根据键进行排序,而对表的访问,也通过键。

    列族:所有列族成员拥有相同的前缀,某列族的成员,需要预先定义,但也可以直接进行追加。

    列族成员会一起放进存储器。而HBase面向列的存储,是面向列族的数据存储(这个通过上面那个表的示例可以看出来),数据存储与调优都在这个层次,HBase表与RDBMS中表类似,行是排序的,客户端可以把列添加到列族中去。

    单元格cell: 单元格中存放的是不可分割的字节数组。并且每个单元格拥有版本信息。HBase的是按版本信息倒序排列。

    区域region:将表水平划分,是HBase集群分布数据的最小单位。在线的所有区域就构成了表的内容。

    加锁:对数据行进行更新,都需加锁。保持原子性。


    3) 数据模型有哪些操作?

    Get、Scan、Put、Delete,即返回特定行的属性,多行属性、插入、删除数据。

    这些都需要一个HTable实例来操作。分别有Get、Scan、Put、Delete类来指定相应的参数、属性。

    以scan为示例:


    [java] view plaincopy
    1. HTable htable = ...      // instantiate HTable  
    2.       
    3. Scan scan = new Scan();  
    4. scan.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("attr"));  
    5. scan.setStartRow( Bytes.toBytes("row"));                   // start key is inclusive  
    6. scan.setStopRow( Bytes.toBytes("row" +  (char)0));  // stop key is exclusive  
    7. ResultScanner rs = htable.getScanner(scan);  
    8. try {  
    9.   for (Result r = rs.next(); r != null; r = rs.next()) {  
    10.   // process result...  
    11. finally {  
    12.   rs.close();  // always close the ResultScanner!  
    13. }  


    4) 返回结果的排序方式是什么?

    先是行、再是列族、再是列修饰符,最后是时间戳(反向排序,最新的在前面)。


    5)最后,HBase不支持联合查询


    6)mapreduce与HBase表配合使用,默认mapreduce的任务分割是根据HBase表中region的多少来分割,一个region就有一个map。


    4. HBase的模式Schema设计的一些概念和原则

    1)模式的创建与更新

    可以使用HBase Shell或HBase Admin来创建和编辑HBase的模式。

    在0.90.x 版本,只能先禁用表,再修改列族,而0.92.x版本以后,支持在线修改。


    而且表和列族修改后,如size, region, block size等,在下次 主紧缩 或 存储文件时 起作用。


    2)列族的数量

    -列族数量越少越好,即使同时有两个列族,查询的时候总是访问其中一个列族,不会同时访问。

    -当一个表存在多个列族,当基数差距很大时,如A族有100万行,B族10亿行,A族可能会被分散到很多区域region,导致扫描A的效率降低。

    -另外,多个列族在flush和compaction时,会造成很多I/O负担。


    3)行键设计RowKey

    a. 不要将RowKey设计成有序的形式,因为这样容易阻塞并行性,将负载压都在一台机器上

    b. 定位一个单元,需要行,列名和时间戳。如果一个单元格的坐标很大,会占用内存,索引用光。所以,解决方法:列族名尽量小,如一个字符a,短属性名,而行键长度可读即可(行键长度对数据访问无太大影响),将数字字符转换为数字字节模式(节省空间)。

    c. 倒序时间戳有助于找到找到最近版本值

    d. 行键是在列族范围内有效,不同列族中可以拥有同样的行键

    e. 行键永远不能变


    4)HBase支持所有能转换为字节数组的东西,如字符串、数字、复杂对象、计数器、甚至图像。

    5)列族可以设置存活时间TTL,超时后,HBase自动删除数据

    6)第二索引和查询: 这里面有很多东西,需要查看对应版本官方的文档更好些。


    5. HBase的拓扑结构是什么?

    1)拓扑结构: 类似于HDFS的mast与slave,mapreduce的tasktracker与jobtracker的关系,HBase也有master和RegionServer


    2)HBase与ZooKeeper的关系是什么?

    HBase必须管理一个ZooKeeper实例,它依赖ZooKeeper,主要目的是,通过ZooKeeper来协调区域内的服务器,它负责目录表、主控机地址等重要信息,若有服务器崩溃,HBase就可以通过ZooKeeper来协调分配。
    RegionServer在HBase的配置文件conf/regionservers文件中,而HBase集群的站点配置在conf/hbase-site.xml和conf/hbase-env.sh中配置。HBase尽量遵循了Hadoop的规则。


    3)HBase的内部结构管理状况:

    其内部有-ROOT, -META的特殊目录表,用于维护当前集群上所有区域的列表、位置和状态

    -ROOT表包含 -META表的区域列表,而-META表示包含用户的的区域列表。

    所以,HBase管理的流程是: 

    Client -- 链接到ZooKeeper -- 查找-ROOT表的位置 -- 查找-META表的位置 -- 查找用户的区域所在的节点、位置及其状态等 -- 直接管理指定区域的RegionServer并进行交互。


    HBase支持Java及MapReduce的开发。

    HBase提供了Thrift、REST及Avro的接口。HBase需要有一个相应的接口客户端负责与这些接口的交互。但是这些需要代理进行处理请求和响应,所以比java更慢。

    %hbase-daemon.sh start/stop rest/thrift/avro  //启动或终止对应的客户端


    4)HBase的使用示例:

    1. 创建表

    如在外壳环境下: create ‘station’, {NAME => 'info', VERSION >= 1}

    2. 加载数据

    MapReduce 与 HBase可以充分利用集群的分布式模型,将原始数据复制到hdfs中。

    每个任务只有一个HTable实例, 默认情况下,每个HTable.put(put),在执行插入操作时,不任何缓存。不过想使用缓存,是可以自己设置的。

    3. Web查询

    可以直接使用HBase的java API来实现一个Web的应用。HTable.get()可用来获取已定义的列族的所有内容。get的结果返回给Result, 包含的是数据行。

    HBase还可以使用扫描器scanner来检索观测数据。并且获取的是一个有序的结果。类似于传统数据库中的“游标”。HTable.getScanner(scan).


    6. HBase与Cassender的比较

    不同的应用,应该选用不同的NoSQL数据库,Cassandra, HBase, MongoDB, Riak都有各自的优缺点。
    而且以上各种数据库,都在发展中,随着版本变换,特点也会发生变化。
     根据 CAP理论(Consistency一致性, Availability 可获得性, Partitioning tolerance 分区容忍),二者可以简单区分一下。

    HBase是Hadoop生态系统的一部分,又其他框架如PIG, HIVE等的支持,而Cassender上运行mapreduce相对比较复杂的。总体上来说,Cassender或许在存储上比较有效,但HBase的数据处理能力更强些。
    HBase有Shell脚本和Web页面的处理能力,而Cassender没有Shell的支持,只有API,可用性上不如HBase。

    Cassender的Schema发生变化时,需要集群重启,但Cassender宣称“写操作永不失败”,而HBase是有可能的。
    场景:Cassandra 对由高速光纤连接的小型数据中心(几百个节点左右)是最佳的,而HBase适合网络“缓慢”且不可预料的Internet网。

    其他:
    HBase性能调优,别人很好的总结:
    展开全文
  • 分布式数据库试题及答案.doc

    热门讨论 2010-12-29 16:46:29
    4.1.3. 分布式事务有哪些基本性质. 25 4.1.4. 什么是2PL协议 25 4.2. 下面是某个公司的人事关系数据库的全局模式: 25 4.2.1. 将全局模式进行分片,写出分片定义和分片条件。 26 4.2.2. 指出分片的类型,并画出分片...
  • 全书一共12章:第1章从系统工程的角度总结了性能问题可以分为哪些阶段去考虑、性能问题有哪些种类,以及性能改进的工程方法等;第2章详细讲解了在数据库的设计阶段如何去考虑数据库的性能问题;第3~6章从物理数据库...
  • 数据库课程设计(基于B/S)

    热门讨论 2008-12-28 15:28:06
    通过本课程设计进一步弄懂数据库系统及其相关的基本概念,理解数据库系统的系统结构、主要特点,掌握数据库设计的原理、方法及其基本过程,初步具备数据库应用设计的能力,初步形成运用数据库应用系统解决管理决策中...
  • 著名的美国 IBM 公司的 DBZ 关系数据库管理系统和 IMS 层次数据库管理系统、美国 Oracle 公司的 orade 关系数据库管理系统、 s 油 ase 公司的 s 油 ase 关系数据库管理系统、美国微软公司的 SQL Serve ,关系...
  • 1. HBase有哪些基本特征? 2. HBase相对于关系数据库能解决的问题是什么? 3. HBase的数据模型是什么?如何表述?有哪些操作形式? 4. HBase的模式Schema设计的一些概念和原则 5. HBase的拓扑结构是什么样的?...
    1. HBase有哪些基本的特征?
    2. HBase相对于关系数据库能解决的问题是什么?
    3. HBase的数据模型是什么?如何表述?有哪些操作形式?
    4. HBase的模式Schema设计的一些概念和原则
    5. HBase的拓扑结构是什么样的?
    6. HBase与Cassender的比较?

    1. HBase有哪些基本的特征?
    HBase是类似于google的bigtable的开源实现,拥有以下特征:
    1). 在HDFS之上
    2). 基于列存储的分布式数据库
    3). 用于实时地读、写大规模数据集
    其他HBase的特性: 
    1).没有真正的索引,行顺序存储,也没有所谓的索引膨胀问题。
    2) 自动分区,表增长时,自动分区到新的节点上。
    3) 线性扩展和区域会自动重新平衡,运行RegionServer,达到负载均衡的目的。
    4).容错和普通商用的硬件支持。这点同hadoop类似。

    2. HBase相对于关系数据库能解决的问题是什么?
    HBase与关系数据的区别?
    其实就是关系数据库与HBase各自的优缺点。
    关系数据库的缺憾:
    1). 扩展困难
    2). 维护复杂
    HBase就是解决可伸缩行的问题。通过简单增加节点来获取线性扩展性。不支持SQL。
    HBase与RDBMS的区别?
    1). 表的设计:HBase的表可以很高,很宽,可伸缩性很强。而且表的模式是物理存储的直接反映。
    2). 拓扑: HBase能水平分区并在上千个节点上自动复制。
    3). 应用形式: 开发者必须承担更多的责任来正确地利用HBase的检索和存储方式。
    4). RDBMS 遵循固定的模式,如“codd 12 规则”,强调事务的“强一致性”、参照完整性、SQL支持、数据的逻辑与物理形式相对独立。等等。适用于中小规模的数据,但对于数据的规模和并发读写方面进行大规模扩展时,RDBMS会性能大大降低,分布式更为困难,因为其需要放弃很多RDBMS的易用的特性。

    HBase适用于上亿、上千亿级的数据,如果是只有上千、上百万级别是数据,传统的RDBMS是更好的选择。
    HBase需要更多硬件,如果硬件较少,如5个,干不成什么好事。
    如果从RDBMS移植到HBase,需要消除RDBMS的很多额外特性,如列数据类型、第二索引、事务、高级查询等。

    3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等
    1). 数据模式
    如下列三个表:
    第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。
    而后两个表才是真正的表,物理视图,他们是实际的存储形式,而且它们是按列族进行存储的。
    Row Key Time Stamp ColumnFamily contents ColumnFamily anchor
    "com.cnn.www" t9   anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8   anchor:my.look.ca = "CNN.com"
    "com.cnn.www" t6 contents:html = "<html>..."  
    "com.cnn.www" t5 contents:html = "<html>..."  
    "com.cnn.www" t3 contents:html = "<html>..."  

    Row Key Time Stamp Column Family anchor
    "com.cnn.www" t9 anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8 anchor:my.look.ca = "CNN.com"

    Row Key Time Stamp ColumnFamily "contents:"
    "com.cnn.www" t6 contents:html = "<html>..."
    "com.cnn.www" t5 contents:html = "<html>..."
    "com.cnn.www" t3 contents:html = "<html>..."


    2). HBase的基本元素:
    表、行、列、单元格: 表的基本要素
    键:一般是指行的键,即唯一标识某行的元素。表中的行,可以根据键进行排序,而对表的访问,也通过键。
    列族:所有列族成员拥有相同的前缀,某列族的成员,需要预先定义,但也可以直接进行追加。
    列族成员会一起放进存储器。而HBase面向列的存储,是面向列族的数据存储(这个通过上面那个表的示例可以看出来),数据存储与调优都在这个层次,HBase表与RDBMS中表类似,行是排序的,客户端可以把列添加到列族中去。
    单元格cell: 单元格中存放的是不可分割的字节数组。并且每个单元格拥有版本信息。HBase的是按版本信息倒序排列。
    区域region:将表水平划分,是HBase集群分布数据的最小单位。在线的所有区域就构成了表的内容。
    加锁:对数据行进行更新,都需加锁。保持原子性。

    3) 数据模型有哪些操作?
    Get、Scan、Put、Delete,即返回特定行的属性,多行属性、插入、删除数据。
    这些都需要一个HTable实例来操作。分别有Get、Scan、Put、Delete类来指定相应的参数、属性。
    以scan为示例:

    HTable htable = ... // instantiate HTable Scan scan = new Scan();scan.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("attr"));scan.setStartRow( Bytes.toBytes("row")); // start key is inclusivescan.setStopRow( Bytes.toBytes("row" + (char)0)); // stop key is exclusiveResultScanner rs = htable.getScanner(scan);try { for (Result r = rs.next(); r != null; r = rs.next()) { // process result...} finally { rs.close(); // always close the ResultScanner!}


    4) 返回结果的排序方式是什么?
    先是行、再是列族、再是列修饰符,最后是时间戳(反向排序,最新的在前面)。

    5)最后,HBase不支持联合查询

    6)mapreduce与HBase表配合使用,默认mapreduce的任务分割是根据HBase表中region的多少来分割,一个region就有一个map。

    4. HBase的模式Schema设计的一些概念和原则
    1)模式的创建与更新
    可以使用HBase Shell或HBase Admin来创建和编辑HBase的模式。
    在0.90.x 版本,只能先禁用表,再修改列族,而0.92.x版本以后,支持在线修改。

    而且表和列族修改后,如size, region, block size等,在下次 主紧缩 或 存储文件时 起作用。

    2)列族的数量
    -列族数量越少越好,即使同时有两个列族,查询的时候总是访问其中一个列族,不会同时访问。
    -当一个表存在多个列族,当基数差距很大时,如A族有100万行,B族10亿行,A族可能会被分散到很多区域region,导致扫描A的效率降低。
    -另外,多个列族在flush和compaction时,会造成很多I/O负担。

    3)行键设计RowKey
    a. 不要将RowKey设计成有序的形式,因为这样容易阻塞并行性,将负载压都在一台机器上
    b. 定位一个单元,需要行,列名和时间戳。如果一个单元格的坐标很大,会占用内存,索引用光。所以,解决方法:列族名尽量小,如一个字符a,短属性名,而行键长度可读即可(行键长度对数据访问无太大影响),将数字字符转换为数字字节模式(节省空间)。
    c. 倒序时间戳有助于找到找到最近版本值
    d. 行键是在列族范围内有效,不同列族中可以拥有同样的行键
    e. 行键永远不能变

    4)HBase支持所有能转换为字节数组的东西,如字符串、数字、复杂对象、计数器、甚至图像。
    5)列族可以设置存活时间TTL,超时后,HBase自动删除数据
    6)第二索引和查询: 这里面有很多东西,需要查看对应版本官方的文档更好些。

    5. HBase的拓扑结构是什么?
    1)拓扑结构: 类似于HDFS的mast与slave,mapreduce的tasktracker与jobtracker的关系,HBase也有master和RegionServer

    2)HBase与ZooKeeper的关系是什么?
    HBase必须管理一个ZooKeeper实例,它依赖ZooKeeper,主要目的是,通过ZooKeeper来协调区域内的服务器,它负责目录表、主控机地址等重要信息,若有服务器崩溃,HBase就可以通过ZooKeeper来协调分配。
    RegionServer在HBase的配置文件conf/regionservers文件中,而HBase集群的站点配置在conf/hbase-site.xml和conf/hbase-env.sh中配置。HBase尽量遵循了Hadoop的规则。

    3)HBase的内部结构管理状况:
    其内部有-ROOT, -META的特殊目录表,用于维护当前集群上所有区域的列表、位置和状态
    -ROOT表包含 -META表的区域列表,而-META表示包含用户的的区域列表。
    所以,HBase管理的流程是: 
    Client -- 链接到ZooKeeper -- 查找-ROOT表的位置 -- 查找-META表的位置 -- 查找用户的区域所在的节点、位置及其状态等 -- 直接管理指定区域的RegionServer并进行交互。

    HBase支持Java及MapReduce的开发。
    HBase提供了Thrift、REST及Avro的接口。HBase需要有一个相应的接口客户端负责与这些接口的交互。但是这些需要代理进行处理请求和响应,所以比java更慢。
    %hbase-daemon.sh start/stop rest/thrift/avro  //启动或终止对应的客户端

    4)HBase的使用示例:
    1. 创建表
    如在外壳环境下: create ‘station’, {NAME => 'info', VERSION >= 1}
    2. 加载数据
    MapReduce 与 HBase可以充分利用集群的分布式模型,将原始数据复制到hdfs中。
    每个任务只有一个HTable实例, 默认情况下,每个HTable.put(put),在执行插入操作时,不任何缓存。不过想使用缓存,是可以自己设置的。
    3. Web查询
    可以直接使用HBase的java API来实现一个Web的应用。HTable.get()可用来获取已定义的列族的所有内容。get的结果返回给Result, 包含的是数据行。
    HBase还可以使用扫描器scanner来检索观测数据。并且获取的是一个有序的结果。类似于传统数据库中的“游标”。HTable.getScanner(scan).

    6. HBase与Cassender的比较
    不同的应用,应该选用不同的NoSQL数据库,Cassandra, HBase, MongoDB, Riak都有各自的优缺点。
    而且以上各种数据库,都在发展中,随着版本变换,特点也会发生变化。
     根据 CAP理论(Consistency一致性, Availability 可获得性, Partitioning tolerance 分区容忍),二者可以简单区分一下。

    HBase是Hadoop生态系统的一部分,又其他框架如PIG, HIVE等的支持,而Cassender上运行mapreduce相对比较复杂的。总体上来说,Cassender或许在存储上比较有效,但HBase的数据处理能力更强些。
    HBase有Shell脚本和Web页面的处理能力,而Cassender没有Shell的支持,只有API,可用性上不如HBase。

    Cassender的Schema发生变化时,需要集群重启,但Cassender宣称“写操作永不失败”,而HBase是有可能的。
    场景:Cassandra 对由高速光纤连接的小型数据中心(几百个节点左右)是最佳的,而HBase适合网络“缓慢”且不可预料的Internet网。
    展开全文
  • Hadoop学习之HBase

    万次阅读 2013-08-19 18:12:50
    1. HBase有哪些基本特征? 2. HBase相对于关系数据库能解决的问题是什么? 3. HBase的数据模型是什么?如何表述? 4.  HBase是类似于google的bigtable的开源实现,拥有以下特征: 1. 在HDFS之上 2. 基于列存储...

    1. HBase有哪些基本的特征?

    2. HBase相对于关系数据库能解决的问题是什么?

    3. HBase的数据模型是什么?如何表述?有哪些操作形式?

    4. HBase的模式Schema设计的一些概念和原则

    5. HBase的拓扑结构是什么样的?

    6. HBase与Cassender的比较?


    1. HBase有哪些基本的特征?

    HBase是类似于google的bigtable的开源实现,拥有以下特征:

    1). 在HDFS之上

    2). 基于列存储的分布式数据库

    3). 用于实时地读、写大规模数据集

    其他HBase的特性: 

    1).没有真正的索引,行顺序存储,也没有所谓的索引膨胀问题。

    2) 自动分区,表增长时,自动分区到新的节点上。

    3) 线性扩展和区域会自动重新平衡,运行RegionServer,达到负载均衡的目的。

    4).容错和普通商用的硬件支持。这点同hadoop类似。


    2. HBase相对于关系数据库能解决的问题是什么?

    HBase与关系数据的区别?

    其实就是关系数据库与HBase各自的优缺点。

    关系数据库的缺憾:

    1). 扩展困难

    2). 维护复杂

    HBase就是解决可伸缩行的问题。通过简单增加节点来获取线性扩展性。不支持SQL。

    HBase与RDBMS的区别?

    1). 表的设计:HBase的表可以很高,很宽,可伸缩性很强。而且表的模式是物理存储的直接反映。

    2). 拓扑: HBase能水平分区并在上千个节点上自动复制。

    3). 应用形式: 开发者必须承担更多的责任来正确地利用HBase的检索和存储方式。

    4). RDBMS 遵循固定的模式,如“codd 12 规则”,强调事务的“强一致性”、参照完整性、SQL支持、数据的逻辑与物理形式相对独立。等等。适用于中小规模的数据,但对于数据的规模和并发读写方面进行大规模扩展时,RDBMS会性能大大降低,分布式更为困难,因为其需要放弃很多RDBMS的易用的特性。


    HBase适用于上亿、上千亿级的数据,如果是只有上千、上百万级别是数据,传统的RDBMS是更好的选择。

    HBase需要更多硬件,如果硬件较少,如5个,干不成什么好事。

    如果从RDBMS移植到HBase,需要消除RDBMS的很多额外特性,如列数据类型、第二索引、事务、高级查询等。


    3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等

    1). 数据模式

    如下列三个表:

    第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。

    而后两个表才是真正的表,物理视图,他们是实际的存储形式,而且它们是按列族进行存储的。

    Row Key Time Stamp ColumnFamily contents ColumnFamily anchor
    "com.cnn.www" t9   anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8   anchor:my.look.ca = "CNN.com"
    "com.cnn.www" t6 contents:html = "<html>..."  
    "com.cnn.www" t5 contents:html = "<html>..."  
    "com.cnn.www" t3 contents:html = "<html>..."  


    Row Key Time Stamp Column Family anchor
    "com.cnn.www" t9 anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8 anchor:my.look.ca = "CNN.com"


    Row Key Time Stamp ColumnFamily "contents:"
    "com.cnn.www" t6 contents:html = "<html>..."
    "com.cnn.www" t5 contents:html = "<html>..."
    "com.cnn.www" t3 contents:html = "<html>..."


    2). HBase的基本元素:

    表、行、列、单元格: 表的基本要素

    键:一般是指行的键,即唯一标识某行的元素。表中的行,可以根据键进行排序,而对表的访问,也通过键。

    列族:所有列族成员拥有相同的前缀,某列族的成员,需要预先定义,但也可以直接进行追加。

    列族成员会一起放进存储器。而HBase面向列的存储,是面向列族的数据存储(这个通过上面那个表的示例可以看出来),数据存储与调优都在这个层次,HBase表与RDBMS中表类似,行是排序的,客户端可以把列添加到列族中去。

    单元格cell: 单元格中存放的是不可分割的字节数组。并且每个单元格拥有版本信息。HBase的是按版本信息倒序排列。

    区域region:将表水平划分,是HBase集群分布数据的最小单位。在线的所有区域就构成了表的内容。

    加锁:对数据行进行更新,都需加锁。保持原子性。


    3) 数据模型有哪些操作?

    Get、Scan、Put、Delete,即返回特定行的属性,多行属性、插入、删除数据。

    这些都需要一个HTable实例来操作。分别有Get、Scan、Put、Delete类来指定相应的参数、属性。

    以scan为示例:


    HTable htable = ...      // instantiate HTable
        
    Scan scan = new Scan();
    scan.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("attr"));
    scan.setStartRow( Bytes.toBytes("row"));                   // start key is inclusive
    scan.setStopRow( Bytes.toBytes("row" +  (char)0));  // stop key is exclusive
    ResultScanner rs = htable.getScanner(scan);
    try {
      for (Result r = rs.next(); r != null; r = rs.next()) {
      // process result...
    } finally {
      rs.close();  // always close the ResultScanner!
    }
    


    4) 返回结果的排序方式是什么?

    先是行、再是列族、再是列修饰符,最后是时间戳(反向排序,最新的在前面)。


    5)最后,HBase不支持联合查询


    6)mapreduce与HBase表配合使用,默认mapreduce的任务分割是根据HBase表中region的多少来分割,一个region就有一个map。


    4. HBase的模式Schema设计的一些概念和原则

    1)模式的创建与更新

    可以使用HBase Shell或HBase Admin来创建和编辑HBase的模式。

    在0.90.x 版本,只能先禁用表,再修改列族,而0.92.x版本以后,支持在线修改。


    而且表和列族修改后,如size, region, block size等,在下次 主紧缩 或 存储文件时 起作用。


    2)列族的数量

    -列族数量越少越好,即使同时有两个列族,查询的时候总是访问其中一个列族,不会同时访问。

    -当一个表存在多个列族,当基数差距很大时,如A族有100万行,B族10亿行,A族可能会被分散到很多区域region,导致扫描A的效率降低。

    -另外,多个列族在flush和compaction时,会造成很多I/O负担。


    3)行键设计RowKey

    a. 不要将RowKey设计成有序的形式,因为这样容易阻塞并行性,将负载压都在一台机器上

    b. 定位一个单元,需要行,列名和时间戳。如果一个单元格的坐标很大,会占用内存,索引用光。所以,解决方法:列族名尽量小,如一个字符a,短属性名,而行键长度可读即可(行键长度对数据访问无太大影响),将数字字符转换为数字字节模式(节省空间)。

    c. 倒序时间戳有助于找到找到最近版本值

    d. 行键是在列族范围内有效,不同列族中可以拥有同样的行键

    e. 行键永远不能变


    4)HBase支持所有能转换为字节数组的东西,如字符串、数字、复杂对象、计数器、甚至图像。

    5)列族可以设置存活时间TTL,超时后,HBase自动删除数据

    6)第二索引和查询: 这里面有很多东西,需要查看对应版本官方的文档更好些。


    5. HBase的拓扑结构是什么?

    1)拓扑结构: 类似于HDFS的mast与slave,mapreduce的tasktracker与jobtracker的关系,HBase也有master和RegionServer


    2)HBase与ZooKeeper的关系是什么?

    HBase必须管理一个ZooKeeper实例,它依赖ZooKeeper,主要目的是,通过ZooKeeper来协调区域内的服务器,它负责目录表、主控机地址等重要信息,若有服务器崩溃,HBase就可以通过ZooKeeper来协调分配。
    RegionServer在HBase的配置文件conf/regionservers文件中,而HBase集群的站点配置在conf/hbase-site.xml和conf/hbase-env.sh中配置。HBase尽量遵循了Hadoop的规则。


    3)HBase的内部结构管理状况:

    其内部有-ROOT, -META的特殊目录表,用于维护当前集群上所有区域的列表、位置和状态

    -ROOT表包含 -META表的区域列表,而-META表示包含用户的的区域列表。

    所以,HBase管理的流程是: 

    Client -- 链接到ZooKeeper -- 查找-ROOT表的位置 -- 查找-META表的位置 -- 查找用户的区域所在的节点、位置及其状态等 -- 直接管理指定区域的RegionServer并进行交互。


    HBase支持Java及MapReduce的开发。

    HBase提供了Thrift、REST及Avro的接口。HBase需要有一个相应的接口客户端负责与这些接口的交互。但是这些需要代理进行处理请求和响应,所以比java更慢。

    %hbase-daemon.sh start/stop rest/thrift/avro  //启动或终止对应的客户端


    4)HBase的使用示例:

    1. 创建表

    如在外壳环境下: create ‘station’, {NAME => 'info', VERSION >= 1}

    2. 加载数据

    MapReduce 与 HBase可以充分利用集群的分布式模型,将原始数据复制到hdfs中。

    每个任务只有一个HTable实例, 默认情况下,每个HTable.put(put),在执行插入操作时,不任何缓存。不过想使用缓存,是可以自己设置的。

    3. Web查询

    可以直接使用HBase的java API来实现一个Web的应用。HTable.get()可用来获取已定义的列族的所有内容。get的结果返回给Result, 包含的是数据行。

    HBase还可以使用扫描器scanner来检索观测数据。并且获取的是一个有序的结果。类似于传统数据库中的“游标”。HTable.getScanner(scan).


    6. HBase与Cassender的比较

    不同的应用,应该选用不同的NoSQL数据库,Cassandra, HBase, MongoDB, Riak都有各自的优缺点。
    而且以上各种数据库,都在发展中,随着版本变换,特点也会发生变化。
     根据 CAP理论(Consistency一致性, Availability 可获得性, Partitioning tolerance 分区容忍),二者可以简单区分一下。

    HBase是Hadoop生态系统的一部分,又其他框架如PIG, HIVE等的支持,而Cassender上运行mapreduce相对比较复杂的。总体上来说,Cassender或许在存储上比较有效,但HBase的数据处理能力更强些。
    HBase有Shell脚本和Web页面的处理能力,而Cassender没有Shell的支持,只有API,可用性上不如HBase。

    Cassender的Schema发生变化时,需要集群重启,但Cassender宣称“写操作永不失败”,而HBase是有可能的。
    场景:Cassandra 对由高速光纤连接的小型数据中心(几百个节点左右)是最佳的,而HBase适合网络“缓慢”且不可预料的Internet网。

    其他:
    HBase性能调优,别人很好的总结:
    展开全文
  • HBase学习(一)

    2015-07-31 22:17:32
    HBase有哪些基本特征? 2. HBase相对于关系数据库能解决的问题是什么? 3. HBase的数据模型是什么?如何表述?有哪些操作形式? 4. HBase的模式Schema设计的一些概念和原则 5. HBase的拓扑结构是什么样的? ...
    [size=medium]1. HBase有哪些基本的特征?
    2. HBase相对于关系数据库能解决的问题是什么?
    3. HBase的数据模型是什么?如何表述?有哪些操作形式?
    4. HBase的模式Schema设计的一些概念和原则
    5. HBase的拓扑结构是什么样的?
    6. HBase与Cassender的比较?


    1. HBase有哪些基本的特征?
    HBase是类似于google的bigtable的开源实现,拥有以下特征:

    1). 在HDFS之上

    2). 基于列存储的分布式数据库

    3). 用于实时地读、写大规模数据集

    其他HBase的特性:

    1).没有真正的索引,行顺序存储,也没有所谓的索引膨胀问题。

    2) 自动分区,表增长时,自动分区到新的节点上。

    3) 线性扩展和区域会自动重新平衡,运行RegionServer,达到负载均衡的目的。

    4).容错和普通商用的硬件支持。这点同hadoop类似。


    2. HBase相对于关系数据库能解决的问题是什么?
    HBase与关系数据的区别?

    其实就是关系数据库与HBase各自的优缺点。

    关系数据库的缺憾:

    1). 扩展困难

    2). 维护复杂

    HBase就是解决可伸缩行的问题。通过简单增加节点来获取线性扩展性。不支持SQL。

    HBase与RDBMS的区别?

    1). 表的设计:HBase的表可以很高,很宽,可伸缩性很强。而且表的模式是物理存储的直接反映。

    2). 拓扑: HBase能水平分区并在上千个节点上自动复制。

    3). 应用形式: 开发者必须承担更多的责任来正确地利用HBase的检索和存储方式。

    4). RDBMS 遵循固定的模式,如“codd 12 规则”,强调事务的“强一致性”、参照完整性、SQL支持、数据的逻辑与物理形式相对独立。等等。适用于中小规模的数据,但对于数据的规模和并发读写方面进行大规模扩展时,RDBMS会性能大大降低,分布式更为困难,因为其需要放弃很多RDBMS的易用的特性。


    HBase适用于上亿、上千亿级的数据,如果是只有上千、上百万级别是数据,传统的RDBMS是更好的选择。

    HBase需要更多硬件,如果硬件较少,如5个,干不成什么好事。

    如果从RDBMS移植到HBase,需要消除RDBMS的很多额外特性,如列数据类型、第二索引、事务、高级查询等。


    3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等
    1). 数据模式

    如下列三个表:

    第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。

    而后两个表才是真正的表,物理视图,他们是实际的存储形式,而且它们是按列族进行存储的。

    Row Key Time Stamp ColumnFamily contents ColumnFamily anchor
    "com.cnn.www" t9 anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8 anchor:my.look.ca = "CNN.com"
    "com.cnn.www" t6 contents:html = "<html>..."
    "com.cnn.www" t5 contents:html = "<html>..."
    "com.cnn.www" t3 contents:html = "<html>..."

    Row Key Time Stamp Column Family anchor
    "com.cnn.www" t9 anchor:cnnsi.com = "CNN"
    "com.cnn.www" t8 anchor:my.look.ca = "CNN.com"

    Row Key Time Stamp ColumnFamily "contents:"
    "com.cnn.www" t6 contents:html = "<html>..."
    "com.cnn.www" t5 contents:html = "<html>..."
    "com.cnn.www" t3 contents:html = "<html>..."

    2). HBase的基本元素:

    表、行、列、单元格: 表的基本要素

    键:一般是指行的键,即唯一标识某行的元素。表中的行,可以根据键进行排序,而对表的访问,也通过键。

    列族:所有列族成员拥有相同的前缀,某列族的成员,需要预先定义,但也可以直接进行追加。

    列族成员会一起放进存储器。而HBase面向列的存储,是面向列族的数据存储(这个通过上面那个表的示例可以看出来),数据存储与调优都在这个层次,HBase表与RDBMS中表类似,行是排序的,客户端可以把列添加到列族中去。

    单元格cell: 单元格中存放的是不可分割的字节数组。并且每个单元格拥有版本信息。HBase的是按版本信息倒序排列。

    区域region:将表水平划分,是HBase集群分布数据的最小单位。在线的所有区域就构成了表的内容。

    加锁:对数据行进行更新,都需加锁。保持原子性。


    3) 数据模型有哪些操作?

    Get、Scan、Put、Delete,即返回特定行的属性,多行属性、插入、删除数据。

    这些都需要一个HTable实例来操作。分别有Get、Scan、Put、Delete类来指定相应的参数、属性。

    以scan为示例:


    HTable htable = ... // instantiate HTable

    Scan scan = new Scan();
    scan.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("attr"));
    scan.setStartRow( Bytes.toBytes("row")); // start key is inclusive
    scan.setStopRow( Bytes.toBytes("row" + (char)0)); // stop key is exclusive
    ResultScanner rs = htable.getScanner(scan);
    try {
    for (Result r = rs.next(); r != null; r = rs.next()) {
    // process result...
    } finally {
    rs.close(); // always close the ResultScanner!
    }


    4) 返回结果的排序方式是什么?
    先是行、再是列族、再是列修饰符,最后是时间戳(反向排序,最新的在前面)。


    5)最后,HBase不支持联合查询


    6)mapreduce与HBase表配合使用,默认mapreduce的任务分割是根据HBase表中region的多少来分割,一个region就有一个map。


    4. HBase的模式Schema设计的一些概念和原则
    1)模式的创建与更新

    可以使用HBase Shell或HBase Admin来创建和编辑HBase的模式。

    在0.90.x 版本,只能先禁用表,再修改列族,而0.92.x版本以后,支持在线修改。


    而且表和列族修改后,如size, region, block size等,在下次 主紧缩 或 存储文件时 起作用。


    2)列族的数量

    -列族数量越少越好,即使同时有两个列族,查询的时候总是访问其中一个列族,不会同时访问。

    -当一个表存在多个列族,当基数差距很大时,如A族有100万行,B族10亿行,A族可能会被分散到很多区域region,导致扫描A的效率降低。

    -另外,多个列族在flush和compaction时,会造成很多I/O负担。


    3)行键设计RowKey

    a. 不要将RowKey设计成有序的形式,因为这样容易阻塞并行性,将负载压都在一台机器上

    b. 定位一个单元,需要行,列名和时间戳。如果一个单元格的坐标很大,会占用内存,索引用光。所以,解决方法:列族名尽量小,如一个字符a,短属性名,而行键长度可读即可(行键长度对数据访问无太大影响),将数字字符转换为数字字节模式(节省空间)。

    c. 倒序时间戳有助于找到找到最近版本值

    d. 行键是在列族范围内有效,不同列族中可以拥有同样的行键

    e. 行键永远不能变


    4)HBase支持所有能转换为字节数组的东西,如字符串、数字、复杂对象、计数器、甚至图像。

    5)列族可以设置存活时间TTL,超时后,HBase自动删除数据

    6)第二索引和查询: 这里面有很多东西,需要查看对应版本官方的文档更好些。


    5. HBase的拓扑结构是什么?
    1)拓扑结构: 类似于HDFS的mast与slave,mapreduce的tasktracker与jobtracker的关系,HBase也有master和RegionServer


    2)HBase与ZooKeeper的关系是什么?

    HBase必须管理一个ZooKeeper实例,它依赖ZooKeeper,主要目的是,通过ZooKeeper来协调区域内的服务器,它负责目录表、主控机地址等重要信息,若有服务器崩溃,HBase就可以通过ZooKeeper来协调分配。
    RegionServer在HBase的配置文件conf/regionservers文件中,而HBase集群的站点配置在conf/hbase-site.xml和conf/hbase-env.sh中配置。HBase尽量遵循了Hadoop的规则。


    3)HBase的内部结构管理状况:

    其内部有-ROOT, -META的特殊目录表,用于维护当前集群上所有区域的列表、位置和状态。

    -ROOT表包含 -META表的区域列表,而-META表示包含用户的的区域列表。

    所以,HBase管理的流程是:

    Client -- 链接到ZooKeeper -- 查找-ROOT表的位置 -- 查找-META表的位置 -- 查找用户的区域所在的节点、位置及其状态等 -- 直接管理指定区域的RegionServer并进行交互。


    HBase支持Java及MapReduce的开发。

    HBase提供了Thrift、REST及Avro的接口。HBase需要有一个相应的接口客户端负责与这些接口的交互。但是这些需要代理进行处理请求和响应,所以比java更慢。

    %hbase-daemon.sh start/stop rest/thrift/avro //启动或终止对应的客户端


    4)HBase的使用示例:

    1. 创建表

    如在外壳环境下: create ‘station’, {NAME => 'info', VERSION >= 1}

    2. 加载数据

    MapReduce 与 HBase可以充分利用集群的分布式模型,将原始数据复制到hdfs中。

    每个任务只有一个HTable实例, 默认情况下,每个HTable.put(put),在执行插入操作时,不任何缓存。不过想使用缓存,是可以自己设置的。

    3. Web查询

    可以直接使用HBase的java API来实现一个Web的应用。HTable.get()可用来获取已定义的列族的所有内容。get的结果返回给Result, 包含的是数据行。

    HBase还可以使用扫描器scanner来检索观测数据。并且获取的是一个有序的结果。类似于传统数据库中的“游标”。HTable.getScanner(scan).


    6. HBase与Cassender的比较
    不同的应用,应该选用不同的NoSQL数据库,Cassandra, HBase, MongoDB, Riak都有各自的优缺点。
    而且以上各种数据库,都在发展中,随着版本变换,特点也会发生变化。
    根据 CAP理论(Consistency一致性, Availability 可获得性, Partitioning tolerance 分区容忍),二者可以简单区分一下。

    HBase是Hadoop生态系统的一部分,又其他框架如PIG, HIVE等的支持,而Cassender上运行mapreduce相对比较复杂的。总体上来说,Cassender或许在存储上比较有效,但HBase的数据处理能力更强些。
    HBase有Shell脚本和Web页面的处理能力,而Cassender没有Shell的支持,只有API,可用性上不如HBase。

    Cassender的Schema发生变化时,需要集群重启,但Cassender宣称“写操作永不失败”,而HBase是有可能的。
    场景:Cassandra 对由高速光纤连接的小型数据中心(几百个节点左右)是最佳的,而HBase适合网络“缓慢”且不可预料的Internet网。[/size]
    展开全文
  • 我们对日常数据的这种处理和分析,常常使用的一些类似SQL server、MySQL、Oracle等等这些关系数据库,传统的这些数据库处理T级别数据量已经是这些数据库的极限,面对这种P级和E级的数据量,基本上是无能为力。...
  • 22、面向对象的特征有哪些方面 15 23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 ...
  • 引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    本章主要介绍了数据库的基础知识,包括数据库、数据库管理系统及关系数据库基本概念,此外还介绍了目前应用比较广泛的各种关系式数据库系统。 1.1 数据库起源 2 1.2 数据库主要特征 2 1.3 数据库构成 3 1.4 数据库...
  • FAQl.02 面向对象程序设计的基本特征有哪些? FAQl.03 Java语言是如何产生和发展的? FAQl.04 Android与Java语言有什么关系? FAQl.05 Java SE、Java EE和Java ME有什么区别? FAQl.06 Java语言的运行机制如何? ...
  •  66试述采用分层次数据流成图来描述系统,有哪些优点?P117  67试述数据字典编写的基本要求? P117  68简述手工数据字典中条目的形式和主要内容?*(简述数据字典的基本内容?)本P48  第七章 系统设计  ...
  • 11、面向对象的基本特征是什么? 15 12、作用域public,private,protected,以及不写时的区别? 16 13、Overload和Override的区别。 16 14、构造器可不可以被重载或重写? 16 15、Java中没有多继承? 16 16、抽象类...
  • 面试题230 面向对象的3个基本特征是什么 面试题231 重载(overload)和重写(overried)的区别 …… 面试题354 聪明的农民 面试题355 求最短的时间(中国某大型IT公司2007年面试题) 面试题356 不能称到的最轻重量...
  • 算法一般具有4个基本特征:可行性、确定性、穷性、拥有足够的情报。 (2)算法的基本运算和操作 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 (3)算法的3种基本控制结构 算法的3种基本...
  • (41) 在下列选项中,哪个不是一个算法一般应该具有的基本特征(C) A. 确定性 B. 可行性 C. 无穷性 D. 拥有足够的情报 (42) 希尔排序法属于哪一种类型的排序法(B) A.交换类排序法 B.插入类排序法 C.选择类排序法 D.建...
  • (5) 关系数据库管理系统能实现的专门关系运算包括选择、连接和______。 答:投影 (6) 在先左后右的原则下,根据访问根结点的次序,二*树的遍历可以分为三种:前序遍历、______遍历和后序遍历。 答:中序 (7) 结构...
  •  9.8.5 删除数据库用户的角色成员关系 262  9.8.6 删除用户定义的角色 262  9.8.7 管理访问和角色的Transact-SQL命令 263  9.9 管理数据库权限 264  9.9.1 为语句分配数据库权限 264  9.9.2 登录的对象权限 ...
  •  9.8.5 删除数据库用户的角色成员关系 262  9.8.6 删除用户定义的角色 262  9.8.7 管理访问和角色的Transact-SQL命令 263  9.9 管理数据库权限 264  9.9.1 为语句分配数据库权限 264  9.9.2 登录的对象权限 ...
  •  9.8.5 删除数据库用户的角色成员关系 262  9.8.6 删除用户定义的角色 262  9.8.7 管理访问和角色的Transact-SQL命令 263  9.9 管理数据库权限 264  9.9.1 为语句分配数据库权限 264  9.9.2 登录的对象权限 ...
  •  9.8.5 删除数据库用户的角色成员关系 262  9.8.6 删除用户定义的角色 262  9.8.7 管理访问和角色的Transact-SQL命令 263  9.9 管理数据库权限 264  9.9.1 为语句分配数据库权限 264  9.9.2 登录的对象权限 ...

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

关系数据库基本特征有哪些