1.1 大数据生态系统简介

在数据持续产生、变动和更新的时代,数据管理显得尤为重要。在这种情形下,我们需要一种存储、结构化和审计数据的方法,从而对数据进行持续处理,对模型和结果进行不断改进。

本章将介绍如何最优地保存和管理数据,以便在满足日常需求的数据架构环境中集成Apache Spark和相关工具。

1.1.1 数据管理

就算暂且不做长远的打算,即使你只是想在家里随便“玩”一点数据,如果没有适当的数据管理,往往问题会逐步升级直至你在数据中完全迷失,进而犯下错误。花时间思考如何组织你的数据,特别是如何进行数据采集是至关重要的。假如你花了很长的时间运行并分析代码,然后整理结果并生成报告,最终你发现使用了错误版本的数据,或者数据并不完整(例如缺失字段),或者更糟糕的是你把结果误删了。没有什么比这些更让人“抓狂”了!

这里还有个坏消息——虽然数据管理相当重要,但商业和非商业组织对它都并不太重视,尤其是缺少现成的解决方案。但好消息是,使用本章介绍的基础构建模块来完成这一工作会容易得多。

1.1.2 数据管理职责

在考虑数据时,我们很容易忽视该领域需要考虑的真实范畴。实际上,大部分数据“新手”会按照以下方式考虑数据范畴。

  • 获取数据。
  • 将数据放在某处。
  • 使用数据。
  • 丢弃数据。

实际上,关于数据,我们需要考虑的因素还有很多。数据管理的职责就是判断在特定的工作中需要具体考虑哪些因素。以下数据管理构建模块将有助于解答一些关于数据的重要问题。

  • 文件完整性。
    • 数据文件是否完整?
    • 如何确定数据文件完整性?
    • 数据文件是一个集合的一部分吗?
    • 数据文件是否正确?
    • 数据文件在传输过程中被修改了吗?
  • 数据完整性。
    • 数据是否符合预期?
    • 数据是否包含所有的字段?
    • 数据是否有足够的元数据?
    • 数据质量是否满足要求?
    • 有没有发生数据漂移?
  • 调度。
    • 数据是否按规律传输?
    • 数据多久到达一次?
    • 数据是否按时到达?
    • 能确定数据接收时间吗?
    • 需要确认数据接收时间吗?
  • 模式管理。
    • 数据是结构化还是非结构化的?
    • 数据是如何被解释的?
    • 模式能否被推断出来?
    • 数据是否随着时间产生变化?
    • 模式能否从之前的版本演变而来?
  • 版本管理。
    • 数据是什么版本?
    • 版本是否正确?
    • 如何处理不同版本的数据?
    • 如何确定正在使用的数据的版本?
  • 安全性。
    • 数据是否敏感?
    • 数据是否包含个人身份信息(PII)?
    • 数据是否包含个人健康信息(PHI)?
    • 数据是否包含支付卡信息(PCI)?
    • 如何保护这些数据?
    • 谁有权读/写数据?
    • 数据是否需要匿名/清理/混淆/加密处理?
  • 销毁。
    • 如何销毁数据?
    • 什么时候销毁数据?

如果上述内容仍无法说服你,那么在你继续使用gawk和crontab命令编写bash脚本之前,请继续阅读,你将会发现一种更快、更灵活且更安全的模式,可以让你从小规模开始逐步构建商业级的数据采集管道!

1.1.3 合适的工具

Apache Spark是新兴的可扩展数据处理的事实标准。在撰写本书时,它是最活跃的Apache软件基金会(ASF)项目,并提供了丰富的配套工具。每天都会出现新的工具,但其中许多工具在功能上有所重叠,因此我们需要花很多时间来学习它们的功能并判断其是否适用,而且这个过程没有捷径。通常来说,很少有万能的解决方案,总是需要根据实际情况进行具体场景分析。因此,读者需要探索可用的工具并做出明智的选择。

不同的技术将贯穿本书,希望它们能给读者提供更实用的技术引导,帮助读者在项目中使用相应技术。此外,如果代码编写合理,即使发现选择的某个技术是错误的,也可以利用应用程序接口(API)(或者Spark Scala中的高阶函数)来更换技术。