sqoop(数据交换工具)+HBase(分布式、面向列、非结构化数据存储、在线业务)总结
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 |
- 行数据库&列数据库存储方式比较
-
关系型数据库:行式存储 每一行数据都是连续的 所有的记录都放到一个连续的存储空间中
-
列数据库: 列式存储 每一列对应一个文件 不同列并不对应连续的存储空间
-
结构化数据 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基础架构
-
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存储的核心,由MemStore和StoreFile组成。
- 每一个column family 对应了一个HStore
- 用户写入数据的流程为:client访问ZK, ZK返回RegionServer地址-> client访问RegionServer写入数据 -> 数据存入MemStore,一直到MemStore满 -> Flush成StoreFile
-
HLog
在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况。