Hadoop第六讲

Hadoop家族

         

1. Pig

     对于非java程序人员,是看不懂java语句的 ,如何让DBA能够使用类似SQL的语句就能够对Hadoop进行数据分析等操作。

         

2. HBase

该思想下数据表只需要一张表就可以的,通过BigTable思想的映射就能够形成一个表。

           

3. Hive

          

4. zookeeper

            

5. Sqoop

           

6. Avro

   

7. Chukwa

           

8.Cassandra

            

一、HBase

HBase是一个分布式的、面向列的数据库,“一个结构化数据的分布式存储系统”,Hbase不同于一般的关系型数据库,并且是适合于非结构化的数据存储的数据库,Hbase是基于列而不是基于行的。

BigTable的想法:

学生表的例子S(s#, sn, sd, sa),存放为关系的学生表,以bigtable的方式考虑所有的二维关系表可以用三列来表示,第一个表示key是该数据的唯一性表示,第二个列是属性例如(学生的系别、年级等),第三列的表示值,这样对于任何数据表只需要一张表就行了,但是在该表上不等进行group by,联接合并等操作,但是对于key-value的查询操作速度是非常快的。

HBase的逻辑模型

以表形式存放数据,表有 行和列组成 ,每一列属于某一个列族,由行和列确定的存储单元称为元素。每个元素保存了同一份数据的多个版本,有时间戳来标识。

列族可以有多个。列族中存放的是key=value来表示。若是删除表,则会在表中添加删除标记而不是物理的删除。因为HBase中的数据是只读的,不允许修改部分,只能插 入或删除全部。Hbase会周期性的将小文件进行合并,若是被打上删除标记或时间戳比较旧的则直接删除即可。因此HBase是面向时间查询的。

                                

是数据行在表中的唯一标识,并作为搜索记录的主键。访问表里面的行有三种方式:1. 通过 单个行键访问;2.给定行键的范围访问;3.全表扫描

行键的最大长度不超过64kb的任意字符串,并按照字典序存储。对于经常一起读取的行 ,其行键需要精心设计。

列族与列

列表示:<列族>:<限定符>

HBase在磁盘上按照列族存放数据,key-value的格式如下图,每一个格式相当于一个数据单元,相当于B+树中的叶子节点,按照key进行排序。因此同一列族的会被 放在一起。列族的元素最好具有相同的读写方式(例如等长的字符串),以提高性能。

                  

时间戳:

二、HBase的物理模型

表在行方向上,按照行键范围划分成若干的Region,每个表最初只有一个region,当记录数增加到超过某个阈值时,开始分裂成两个。物理上所有数据存放在HDFS, 由Region服务器提供region的管理,一台物理节点只能跑一个HRegionServer,一个Hregionserver可以管理多个Region实例,一个Region实例包括Hlog日志和存放 数据的Store,Hmaster作为总控节点,Zookeeper负责调度

HLog用于灾难恢复,预写是日志,记录所有更新操作,操作先记录进日志,数据才会写入。每一个Store表示一个列族

                    

MemStore 与 Storefile

  1. 一个region由多个store组成,每个store包含一个列族的所有数据
  2.  Store包括位于把内存的memstore和位于硬盘的storefile
  3.  写操作先写入memstore,当memstore中的数据量达到某个阈值,Hregionserver会启动flashcache进程写入storefile,每次写入形成单独一个storefile
  4.  当storefile文件的数量增长到一定阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成更大的storefile
  5.  当storefile大小超过一定阈值后,会把当前的region分割为两个,并由Hmaster分配到相应的region服务器,实现负载均衡
  6.  客户端检索数据时,先在memstore找,找不到再找storefile
如何定位Redion?使用特殊的表-ROOT-、.META.表
1.  .META.表记录用户表的Region信息, .META.可以有多个region, 可以有多个.META.因此需要使用-ROOT-表记录.META.位置
2. -ROOT-表记录.META.表的Region信息,-ROOT-只有一个region
3. Zookeeper中记录了-ROOT-表的location
                

      

Hbase VS Oracle

1. 索引不同造成行为差异,

2. Hbase适合大量插入同时又有读的情况,只适合简单的key-value查看,不适合复杂的数据库操作。

3. Hbase的瓶颈是硬盘速度,Oracle的瓶颈是硬盘的寻道时间

4. Hbase很适合寻找按照时间排序 top n的场景。

传统数据库的行式存储

数据存放在数据文件内,数据文件的基本组成单位是块/页,块内结构:块头,数据区

行式存储的问题

读某个列必须读入整行,行不等长,修改数据可能导致行迁移,行数据较多是可能会导致行链。

BigTable是的LSM(Log Structured Merge Trees )索引,Hbase中数据和日志是一体化的。行标识访问使用B索引,缺点是空间代价,创建时间代价,维护代价较高,重复值多时影响效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值