Lambda 架构
大数据本质 数据系统 = 数据 + 查询
批处理层:保证准确性,但高延迟的批数据处理
服务层:低延迟读
速度层:事实最新数据保证低延迟,低准确性的数据处理
最后的综合,保证相对低延迟和高准确性
数据的三大关键属性
原始性,不变性,永久性
原始性
定义:比起广告商从电商网页的信息提取后总结获得信息,电商网页的信息更具有原始性。
存储原始数据有更好的价值,因为很少能提前想好所有问题的答案。
存储什么原始信息:
1 非结构化数据比规划化数据更原始更好
2 更多的数据不代表更原始更好
不变性
优势:
可容忍人为错误 (因为数据不可改动的海量存储,方便错误恢复)
简易性 (数据改动往往需要跟随索引,对于不可改数据,不需要索引,只需要根据时间戳等区分添加。具有简易性)
对于不可变数据,代价会占用更多存储空间。
对于可变数据,例如同一用户只保留一条记录。不同行为,会进行覆盖操作。
而对于不可变数据,同一用户会保留多条记录,比如完全相同key值,通过时间戳来区分他们不断追加而不是覆盖
永久性
数据永远真实
推荐基于事实的数据模型
事实作为数据分解的基本单元
特点:
原子性,存储为原子事实
通过时间戳保证事实的不变性和永远正确性
可识别性,可区分的事实方便过滤重复的事实,对lambda架构实现更容易
优点:
任何时刻历史信息可查询
容忍人为错误
只需要处理部分信息:无需引入NULL
拥有规范和不规范形式的所有优点
规范化如关系型数据库,可以减少冗余,促进一致性。查询通过索引等在存储层执行
lambda 拆分了查询和存储层。批处理曾的主数据集是规范化的,服务层的高效实时查询是非规范化的数据
图模式
以节点,边,属性的图模式来构建事实
存储事实格式
如半结构化json,序列化模式等等
事实格式-序列化框架
如Apache Thrift,Avro,Protocol Buffers等
Apache Thrift
序列化框架的局限性
批处理层的数据存储
因为不变和永久性,需要处理大量的,不断增长的数据集。存储就需要优化。
一次写入,多次批量读取
数据存储需求
HDFS
MR耳熟能详,略过很多书中MR的基本介绍