开源Data Lake设计



这些湖泊(数据湖泊)实际上已成为试图使用所有可用信息的企业和公司的标准。在开发大型数据湖时,开源组件通常是一个有吸引力的选择。我们将研究为云或混合解决方案创建数据湖所需的一般架构模式,并重点介绍实现关键组件时需要注意的许多关键细节。



数据流设计



典型的逻辑数据湖流程包括以下功能块:



  • 数据源;
  • 接收数据;
  • 存储节点;
  • 数据处理和充实;
  • 数据分析。


在这种情况下,数据源通常是原始事件数据的流或集合(例如,日志,点击次数,IoT遥测,交易)。

此类来源的关键特征是原始数据以其原始形式存储。此数据中的噪声通常由重复或不完整的记录组成,这些记录具有冗余或错误的字段。





在摄取阶段,原始数据来自一个或多个数据源。接收机制通常以一个或多个消息队列的形式实现,并具有一个简单的组件,旨在进行主要的数据清理和数据保存。为了构建高效,可伸缩且一致的数据湖,建议在简单数据清理和更复杂的数据丰富任务之间进行区分。一条好的经验法则是,清理任务需要滑动窗口中来自单个源的数据。



隐藏文字
( - , ..). , .



, , , 60 , . , (, 24 ), .




接收并清理数据后,将其存储在分布式文件系统中(以提高容错能力)。数据通常以表格格式编写。将新信息写入存储节点后,可以使用脱机搜寻器来更新包含架构和元数据的数据目录。搜寻器的启动通常由事件触发,例如,当新对象到达存储中时。存储库通常与它们的目录集成在一起。他们卸载基础架构,以便可以访问数据。



然后,数据进入专用于“黄金数据”的特殊区域。从这一点开始,数据就可以通过其他过程进行充实了。



隐藏文字
, , .



在扩展过程中,将根据业务逻辑对数据进行另外的更改和清理。结果,它们以结构化格式存储在数据仓库或数据库中,该数据仓库或数据库用于快速检索信息,分析或培训模型。



最后,数据的使用是分析和研究。在这里,通过可视化,仪表板和报告将提取的信息转换为业务构想。同样,此数据是使用机器学习进行预测的来源,其结果有助于做出更好的决策。



平台组件



数据湖云基础架构需要一个强大的功能,而对于混合云系统而言,则需要一个统一的抽象层,该层可以帮助部署,协调和运行计算任务,而不受API提供程序的限制。



Kubernetes是完成这项工作的好工具。它使您能够以可靠且经济高效的方式有效地部署,组织和运行数据湖的各种服务和计算任务。它提供了一个统一的API,可以在本地以及任何公共或私有云中使用。





该平台可以大致分为几层。基础层是我们部署Kubernetes或等效版本的地方。基础层还可以用于处理数据湖域之外的计算任务。使用云提供商时,将有望使用云提供商已建立的实践(日志和审核,最小访问权限设计,漏洞扫描和报告,网络架构,IAM架构等)。这将达到所需的安全级别并符合其他要求...



在基础级别之上还有两个附加级别-数据湖本身和值输出级别。这两个级别负责业务逻辑以及数据处理过程的基础。尽管这两层都有很多技术,但是Kubernetes再次被证明是一个不错的选择,因为它具有支持各种计算任务的灵活性。



数据湖层包括用于接收(KafkaKafka Connect),过滤,丰富和处理(FlinkSpark),工作流管理(Airflow)的所有必要服务。此外,它还包括数据存储和分布式文件系统(HDFS)以及RDBMSNoSQL数据库



最顶层是获取数据值。基本上,这是消费水平。它包括一些组件,例如用于理解商业智能的可视化工具,数据挖掘工具(Jupyter Notebooks)。在此级别上发生的另一个重要过程是使用来自数据湖的训练样本进行机器学习。



重要的是要注意,每个数据湖的组成部分都是常见的DevOps实践的实现:基础架构即代码,可观察性,审计和安全性。它们在解决日常问题中发挥着重要作用,必须在每个级别上应用它们,以确保标准化,安全性和易用性。



, — , opensource-.





Kafka 群集将接收未过滤和未处理的消息,并将充当数据湖中的接收节点。Kafka以可靠的方式提供高消息吞吐量。群集通常包含几个部分,分别用于原始数据,已处理(用于流传输)以及未交付或格式错误的数据。



Flink接受来自Kafka的原始数据节点的消息,过滤数据,并在必要时预丰富数据。然后将数据传递回Kafka(在单独的部分中过滤和丰富的数据)。如果发生故障或业务逻辑发生更改,则可以再次调用这些消息,因为他们被保存在卡夫卡。这是流处理的通用解决方案。同时,Flink将所有格式错误的消息写到另一部分进行进一步分析。



使用Kafka Connect,我们可以将数据保存到所需的数据存储后端(例如HDFS中的黄金区域)。Kafka Connect易于扩展,可通过增加重负载下的吞吐量来帮助您快速增加并发进程数:





当从写卡夫卡连接HDFS,建议进行高效的数据处理(少数据扫描时,较少的请求和响应)执行内容的分裂。数据写入HDFS后,无服务器功能(如OpenWhiskKnative)将定期更新元数据和架构参数存储。结果,可以通过类似SQL的界面(例如HivePresto访问更新后的架构





Apache Airflow可用于 后续数据流ETL流程管理。它允许用户使用Python和有向无环图DAG对象运行多步管线。用户可以定义依赖关系,编写复杂的流程并通过图形界面跟踪任务。Apache Airflow还可以处理所有外部数据。例如,通过外部API接收数据并将其存储在持久性存储中。Apache Airflow驱动Spark



通过一个特殊的插件,它可以根据业务目标定期丰富原始过滤的数据,并为数据科学家和业务分析人员的研究准备数据。数据科学家可以使用JupyterHub管理多个Jupyter Notebook因此,值得使用Spark配置多用户界面来处理数据,收集和分析数据。





对于机器学习,您可以使用Kubeflow之类的框架,利用Kubernetes的可扩展性生成的训练模型可以返回到系统。



如果我们把这个难题放在一起,我们会得到这样的东西:





卓越运营



我们已经说过,DevOpsDevSecOps的原理是任何数据湖的基本组成部分,不应被忽视。强大的功能带来了很多责任,尤其是当有关您业务的所有结构化和非结构化数据都放在一个地方时。



基本原理如下:



  1. 限制用户访问;
  2. 监控;
  3. 数据加密;
  4. 无服务器解决方案;
  5. 使用CI / CD流程。


DevOpsDevSecOps 的原理是任何数据湖的基本组成部分,不应被忽视。强大的功能带来了很多责任,尤其是当有关您业务的所有结构化和非结构化数据都放在一个地方时。



推荐的方法之一是通过分配适当的权限仅允许访问某些服务,并拒绝直接用户访问,以使用户无法更改数据(这也适用于命令)。通过记录操作进行全面监视对于保护数据也很重要。



数据加密是另一种保护数据的机制。可以使用密钥管理系统(KMS)对存储的数据进行加密)。这将加密您的存储系统和当前状态。反过来,可以使用证书为所有接口和服务端点(如KafkaElasticSearch)进行传输加密



对于可能不符合安全策略的搜索引擎,最好选择无服务器解决方案。还必须放弃手动部署,以及数据湖中任何组件的情况变化;每次更改都必须来自源代码控制,并且必须经过一系列CI测试,然后才能部署到产品数据湖(烟雾测试,回归分析等)。



结语



我们已经介绍了开源数据湖体系结构的基本设计原理。通常,方法的选择并不总是显而易见的,并且可能由不同的业务,预算和时间要求所决定。但是,无论是混合还是全云解决方案,利用云技术创建数据湖都是该行业的新兴趋势。这是由于此方法提供的大量好处。它具有高度的灵活性,并且不限制开发。重要的是要了解,灵活的工作模型会带来巨大的经济利益,使您能够组合,扩展和改进应用的流程。



All Articles