介绍及应用场景
1、介绍
起源
- 21世纪的前3架马车的三篇论文
- GFS→HDFS
- MapReduce→MapReduce
- Bigtable→Hbase
实时和离线的区别
- 大数据本质:对数据进行处理,从数据中获取价值
- 数据的价值会随着时间的流逝而逐渐降低
- 离线:数据已经产生了一段时间,然后再对数据进行处理
T+1:今天处理昨天的数据
- 年度账单:一年处理一次
- 时效性:小时级别以上
- 实时:数据只要一产生就立即进行处理
- 实时风控
- 实时推荐
- 时效性:秒级别以内
- 上一秒数据刚产生,下一秒立即对数据处理完成进行应用
- 如何构建实时?
- 数据实时
产生
- 数据实时
采集
:Flume - 数据实时
存储
:Hbase、Kafka - 数据实时
处理
:Flink、SparkStreaming - 数据实时
应用
- 数据实时
Bigtable/Hbase设计思想
- 需求:如何快速的读写大数据?
- 分布式解决方案:存储大数据
- 分布式数据库
- 通过数据库、表等结构来管理存储的大数据
Hive
通过数据库与表的形式来管理大数据
- 底层还是HDFS
- 基于文件实现行和列的数据管理
读取某行或者读取某一列必须读文件
HDFS
- 应用场景:
一次写入,多次读取
- 基于磁盘的分布式存储:随机读写磁盘
- 应用场景:
问题1:在计算机中,如何能实现数据的快速的读写访问?
- 计算机中数据的存储:硬盘、内存
- 读写速度:由快到慢
顺序读写内存
顺序读写磁盘
随机读写内存
随机读写磁盘
- 数据必须在内存中,才能提高读写的性能
- Hbase是优先读写内存
- 写入:先写内存
- 读取:先读内存
问题2:内存比较小,如何能存储大数据?
- 分布式的设计
- 构建分布式的内存存储
- 写入Hbase的数据会被分区,写入不同的机器的内存
- 100GB的数据,10台机器【32GB*10 = 320GB】
- 每台机器的内存中写入10GB
- 构建分布式的内存存储
问题3:内存的容量永远满足不了数据的存储?
- 数据不可能永远存储在内存中
- 数据处理的规律中:新数据被处理的概率要远大于老的数据
- 解决
- 新的数据存储在内存中
- 新的数据和经常被使用的数据
- 老的数据进行持久化在硬盘上
- 问题:如果我想读老的数据怎么办?
- 第一次从硬盘中读,读完以后,会把这个数据放入缓存【内存】
- 后面再读取这个数据,直接从缓存中读取即可
- 排序:将所有写入硬盘的数据构建有序
- 从有序的数据中查找数据是非常快的
- 第一次从硬盘中读,读完以后,会把这个数据放入缓存【内存】
- 新的数据存储在内存中
问题4:硬盘容易损坏,如果硬盘中的数据丢失了怎么办?
- 如何能保证硬盘坏了数据依旧可以读取?
- 将数据存储在HDFS
- HDFS的数据存储在硬盘中
- 通过副本来保证数据不会丢失
- 将数据存储在HDFS
总结
- 通过构建分布式内存来优先读写数据
- 写:内存
- 定期将内存中的老的数据写入HDFS
- 将内存腾出空间存储新的数据
- 读
先读内存
如果没有就读缓存【内存】
如果没有就读HDFS
读完以后,将数据放入缓存
- 写:内存
- 底层
用HDFS来实现数据的持久化
既实现了数据的快速读写,又保证了数据的安全
- 与Hive的底层主要的区别
Hive -> 读写 -> HDFS
基于文件的行
Hbase -> 优先读写内存 -> 读写HDFS
基于文件的列
- 官网:hbase.apache.org
- Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.
- hbase是hadoop的数据库,一个分布式可扩展大数据的存储框架
- Use Apache HBase™ when you need random, realtime read/write access to your Big Data.
- 当你需要随机实时的读写访问你的大数据可以使用hbase
2、功能
- 实现快速的随机的实时读写大数据
3、应用场景
- 电商
- 大量的商品和订单信息都存储在后台的数据库中
MySQL存储近半年的订单
Hbase可以存储所有商品的信息
- 游戏
- 订单、操作、升级
- 金融
- 每一笔消费
- 电信
- 短信、电话
- 打印通话记录
- 交通
- 马路上的探头
- 实时的高性能的随机大数据量的读写