离线和实时大数据开发实战
这本书是公司一位负责数据库的同事推荐的,正好数据中心也在重构和优化,以应对更加海量的数据,所以便花了点时间读完了这本书。全书分了三个篇章:全局概览,从比较高的高度概述了大数据的概念及相关技术;离线数据开发,主要讲解了Hadoop和Hive以及相关的数据建模;实时数据开发,按照各个技术出现的时间先后,依次讲解了Storm、Spark、Flink和Beam。
这本书首先按照按照数据处理的流程,将数据处理分成了下面几个步骤
- 数据产生:可以是后台业务数据、日志数据、客户端埋点数据、爬虫数据、其他第三方数据等。
- 数据采集和传输:数据源主要分为文本和数据库两种。
- 数据处理和存储:将采集来的数据进行ETL(抽取、转换、加载)和持久化保存。
- 数据应用:当前主要还是“看”,未来可以利用深度学习、数据挖掘、机器学习等方式获得更多价值。
按照数据存储的实效性,将数据处理分为了三类:
- 离线处理:今天处理昨天或者更久前的数据,时间单位通常是天。
- 近线处理:处理15分钟或者1小时之前的数据,时间单位通常是分钟。
- 实时处理:处理即时收到数据,时效主要取决于传输和存储速度,时间单位通常是秒甚至毫秒。
因为近线处理的边界比较模糊,所以这本书几乎没有做讨论,只是讲述了离线处理和实时处理。
有了这两个维度以后,作者介绍了当前的主流技术。值得注意的是,这里并没有绝对的一个划分,比如说Kafka作为数据采集既可以用于实时,也可以用于离线;Spark可以用于离线,Spark streaming则用于实时,仅仅是一个倾向度。
数据采集 | 数据处理 | 数据存储 | 数据应用 | |
---|---|---|---|---|
离线处理 | Sqoop | MapReduce Hive |
HDFS HBase |
Drill R语言 TensorFlow |
实时处理 | Flume Kafka |
Storm Spark Flink Beam |
按作者的观点,当前大数据的主要战场仍是离线处理,但实时处理是未来发展的方向。比方说,双11的销售和订单数据,就需要实时的显示在阿里的大屏幕上,而不是到了第2天才统计出双11的销量。另外,由于近几年人工智能的快速发展,实时已经不是最好,而逐渐成为必需。
除了相关的技术以外,作者还讲述了数据仓库建模的理论和方法,介绍了建模领域的两位业界大拿:Bill Inmon和Ralph kimball。总体上,Kimball的方案更接地气一些,更详细的内容,需要查看他们的作品。数据仓库建模,按我的理解,就是数据的清洗和转换,将原本杂乱(非结构化数据)或者详细的明细数据,根据不同业务部门的需要,清洗、整理或者聚合成统计数据。这里主要是一个维度问题,因为同一份数据,不同的业务部门关注的角度可能会不同,因此,需要针对不同的业务建立不同的维度(数据集市)。
第二大部分,离线数据处理,介绍了Hadoop的两个组成部分HDFS和MapReduce。Hive,由于MapReduce需要编程实现,不利于部分数据使用人员,而Hive则将大数据的处理和分析能力赋予了普通数据相关人员。Hive构建在MapReduce之上,提供了一个类似于SQL的查询接口,Hive SQL最终会被翻译为MapReduce然后在Hadoop集群中执行。这部分还较为详细地介绍了Hive优化和维度建模。
第三大部分,实时数据处理,介绍了“第一代”实时流计算技术:Storm;“第二代”:Spark;“新生代”:Flink,以及未来有可能统一实时和离线的标准:Beam。这一部分,作者的节奏很快,快速讲述了发展历史、核心概念后就转为示例,作为读者是有一点难以接收和理解的。
总的来说,这本书能为各个技术提供一个鸟瞰式的概览,同时又提供了一些“实战”的内容,可是当读者只有一个概念时,感觉上又难以转入实战。因为,整本书都没有类似“操作手册”的部分(也有一些书整本都是操作手册,没讲基础概念,也很枯燥无味),所以实际上读者无法自行搭建其中某项技术的开发环境,比如Hadoop或者Spark,这样,因为环境没有搭建起来,也就无法进行实战和代码演练了。个人觉得这本书更适合有经验的人阅读,如果是针对入门者,则可以将概念讲得更细更深入,代码部分更简略。毕竟,一本书想要涉猎如此之多的大数据技术,也只能点到为止了吧。
不管实时还是离线,大数据的存储始终是基于HDFS。很多公司在面临海量数据时(传统的Mysql难以应对时),首先考虑的部分也是存储问题。对我而言,应当以这一部分和其相关的Hadoop生态圈,作为更深层次的切入点了吧。
感谢阅读,希望这篇文章能给你带来帮助!