hadoop的三驾马车
MapReduce
MapReduce是分布式系统上的应用程序
HDFS
HDFS就是分布式文件系统, 以前还有个名字叫GFS
HBase
HBase是一个分布式的数据库,多个机器组装成的一个数据库,以前叫BigTable
最开始在2006年出现hadoop 1.0
2012年出现hadoop 2.0 2.0时代最大的变动引入了zookeeper,解决了1.0时代很多不好解决的问题,打开了很多瓶颈约束,另外一个就是YARN,YARN代替MapReduce成为默认执行引擎
2018年hadoop 3.0,3.0对各个组建作出升级和优化,比如hdfs纠删码存储,HA升级,YARN的timeline service升级,Opportunistic Container,资源支持GPU等
数据部分业务层级
Online层
在线部分,用户请求后,需要实时计算,快速反馈
比如用户需要查寻附近的理发店数据
Offline层
离线部分,在用户请求前,将数据挖掘出来,或者计算出来,更多是提前挖掘准备好的,可能每天都在准备,但是准备好后有用户请求到这一条数据,这一过程就是online层
比如我们提前把附近理发店的数据通过一系列手段做好数据存入数据库的过程
Nearline层
主要是为了利用实时计算,弥补offline的时效性不足
比如我们正在处理实时生成的网络数据,昨天的数据已经全部生成,所以可以全部一起取出来通过批量处理得到昨天的网络情况然后插入数据库中,但是现在此时此刻是今天早上八点,我们只有今天0-8点的数据,我们应该怎么做?
-
方案一:昨天的数据使用批量处理,将0-8点的数据取出来,以批量处理的方法得到数据插入到数据库中
这种方法计算出来的数据准确,但是一半批量处理的方法时效很低,比如我们八点取出所有数据,我们处理这些数据可能需要一小时甚至更久,所以我们数据库中就只有在9点才可以看到0-8点的今天数据的结果。 -
方案二: 昨天的数据使用批量处理,将0-8点的数据取出来,用实时计算的方法计算插入到数据库中,实时计算方法时效高,但是精度较低,比如我们在八点获取到0-8点的数据,使用实时计算可能只需要5分钟,这样我们的用户就可以在8.05看到今天0-8点的数据。这种方案也是大多数公司采取的方案。
下面解释一下批量计算和实时计算。
- 批量计算: 时效低,精度高,一般用在有足够时间的情况下处理数据,比如用在Offline层做数据计算。一般批量处理用到MapReduce,Spark.
- 实时计算(适用于Nearline): 时效高,精度低(比如在有的地方为了效率就不会计算那么精确),一般用在需要看实时数据的情况下,比如Nearline层的数据计算。一般用到Storm.SparkStreaming,Flink.
有的人会有一个问题,为什么不全部用实时计算,其实也是可以,我们前端都能看到五分钟前的数据,但是精度低了。