var _hmt = _hmt || []; (function() {   var hm = document.createElement("script");   hm.src = "https://hm.baidu.com/hm.js?8c9c5a8618dc4aea3be27b32962e5871";   var s = document.getElementsByTagName("script")[0];    s.parentNode.insertBefore(hm, s); })();
400 050 6600
数据分析师

手机号

验证码

30天自动登录

正确处理云数据湖

来源:CPDA数据分析师网 / 作者:数据君 / 时间:2020-08-31

大多数业务用户使用BI工具跟踪收入

利润和客户体验指标,这些工具对数据仓库中的少量关系数据(几TB)进行操作,并且需要执行少量数据扫描(几GB)。数据分析师是商业智能(BI)工具的主要用户,他们与数据工程师合作编写用于加载所需数据的SQL脚本。

 

从数据中获得竞争优势已经超越了BI到交互式,流式和点击流分析,机器学习,深度学习等应用程序

对于这些较新的应用程序,数据湖提供了的体系结构,数据以不同的速度和形式从多个来源到达不同的速度,并被分段并编入中央存储库,然后它以经济高效的方式可用于任何规模的任何类型的分析或机器学习应用程序。

 

至少这是理论但是我们都知道构建成功的数据湖并不像听起来那么容易

经过几年的大肆宣传之后,不可避免的反弹开始了,因为一些企业意识到他们建立了TB级的数据湖,无法实现承诺的价值。然而,随着数据的持续冲击,这并不是放弃数据湖的原因,这是退后一步,检查行业学到的知识并在将来使用实践进行构建的原因。

 

要建立有效的数据湖,需要三个更广泛的领域,数据团队需要注意

数据摄取,数据布局和数据治理,本文依次介绍了每个领域,并描述了确保项目成功的关键考虑因素和功能。我们这里集中在云数据湖上,因为出于成本和规模的原因,这就是现在创建大多数新数据湖的地方。

 

数据提取:解决批处理和流传输

必须先将数据摄取到湖泊中,然后才能对分析人员和数据科学家有用。因此,数据摄取为下游分析的有效性奠定了基础。数据摄取的体系结构实践包括:

 

管理批处理和流数据摄取批处理数据提取

批处理系统主要将应用程序数据,日志和关系数据集定期从事务系统移至数据湖。对于批量提取交易数据,数据湖必须支持对湖中数据集的行级插入和更新,功能大大简化了任务,与重写数据分区或整个数据集相反,此外可以在数据湖上进行并发写入和读取,而不会出现数据完整性问题或读取性能明显下降。

 

流式数据提取,物联网数据和点击流需要实时分析,以不同的速度和格式收集数据

即使对于流数据,数据湖也必须保证数据被精确地写入一次或至少写入一次,通过使用结构化流,这是可能的结合流数据以可变速度从保持偏移量的消息队列到达,这也可以使用来实现,用于流处理的数据湖解决方案应与消息队列中的模式注册表集成,工程人员可以在其中管理模式以防止事件模式发生更改时防止数据管道中断,此外数据平台必须支持重放功能,以跟上业务在流处理和重新处理/恢复过时事件方面的发展。

 

数据湖必须支持持续的优化,该优化需要从摄取的数据中创建汇总和黄金数据集,以进行下游分析

我们将在下一节有关数据布局的内容中讨论这一方面,源到目标架构转换要将数据从数据库或数据仓库迁移到数据湖,工程师通常必须重新在逻辑实体上重新创建架构。这既普通又费时,并且需要保持架构与源架构同步。S3中的数据(例如日志文件)可能没有架构,并且可能作为人口稀少,深度嵌套的半结构化数据集落入数据湖。数据工程师将从智能检测源模式和动态创建逻辑表,

 

监控数据移动

数据提取管道有时会由于难以控制的原因而失败,例如错误数据,模式漂移,间歇性平台故障等。这就是为什么将管道和底层基础架构连接到丰富的监视和警报工具,以缩短故障后恢复时间的重要性,做法是应将错误的记录发送到错误流以进行根本原因分析。

 

数据布局:针对机器学习和SQL分析进行优化

数据生成以及扩展的数据收集是连续且连续的。机器数据通常是稀疏的,并以半结构化格式(例如JSONCSV)收集。录制的媒体(例如视频,图像和自由文本)采用非结构化格式。尝试检查,探索和分析原始格式的数据集既艰巨又缓慢,因为分析引擎会扫描多个文件中的整个数据集。更好的方法是预先计划并构建ETL管道,以反映针对频繁访问的数据的明确定义的布局策略。关键是使用不同的技术来减少扫描数据和查询开销。

 

使用列式数据格式进行读取分析

以开源列格式发布数据以减少数据扫描。这些机器可读的二进制文件格式已针对读取分析进行了优化。主动避免在扫描整个数据集时需要使用,通过清理它们,将其转换为数据类型并以列格式存储,来展平常用的值。

 

分区数据

按常用谓词对数据进行分区,例如时间,地理位置和业务范围,以减少不必要的数据扫描。由于分区将元数据添加到元存储并导致查询执行中的查找开销,因此调整分区粒度(基于所考虑的数据集的大小)非常重要。典型的要求是按年,月,周,日或小时进行分区,但不能按分钟或秒进行分区。提取系统将负责解析事件时间戳,并写入分区的正确物理位置并更新元存储。

 

使用压缩来打包小文件

数据的突然到达,以及实时流的摄取,导致将数据写入云对象存储中的不同大小的多个文件中,与本地模型相比,云对象存储中的网络调用既昂贵又缓慢,这会拖慢读取性能,通过压缩将小文件异步分块为更大的文件,可以减少这些网络开销并提高性能,比起尝试基于数据到达模式(这是不可预测的或至少很难预测的)来调整摄取系统,压缩是一种必要且更好的策略。

 

收集统计信息以进行基于成本的优化

收集并维护数据集的统计信息,例如文件大小,行数和值的直方图,分析引擎运行时中基于成本的优化器可以通过使用可用统计信息通过联接重新排序等技术来优化查询,从而显着提高性能。

 

 

Prev article

顺序索引的物化视图,用于基于成本的优化

Next article

在分布式环境中测量高性能数据库

数据分析师

报名咨询

数据分析师

报名缴费

数据分析师

客服中心

数据分析师

课程服务

数据分析师

认证服务