sqoop(数据交换工具)+HBase(分布式、面向列、非结构化数据存储、在线业务)总结

1. sqoop 介绍

  • 作用 数据交换工具 可以实现 数据在mysql oracle<==> hdfs之间互相传递

  • 原理 通过写sqoop 命令 把sqoop命令翻译成mapreduce 通过mapreduce连接各种数据源 实现数据的传递

  • 通过sqoop 把数据从mysql导入到hdfs

    • sqoop import --connect jdbc:mysql://mysql数据库地址:3306/数据库名字 --username root --password password --table 要导出数据的表名 -m mrjob的数量(2:有两个文件)

    • 默认会把文件导入到 hdfs上 /user/linux用户名 文件夹下

    • 通过 --target-dir指定其它位置

2. HBase介绍

  • 分布式、面向列开源数据库

  • Big Table开源实现

  • 适合非结构化数据的存储

  • PB级别数据

  • 可以支撑在线业务

  • 分布式系统特点 :易于扩展,支持动态伸缩,并发数据处理

3. 面向列数据库

3.1 HBase 与 传统关系数据库的区别

HBase 关系型数据库
数据库大小 PB级别 GB TB
数据类型 Bytes 丰富的数据类型
事务支持 ACID只支持单个Row级别 全面的ACID支持, 对Row和表
索引 只支持Row-key 支持
吞吐量 百万写入/秒 数千写入/秒
  • 关系型数据库中数据示例
ID FILE NAME FILE PATH FILE TYPE FILE SIZE CREATOR
1 file1.txt /home txt 1024 tom
2 file2.txt /home/pics jpg 5032 jerry
  • 同样数据保存到列式数据库中 列族:列标识符:值
RowKey FILE INFO SAVE INFO
1 file_info:name:file1.txt
file_info:type:txt
file_info:size:1024
path:/home/pics creator:Jerry
2 file_info:name:file2.jpg
file_info:type:jpg
file_info:size:5032
path:/home creator:Tom
  • 行数据库&列数据库存储方式比较

sqoop(数据交换工具)+HBase(分布式、面向列、非结构化数据存储、在线业务)总结

  • 关系型数据库:行式存储 每一行数据都是连续的 所有的记录都放到一个连续的存储空间中

  • 列数据库: 列式存储 每一列对应一个文件 不同列并不对应连续的存储空间

  • 结构化数据 V.S. 非结构化数据

    • 结构化数据
      • 预定义的数据模型 模型一旦确定不会经常变化(表结构不会频繁调整)
    • 非结构化数据
      • 没有预定义数据模型
      • 模型不规则 不完整
      • 文本 图片 视频 音频

3.2 Hive 和 Hbase区别

  • hive hbase 共同点
    • 都可以处理海量数据
    • 文件都是保存到hdfs
  • hive 和 hbase不同
    • hbase计算不是通过mapreduce实现的 自己实现的CRUD(增删改查)功能
    • hive 通过mapreduce实现 数据查询的
    • hbase 可以有集群 集群的管理是通过zookeeper实现
    • hive 只能做离线计算
    • hbase 提供对数据的随机实时读/写访问功能
  • HBase 对事务的支持 只支持行级别的事务
  • CAP定理
    • C consistency 一致性 所有节点在同一时间具有相同的数据
    • A availability 可用性 保证每个请求不管成功或失败都有响应,但不保证获取的数据的正确性
    • P partition tolerance 分区容错性 系统中任意信息的丢失或失败不会影响系统的运行,
    • 分区容错性 分布式系统都要有的特性,任何时候都要能提供服务 P保证
    • HBase CP系统 强一致性

3.3 Hbase 和 传统关系型数据库区别

  • 创建HBase表的时候只需要指定表名 和 列族

  • 每一个行当中 只需要列族相同就可以了 至于每个列族中的 key:value key可以完全不同

4. Hbase 数据模型

  • NameSpace 对应 关系型数据库 database
  • 表(table):用于存储管理数据,具有稀疏的、面向列的特点。
  • 行 (row): 每一行都对应一个row key 行键 Hbase有索引但是只是在行键 rowkey有索引
  • 列 Column family 和 Column qualifier 组成
  • 列族(Column Family)保存的就是 键值对集合 key:value
  • 列修饰符(Column Qualifier) 就是key 对应关系型数据库的列
  • 时间戳(TimeStamp):是列的一个属性
  • 区域(Region):HBase自动把表水平划分成的多个区域,划分的区域随着数据的增大而增多。
  • Hbase支持对行级别的 操作保证完全的 ACID
    • A 原子性 整个事务中的所有操作,要么全部完成,要么全部不完成
    • C 一致性 事物必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少
    • I 隔离性 串行化或者序列化 隔离状态执行事务
    • D 持久性 事务完成后,事务对数据库所做的更改持久保存在数据库中,不会回滚

5. HBase基础架构

sqoop(数据交换工具)+HBase(分布式、面向列、非结构化数据存储、在线业务)总结

  • Client

    • 与Zookeeper 通信
    • Client与HMaster进行通信进行管理类操作;
    • Client与HRegionServer进行数据读写类操作。
  • Zookeeper

    • 保证HMaster有一个活着
    • HRegionServer HMaster地址存储
    • 监控Region Server状态 将Region Server信息通知HMaster
    • 元数据存储
  • HMaster

    • Region server分配region
    • 负责region server的负载均衡
    • 发现失效的region serve并重新分配其上的region;
    • HDFS上的垃圾文件回收;
    • 处理用户对表的增删改查操作。
  • HRegionServer

    • HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据
    • 维护Master分配给它的region,处理对这些region的IO请求
    • HRegionServer管理一系列HRegion对象
  • HRegion

    • 一个表最开始存储的时候,是一个region
    • 一个Region中会有个多个store,每个store用来存储一个列簇
    • region会随着插入的数据越来越多,会进行拆分。默认大小是10G一个
  • HStore

    • HBase存储的核心,由MemStoreStoreFile组成。
    • 每一个column family 对应了一个HStore
    • 用户写入数据的流程为:client访问ZK, ZK返回RegionServer地址-> client访问RegionServer写入数据 -> 数据存入MemStore,一直到MemStore满 -> Flush成StoreFile
  • HLog

    在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况。