这个演讲将专注于技术挑战之旅,权衡和突破性的成就为构建高性能和可伸缩的管道的工作经验与我们的客户。遇到的问题是由许多组织共享的经验教训和最佳实践被广泛适用。
这些包括:
与会者将会话的最佳实践和策略可以应用于大数据架构,如:
观众:与会者应该有一些知识,建立大数据管道和Apache火花。
——欢迎来到火花峰会。
我Vini贾斯瓦尔砖作为一个客户成功工程师工作。我与数据工程师密切合作,数据科学家和高管在各种行业。包括金融、地理空间,声称、零售、医疗保健。我帮助他们的云计算和数据实现和战略人工智能和机器学习,以及分析用例。
所以我在这里分享一些经验教训,我学会了与客户和最佳实践实现的。
我想带你通过数据工程之旅80%的业务问题相关联。我们将介绍数据策略,构建有效的成本和性能数据管道,确保productionization。我就会得出结论,它与客户的参考体系结构。
在砖,我们认为数据有可能解决世界难题。你怎么做呢?
你有数据,解决业务问题。所有你需要做的就是运行数据科学机器学习,好吗?如果你有传统的堆栈,但是没有解决人工智能报告,如果你可以这样做,我们的工作将会更加容易。不幸的是,现实是复杂的。我们不再谈论的是商业智能和业务分析。组织实现的价值的所有数据,现在他们想要比这做得更多。他们想成为数据驱动的。要有效地利用机器学习和人工智能,你需要一个统一的速度和可伸缩的解决方案来支持增长和多样化数据量包括开放格式。
数据更像一个湖的水域在它的自然状态。数据流从源系统到湖中。它收集一切消除数据孤岛和促进中央位置。数据湖作为一个真理的来源,在那里你可以所有的数据来源,解耦计算和存储它,用它来驱动的见解,分析,数据科学和机器学习。但这是通常的数据看起来像湖,它是垃圾和垃圾。
这就是数据科学家的梦想。
让我们总结一下这些问题。没有原子性意味着失败的生产工作。离开数据腐败的国家。有一个庞大的数据与此体系结构质量和可靠性问题。对于每一个副本,很难保持一致。所以很难做任何事。数据科学家花费80%的时间数据传送绿豆和20%。你想怎么解决呢?
你需要一个统一的服务删除所有的数据仓库,并确保你有可靠性。最要紧的是你已经有很多数据在你的湖。所有您需要做的是确保它是可靠的。火花的一个组成部分,和大多数人已经标准化的火花,他们的数据处理引擎。第二个非常重要的组件,许多用户在三角洲湖找到价值。它创建一个事务层上的现有数据湖。在上面,一旦资产交易,你可以确保你有可靠性和高质量的数据。
你可以做各种各样的计算。事实上如果你有模式、流与δ,没关系在数据流同时有人批阅读它。这是统一的服务。现在我们有固定的数据。当你开始一个数据管道,想想什么是用例或你想完成的业务成果。
通常喜欢机器学习用例开始,甚至一个项目如果我甚至没有得到正确的数据。总是一个很好的实践问自己如果你准备帮助一个用例的数据,如果数据准备分析和机器学习。所以考虑你的听众来说,您正在构建的数据创建表的目的对用例和观众。考虑文件格式的文件格式进行更快的应用程序。同时是的我们有一些挑战喜欢为什么转换,等拼花更优化的格式。你需要考虑表细分。而不是一刀切的方法,我的建议是有不同层基于用户角色和用例。在三角洲湖我们使用术语的青铜、白银和黄金。青铜的意义层,你可以试着保护你所有的原始数据,使它在铜层和最低使用生命周期策略的转变。这是主要用于数据的科学家。 Second is silver tier, combine all your logic partitions to keep it in optimized format with some transformation. So this serves some sophisticated advanced users like product managers. Gold tables, so this is where you want to keep rollups and aggregations for business users and specific use teams. This serves BI domain level teams. Now you are all set with data strategy. To consume data downstream, you need to think about efficient ways to run queries and use compute. Today there are two major factors which drive the need of cost optimization. The evolving global financial conditions in response to COVID-19 pandemic and the accelerated adoption of cloud. Since I’ve worked with customers directly I was in a well, I was in a position well placed to assist with effective use of existing tools and best practices on how to optimize cost.
没有银弹或下拉和警惕,你可以代入参数和得到一个完美的集群架构。
如果你的目标是分配适量的集群资源的工作。然后我们将需要了解不同类型的工作不同类型的集群资源的需求。
如果我们的目标是分配适量的集群大小的应用程序,重要的是要知道你的数据是如何被使用。每个用例需要不同的思考。
例如,如果你有一个用例,需要内存优化的实例。这些都是很好的应用程序,你想要运行机器学习工作负载,所以大部分都是迭代的,这意味着你需要一次又一次的相同的数据。所以缓存变成了一个非常重要的特性来运行机器学习算法更好的性能。计算优化的实例非常适合流媒体和ETL的用例。通常当我做流媒体总体而言,我在连续的基础上执行操作,而不是大数据集,我可能会添加时间戳或删除空值。但是我不想加入这些元素在一起。所以我不需要那么多内存。ETL,你需要做完整的文件扫描,但没有数据读取。大部分的工作负载和CPU绑定的,所以您可以使用这个选项C类。
对于存储优化工作负载,这是一个选项,有一个本地挂载磁盘。如果你要反复处理图像,这将是一个好一个。分析用例或临时查询,我们建议i3或存储优化集群。我们也有三角洲IO缓存选项,本地缓存数据,有利于重复读取的数据,所以我们不需要阅读和阅读一次又一次地从s3。
下一个问题你应该问,这份工作需要运行多快?我们可以加入更多的核心工作,但它可能不值得消费成本。
你应该记住实验是便宜。因此得到一个粗略的数量级是重要,但花时间努力完美的架构师或集群可能会推迟你沿着你的开发时间。您应该使用适当的节点的大小,我通常尽量保持一个好的快乐的媒介。所以当你有一个非常大的工作量,例如你选择一个节点的大小256字节的内存。这意味着你可能会有一个很大的JVM的垃圾收集是臀部,因此需要很长时间。当你有一个小的节点,然后你需要扩展更多的节点意味着有更少的内存泄漏。所以我选择64或128 gb内存给或使用范围。那么内存大小你应该选择取决于工作负载。最终的决定是一个基准,所以你应该开始。其次如果你需要考虑集群大小,你应该考虑你需要多少工人完成的工作。 And it depends on data volume, complexity of transformation, and eventually your application requirements. You can start with how many task you can create initially, which is correlated to the input data size.
一旦你开始一些工作负载运行,观察火花UI的行为,例如,火花UI中存储选项卡给你信息缓存,指示你是否有足够的内存。
有多少数据集的数据缓存在内存中,又有多少集缓存。这个信息可以帮助你。例如,如果您的数据集是完全缓存一些闲置的空间,你可以发现,从应用程序的存储选项卡。有机会让你减少工人数量。如果你不需要那么多的记忆。假设如果你几乎完全缓存,那么您可能需要增加集群的大小,以便你有足够的内存来运行工作。第三个甚至没有关闭缓存。如果您的数据集是超级大,而不是在内存中缓存,你可能想要选择缓存磁盘上,而不是在EBS上。你应该选择支持大量SLT的实例类型。所以我们可以缓存到磁盘上。 And when we retrieve data, it is much faster.
下一个是观察神经节指标和调整工作负载。Ganglia指标UI的综合度量工具砖。所以通过它你可以追踪重要的集群指标如CPU、内存和网络利用率。分析的工作量,你要确保你有足够的并行性和分区数据帧。核你给工作负载越多越好。如果火花应用程序写得很好,那么不存在瓶颈。你应该能够线性扩展。如果你的集群规模翻倍的话,那么运行时应减少一半。CPU使用率是在集群中的所有机器聚合。出于这个原因,你不希望你的使用率接近100%。 This would mean that extra work is being put on your driver. And you’re really stressing the driver in this case. For example, the good amount of maximum usage should be 80% on a cluster with five machines four being workers and one being driver. Let’s say if your workload is network bound, then you need to think about where are the big spikes, so you can use ganglia UI for big spikes. Green indicates that data is being read and blue indicates data being written out. For this use case, you can use big machines with better network throughput and i3 type with SSD backed instances so that you don’t have to do repeated remote puts. The memory pane on the top right describes the objects stored in memory for a given Spark application. So if you spill a ton, you can use more memory and i3 instances.
现在我们有数据,存储和计算算出。接下来出现的是我可以让我的应用程序运行得更快吗?
所以寻找这四个症状当运行工作负载。洗牌,泄漏、倾斜、小文件。和火花UI是你能做到的。
第一次洗牌,让我们看看洗牌。我这里有两个表航班和运营商。我的航班在哪里大数据集和运营商小数据集,这是我加入我的表。当我运行查询,28分钟才完成。让我们来看看这个SQL逻辑查询执行期间计划去看发生了什么事。所以我要找到我的工作,观察查询执行。
我要向下滚动到排序,合并,加入,你可以看到它输出大量的行。这可能是因为我们加入一个大桌子小桌子。如果我滚动多一点,我也可以观察到有一个泄漏的大小,这是一个巨大的泄漏的大小。所以改善,你可以利用联合优化。所以你如何做优化,广播较小数量的执行人我们洗牌在加入过程中不必承担。然后你想要检查你的连接顺序。这是理想首先加入最小的表,和工作的大的。现在一旦我们因素这个元素的查询需要一点八分钟。和查看SQL计划引发UI中,我们可以看到,广播改善了洗牌,现在它已在更多更快的完成时间。现在我们要看看是什么排序的结果,合并、连接。 It’s around 1000 rows output, which is a significant improvement from the previous value.
下一个是泄漏。所以当数据无法装入内存,磁盘泄漏可能主导整体性能。因为默认配置分配CPU核心/火花的任务之一。这可能导致火花的工作的情况下不使用所有的CPU资源分配给他们。因此,整个集群CPU利用率仍然很低,即使在高峰调度条件。同样的内存根据输入数据和洗牌大小的工作可能不会充分利用其保留内存。这不是明显的发现,但是您可以利用SQL计划在最有益的方式。这里显示了大量泄漏,当我洗牌分区设置为16。
所以我的方法是增加分区48,减少核心执行程序可以使用的数量。
右边你可以看到我的法术大小减少这样的调整和几乎为零。所以更多的泄漏可以删除更大的影响。
现在你可能会想,对于您的应用程序,如果你现在找到一个倾斜。因此数据倾斜的条件是一个表的数据分区中集群分布是不均匀的。数据倾斜会严重降低性能的查询,特别是那些与连接。所以如果你加入大表需要洗牌的数据,和倾斜会导致一个极端不平衡的不平衡集群。所以你能做的就是观察你的CPU使用量使用Ganglia UI。所以在我的图,你可以看到,使用后成为低初始峰值。很有用的另一个标准是看火花UI的阶段,我右边显示。所以看任务的持续时间,有显著性差异的价值最大的25百分位和75百分位值。另一个指标是输入大小和记录也明显不同。为了帮助实现这一目的,您可以使用广播连接。 Sparks SQL accepts cue joins in queries. So with the information from these hints, Spark can construct a better query plan one that does not suffer from data skew. You can always play around with other settings which are already partitioning or your salt keys.
这么多年来,一直有一个广泛的和持续努力提高SQL查询优化器的火花。和各种改进之一是成本优化框架。自适应查询执行是解决这些问题通过优化和调整查询计划基于运行时统计数据。它可以减少手工调优火花洗牌分区的努力,动态改变排序,合并、连接到broadcast-hash连接,也能够处理倾斜连接。这火花查询执行是我们的最新版本中可用7点X和火花三个点o .火花峰会也有不同的说话,你可能想看如果你有兴趣学习更多。
为了解决小文件问题,让我们看看我们把场景和解决方案。所以我要讲一个例子,一个媒体客户我密切合作。他们接近每秒500000实时数据请求的集群。所以让很多url每秒钟的倾倒s3对于特定时间间隔产生了大量小文件的问题。我们花了两步骤方法来解决这个问题。我们设法处理这些大量的小文件,而不是一群苦味剂直接写s3,他们派了url运动流。消除小文件的生成。现在所有的数据流,这将导致更有效地利用火星资源。而不是缓存或持久化数据在集群上,他们是直接写火花铺桌子。然而,这导致了另一个问题是与拼花表,他们最终写很多文件表。 The problem with it is continuous append on the table is too slow. And if one job is updating the table, another one cannot query the table. So second stop was solving this challenge using Delta Table. Delta supports asset transactions which basically means they were able to concurrently read and write this table. It is also very efficient with continuous append. And the table and Data Lake serve both as a batch table as well as streaming source and sink. While we are at it, let me cover a few more performance options with data.
首先是压实,所以如果你连续写入数据到三角洲表在一段时间内,它积累大量的文件。特别是如果你在小批量添加数据,这可以在表读取的效率有不利影响,而且还会影响您的文件系统的性能。理想情况下,大量的小文件应该改写成一个小数量的大文件,定期。这就是所谓的压实,你可以紧凑表通过实现一个小数量的文件。
第二个是自动优化。这包括两个免费功能优化和自动压实写道。它可以在δ如果你运行数据砖。与优化写道,砖动态优化的火花分区大小根据实际数据和返回的数据的吞吐量最大化。对于汽车压实后一个人写,砖检查文件可以进一步压缩,它会运行一个快速优化工作进一步压缩文件分区,小文件仍然存在。
z值技术相关信息在同一个地点协同工作在同一组文件。这co-locality自动使用砖,三角洲,跳过算法的数据。所以这次它将显著地减少需要读取的数据量。您需要指定z值数据查询的列顺序z值。这方面的一个用例的是时间敏感的请求从GDPR新兴和CCPA法律。和z值可以是有益的,因为需要删除键上的数据有助于加快当地的要求记录和有效地重写他们的拼花的文件。
所以你有数据、存储、计算和操作效率。对于每个公司,特别是公司的数据,这是非常重要的治理解决方案规模和安全可靠地运行。最近出现的一个用例的组织是GDPR CCPA遵从性。让我们来谈谈三角洲如何帮助。三角洲和性能特性我们谈论之前的幻灯片。可以大大简化和加速你的能力来定位和删除个人信息,以应对消费者GDPR和CCPA请求。默认情况下,三角洲湖表历史保留30天,使其可用于其他选项,如时间旅行和回滚。但是如果你不介意,GDPR和合规要求仍然记录不可用。默认的保持期之前。您可以执行删除和使用真空函数删除文件。 Once you have removed the table history using the vacuum command, all users will lose the ability to view that history and rollback.
另一个一般的最佳实践尤其是GDPR是如果你的原始表包含关于客户的个人可识别信息。PII PII分开列成和非表。你也可以匿名记录使用SHA算法为连接到一个查找表。所以限制PII表访问和使用非PII表在你向上下游和其他的表。除了将这些最佳实践应用到三角洲湖,建议设置一个保留政策blob存储30天或更少,所以你不需要在最后一刻最终寻找数据。所以,如果你想更详细地了解这个用例。我们也有我们的技术讨论和参考的链接部分可用。
其他审计和监测的最佳实践是使用集群的标签,这样你就可以努力为不同的用户和部门退款。您可以使用生成的审计日志数据砖。定期监控你DBU使用意识和峰值。为了了解您使用的是什么。δ应利用事务日志,因为它捕获的所有执行的操作的时间戳信息,执行事务的人,等等。所以你可以利用审计。
数据块管道被不同的层在你的组织中,管理角色和职责的访问以及管理的使用是必须的。你应该实现细粒度的用户执行访问和控制。考虑控制给在存储层。您可以管理铭文应用ie和统治政策的数据存储。总是有最低水平是一个很好的实践需要为每个用户许可。
把它在一起。这是一个参考管道从我的一个客户。他们开始从很小的一步,有效地利用数据旅程的每一步中构建一个可伸缩的管道。这是每个组件适合在一起,在他们的整个数据体系结构。
有一个好的数据策略。
利用设计模式,我们前面所讨论的,自动化、性能优化和构建执行管道。最后你可以安全和治理控制,并将其绑定到一起的业务价值。希望我共享的经验教训和最佳实践可以有利于你的砖和数据的旅程。
谢谢你!
要提到你的反馈是非常重要的,所以请我们的会话。
砖
Vini贾斯瓦尔是一个高级开发人员提倡在砖,在那里她可以帮助数据专业人员成功地建立在砖和开源技术像Apache火花,δ,MLflow。bob下载地址她有着丰富的工作经验和独角兽,数字原生代的财富500强企业协助数据和AI用例的成功实现内部的生产规模和云部署。Vini还作为数据科学工程主管在花旗的企业运营和技术集团和西南航空公司实习作为数据分析师。她拥有一个女士在信息技术和管理从德克萨斯大学达拉斯。