使Apache火花™
更好地与三角洲湖
想看而不是读?看看这个视频在这里。
数据湖的承诺
Michael时常要:
今天我超级兴奋,谈论如何使Apache火花更好使用三角洲湖。然而,在我进入之前,我想先讨论这个概念数据湖和为什么这么多人感到兴奋,为什么有很多的挑战当他们试图设置这些东西。
所以,首先,什么是数据湖,我这是什么意思?所以,三角洲湖的承诺基本上是这样,组织有很多的数据。这可能是精心策划客户数据在OLTP系统。可能是原始的点击流来自您的web服务器,或者非结构化数据来自一群传感器。
湖和承诺的一个数据是,你可以把所有数据并将它的湖。这是真的强大当你比较传统的数据库。因为在传统的数据库中,你必须首先提出一个模式和做清洁。这通常被称为schema-on-write。
湖和一个数据允许您做的是它可以让你放弃这一过程就开始通过收集一切。因为有时你不知道为什么直到很久以后数据是有价值的。如果你还没有存储它,那么你已经失去了它。所以,湖的数据只是一堆文件在文件系统中。它可能是S3或者HDFS, Azure Blob存储。你可以抛弃一切,然后再回来看看。
和我们的想法是当你完成,一旦你收集了这一切,然后你可以得到的见解。你可以做数据科学和机器学习。您可以构建强大的工具为您的业务,如推荐引擎或欺诈检测算法。你甚至可以做疯狂的事情就像使用基因组学和DNA测序治愈癌症。
然而,这个故事我看过很多次。通常,发生的是,不幸的是,一开始的数据是垃圾。所以,你的数据存储在你的数据湖是垃圾。结果,得到垃圾从这些更高级的过程,你要做的。
挑战与数据湖
为什么会这样呢?为什么这么难得到质量和可靠性这些数据的湖泊和这典型项目看起来像什么呢?我想介绍一个故事,我看过一遍又一遍地发生,在许多组织中,当他们坐下来,试图从数据中提取的见解。它通常是这样的。这是今天被认为是先进的,但在三角洲湖。
很常见的模式是你有一连串的事件进入一些系统像Apache卡夫卡。你的任务是做两件事,你需要做流媒体分析,这样你就可以实时知道发生了什么在您的业务。你也想做人工智能和报告,您可以看看更长一段时间,进行纵向分析,实际上看看历史和趋势,并对未来做出预测。
所以,我们要怎么做呢?第一步,我坐在我的电脑。我知道火花很好的阅读api从Apache卡夫卡。您可以使用数据帧,数据集和SQL和SQL过程和做聚合引发和时间窗口和各种各样的东西,拿出你的流分析。
所以,我们开始了蝙蝠,它工作得很好。但是这给我们带来了挑战第一,这是历史查询。获取实时分析卡夫卡是伟大的,但它只能存储一天或一周的数据。你不想被存储在卡夫卡年复一年的数据。因此,我们可以解决这个问题。实时很适合此时此刻发生的事情,但这是不擅长寻找历史趋势。
所以,我一直在阅读大量的博客文章。这里很常见的模式发生是有这个东西叫做λ架构,,据我所知,基本上是你只是尽两次。你有一个实时的事情做一个近似和给你此时此刻到底发生了些什么。你有另一个管道,也许更多的策划,并运行更慢。但它是湖归档所有的数据到你的数据。所以,这是第一步。所以,如果我们想要解决这一历史查询问题,我们也要设置λ架构之上的香草Apache火花。
一旦我有所有数据在数据湖,我们的想法是,现在我可以运行的SQL查询。我可以做人工智能和报告。这是一个额外的工作和一些额外的协调。但幸运的是,引发了一个统一的API,用于批处理和流。因此,它是可能的,你可以设置。
但这给我们带来了挑战。就像我之前说的,现实世界中的数据往往是混乱的。一些团队上游从你的变化模式,没有告诉你,现在你有问题。所以,一个模式,我看到的是您需要添加验证。所以,你需要编写额外的火花SQL的检查程序,以确保你的假设是正确的数据。如果他们错了,发送了一封电子邮件,这样你就可以改正它。
当然,因为我们所做的λ架构,我们必须做验证在两个不同的地方。但是,这是我们能做的东西。我们可以用火花。所以,现在我们设置验证,他们处理混乱的数据。第三,不幸的是给我们带来了挑战,这是错误和失败。
这些验证是伟大的,但有时你忘了把一个地方或在代码中有一个bug,或者更加困难,如果你的代码只是崩溃EZ2上运行的中间,因为你和你的现货情况下死亡。现在你需要担心清洗。真正的问题与使用这些类型的分布式系统和分布式文件系统,如果一份工作崩溃在中间,这意味着垃圾需要清理结果。因此,你不得不做所有自己推理的正确性。这个系统不是给你很多帮助。
很常见的模式是人,而不是致力于整个表,因为如果出现问题,我们需要再计算整个表,他们会把它分成分区。所以,你有一个不同的文件夹。每个文件夹的商店一天或一个小时,一个星期无论对你的用例粒度是有意义的。你可以建造很多脚本,以便我做阅读很容易计算。
所以,如果其中一个分区由于任何原因被损坏,是否它是一个错误在我的代码或失败只是一份工作,我可以删除整个目录和再加工,从头开始一个分区的数据。因此,通过构建这个分区和后处理引擎,现在我可以处理这些错误和失败。有一点额外的代码编写,但现在我可以睡平安知道这是去工作。
不过,这给我们带来了挑战4号。更新。很难做点更新。很容易添加数据,但很难改变数据在数据湖和正确。你可能需要这样做原因GDPR。你可能需要做保留。你可能不得不做匿名化,或者其他的事情,或你可能会有错误的数据。所以,现在你必须写一个不同的群体,他们的火花工作做更新和合并,因为这可以是非常困难的。
通常,因为它是如此困难,我看到人们做的是而不是做单独的更新,这将是非常便宜的,他们实际上只是当他们需要做些什么,只要他们得到一组安全域每月一次,他们会复制整个表,删除的人由于GDPR要求被遗忘。他们可以这样做,但这是另一个火花工作运行,非常昂贵。
和这里有微妙,额外的困难,那就是,如果你有人阅读时修改一个表生成一个报告,他们将会看到不一致的结果,报告将是错误的。所以,你需要非常小心安排,避免冲突,当你执行这些修改。但这些都是问题,人们可以解决。这个晚上,你白天运行您的报告。所以,现在我们有一个机制来做更新。
但是,这里的问题是这已经变得很复杂。这意味着你在浪费大量的时间和金钱解决系统问题,而不是做你真正想要做的,就是从数据中提取价值。我看这是这些数据的干扰湖实际上阻止你完成你的工作。
和总结我认为这些是什么,一个大的原子性。当您运行一个分布式计算,如果工作失败在中间,你还有一些部分结果。这不是全有或全无。原子性意味着当一个工作运行时,它完全正确地完成或如果发生错误,它完全回滚,什么也不会发生。所以,你不再离开你的数据在一个腐败的国家需要沉闷地建立这些工具执行手动恢复。
另一个关键问题是没有质量的执行。由你在每个工作手工检查的数据的质量。再一次,这是你所有的假设。没有像不变量的帮助系统在传统的数据库,你可以说,“不,这列是必需的或这一定是这种类型的模式。“所有的东西留给你的程序员来处理。
最后,没有控制的一致性或隔离。这意味着你可以只做一个湖正确操作任何数据表。和使它很难混流和批处理或做操作人们阅读。这些都是你希望从你的数据存储系统。你会希望能够做这些事情,人们应该能够看到自动一致的快照。
解决这些挑战与三角洲湖
现在让我们退后一步,看看这个过程看起来与三角洲湖。和三角洲湖的想法是我们把这个相对复杂的体系结构,在很多的正确性和其他东西都留给你手工编写火花程序和我们改变它,这样,你只考虑数据流,你把所有的数据从您的组织和流程通过不断改进,直到它准备消费质量。
和这个架构的特点是首先,三角洲湖给Apache火花带来完整的ACID事务。运行的,这意味着每一个火花工作将完成整个工作或什么都没有。的人阅读和写作的同时保证一致的快照。当写出的东西,它绝对是写出它不会丢失。这些都是酸的特点。这允许你关注实际的数据流,而不是思考所有这些额外的系统问题和解决这事一遍又一遍。
三角洲湖的另一个关键方面是它是基于开放标准,它是开源的。bob下载地址所以,这是一个完整的Apache许可证。没有愚蠢的常见条款或类似的东西。你可以把它和使用它为任何你想要的应用程序完全免费的。,就我个人而言,这将是非常重要的,如果我是存储海量数据。数据有很大的重力。有很多的惯性,当你收集大量的数据。我想把它放在一些黑盒,这对我来说是非常困难的提取。
这意味着您可以存储大量的数据而不用担心质量锁定。所以,它是开源的,但它也是基于bob下载地址开放标准。所以,我将更详细地讨论这个在说话。但在封面,δ在拼花实际上是存储你的数据。所以,你可以阅读它与其他引擎。三角洲湖周围有越来越多的社区建设这个原生支持。
但是,最糟糕的情况,如果你决定你想离开三角洲湖,所有您需要做的就是删除事务日志,它就变成了一个正常的拼花表。最后,三角洲湖深深由Apache火花。这意味着,如果你有现有火花工作,无论是流或批处理,您可以很容易地转换得到各种好处的三角洲,而无需从头重写这些项目。和我要谈的到底是什么,看起来就像在说话。
三角洲湖架构:青铜、白银和黄金表
但是现在,我想把这张照片和简化一点谈论一些其他的特点我看到三角洲湖架构的,我见过的人是非常成功的。
所以,首先,我想在这个区域的数据质量水平。这些都不是三角洲湖的基本东西。我认为这些都是人们使用各种系统。但我看到人们非常成功,这一模式与三角洲的特点。所以,这些只是数据质量的一般类。这里的想法是把数据转换成三角洲湖,而不是试图使它完美的一次,你要逐步提高数据的质量直到准备消费。和我将讨论为什么我认为这其实是一个非常强大的模式,可以帮助你更有效率。
所以,从一开始就是你的青铜级别的数据。这是一个原始数据的倾倒场所。它仍然是着火了。实际上,我认为这是一件好事。因为这里的核心思想是,如果你抓住一切没有做很多绿豆或解析,没有办法,您可以在解析和绿豆代码错误。你让一切从头开始。实际上,您通常可以保持一年值得保留。我会说一下为什么我认为这是非常重要的。
但这意味着您可以收集一切。你不需要花很多时间提前决定哪些数据是宝贵的数据没有什么。你可以弄清楚,当你做分析。
从青铜继续,我们继续银级数据。这是还没有准备好数据消费。这不是一个报告,你要给你的CEO。但是我已经做了一些清洁。我过滤掉一个特定事件类型。我解析JSON并给它一个更好的模式。或者我加入增强不同的数据集。他们有我想要的所有信息在一个地方。
你可能会问,如果这个数据并不准备消费,我为什么要花时间创建一个表来实现它。实际上有两种不同的原因。一是,通常,这些中间结果有用的很多人在你的组织。通过创建这些银水平表,你在你的领域知识和清理数据,你让他们受益于自动,而不必自己做这工作。
但更有趣和更微妙的一点是它还可以帮助调试。当有一个错误在我的最终报告,能够查询这些中间结果是非常强大的,因为我可以看到哪些数据产生那些坏结果,看的管道是有意义的。这是一个好的理由有多个跳在你的管道。
最后,我们进入黄金类的数据。这是干净的数据。这是准备消费。实际上这些业务水平总量,谈论如何运行和如何工作和这几乎是准备一份报告。
在这里,您开始使用各种不同的引擎。所以,就像我说的,三角洲湖与火花已经很好。还有很多兴趣添加支持很快和别人。所以,你可以做你的流分析和人工智能和报告。
在三角洲湖流和批处理
所以,现在我想谈谈人们如何通过三角洲湖移动数据,通过这些不同的质量类。的一个模式,我看到一次又一次,流媒体实际上是一个非常强大的概念。在我走得深流之前,我想正确的一些误解,我经常听到。
所以,一件事,人们通常认为当他们听到流,他们认为这是超级快。它必须是非常复杂,因为你想要非常快。和火花确实支持模式,如果你的应用程序。有连续处理,你不断地把新数据的服务器,坚持核心支持毫秒延迟。
但这不是唯一的应用,流媒体是有意义的。流对我是真正关于增量计算。它是关于一个查询,我想持续运行新数据到来。而不是思考这一堆离散的工作,把所有的这些离散的管理工作,我有一些工作流引擎,流,带走了。
你写一个查询一次,你说“我想从青铜读取表,我想做这些操作。我要写在银表,“你只是不断运行它。你不用考虑复杂的日期什么是新的,什么数据已经处理,如何处理数据和提交下游以事务的方式,我如何检查点状态如果工作崩溃和重启,我不要失去在流。结构化流为您处理所有这些问题。
而不是更复杂,我认为这可以简化你的数据架构。和流媒体在Apache火花确实有这很好的权衡成本延迟,你可以调整。因此,在远端,您可以使用连续处理模式。你可以抓住那些核心流持续和你可以得到毫秒延迟。
在中间区域,您可以使用一个微批。微批处理的优点是你可以有许多小溪在集群上和他们的时间多路复用这些核心。所以,你运行一个非常快速的工作,然后你放弃核心然后别人进来,并运行它。这样,你可以秒到几分钟延迟。对很多人来说这是一个甜点,因为很难知道什么是最新的在最后一分钟,但你介意这是最后一个小时内。
最后,还有这个东西叫trigger-once结构化流模式。所以,如果你有工作,数据只到一天一次或每周或每月一次,它没有任何意义,集群启动并运行,特别是如果你在云中运行,你可以放弃并停止支付。
和结构化流实际上有一个功能这个用例。基本上和它叫做trigger-once不断而不是运行作业,随时新数据到来时,你启动它,你说触发一次,它读取任何新的数据到达时,下游流程,提交事务,并关闭。因此,这可以给你流的好处,便于协调,没有任何相关的成本通常总是运行集群。
当然,移动数据流并不是唯一的方法通过三角洲湖。批处理作业是非常重要的。就像我之前提到的,你可能已经GDPR,或者你需要这些修正。你可能改变了数据捕获来自其他系统,你有一组更新来自你经营商店。你只是想反映,在三角洲湖。,为此,我们更新插入。当然,我们也支持标准的插入和删除,这些命令。
所以,真正的优点三角洲湖是支持这两种模式,您可以使用合适的工具,正确的工作。你可以无缝混合流和批而不用担心正确性或协调。
和最后一个模式在这里,我想谈谈这是重新计算的想法。所以,当你有这种早期表让你所有的原始结果,当你有很长时间保留,所以年的原始数据。
和当你使用流在不同的节点之间的三角洲湖数据图,很容易为你重新计算。你可能会想要重新计算,因为在代码中有一个bug,或者你可能想要重新计算,因为有一些新东西,你已经决定你想提取。这里真的很不错,因为,流的工作方式,这是非常简单。
所以,只是给你一个心智模型在Apache火花结构化流是如何工作的,我们的模型主要有流查询应该总是返回相同的批处理查询的结果相同数量的数据。所以,这意味着当你开始一个新的流对三角洲表,它开始通过快照的表目前流启动。
和你这样做回填操作过程中所有的数据快照,打破它分成小块,检查点状态,下游提交它。当你得到的快照,我们切换到尾矿事务日志,只处理新数据查询开始以来已经到来。,这意味着你会得到同样的结果,好像你有运行查询最后不管怎样,但随着工作显著低于运行它从头一遍又一遍又一遍。
所以,如果你想重新计算在这种模式下,所有你需要做的就是清除下游表,创建一个新的检查点,并重新开始。和它会自动过程从一开始的时间和今天赶上我们。所以,这是一个强大的模式,纠正错误和做其他事情。
三角洲湖客户用例
所以,现在我们已经在高水平,我想谈谈一些特定的用例,三角洲湖方面降低成本和使用Apache的管理引发这些湖泊三角洲之上。
所以,三角洲湖,我想给一点历史。三角洲湖是几岁。我们以前在过去两年的砖作为一个专有的解决方案。我们有我们的一些大客户使用它。我特别是谈论Comcast,而且防暴游戏,果酱和英伟达的城市,一群大的名字,你知道的。他们已经使用了许多年。
大约两个月前,在火花峰会上,我们决定开源,大家甚至人on-prem或者在其他地方可以获得三角洲湖的力量。bob下载地址
康卡斯特公司
所以,我想谈谈一个特定的用例,我觉得真的很酷。这是康卡斯特。他们的问题是他们有世界各地的机顶盒。为了了解人们与他们交互编程,他们需要sessionize这个信息。所以,你看这个电视节目,你换频道,你到这里,你回到另一个电视节目。这样,他们可以创造更好的内容通过了解人们如何使用它。
你可以想象,康卡斯特有很多用户。所以,pb的数据。在三角洲湖之前,他们运行这个Apache火花。这个问题是引发工作sessionization太大,火花调度器会翻倒。
因此,而不是运行一个工作,他们实际所需要做的就是他们不得不接受这个工作,分区用户ID。所以,他们的用户ID,散列。他们国防部它,我认为,10。所以,他们把它成10份不同的工作。然后他们独立运行的工作。
这意味着有10倍的开销方面的协调。您需要确保这些都是跑步。你需要支付所有的实例。你需要处理失败和十倍的工作。这是很复杂的。和很酷的故事这个三角洲是他们能够开关切换很多这些类型的手工流程流。和他们能够大大降低成本通过把下来到一份工作中1/10的硬件上运行。现在计算同样的事情,但10倍减少开销和10倍的成本。
所以,这是一个很强大的东西,三角洲的可扩展的元数据能使Apache火花。我将谈谈如何说话,所有的作品。但在我进入之前,我想告诉你到底是多么容易开始如果你已经使用Apache与三角洲湖火花。
所以,开始是微不足道的。所以,你发表在火花包。所有您需要做的火花集群上安装三角洲湖是使用火花包。所以,如果你正在使用pySpark,你可以做冲刺,冲刺包。然后δ,如果您正在使用火花壳,同样的事情。如果您正在构建一个Java或Scala jar,和你想要取决于三角洲,所有您需要做的就是添加一个Maven的依赖。
然后修改代码也同样简单。如果您正在使用的数据帧的读者和作家火花SQL,所有您需要做的就是更改数据源从拼花,或JSON或CSV或其他使用今天三角洲。和其他所有的事情应该是一样的。唯一的区别是现在一切都将可伸缩和事务,这正如我们之前看到的可能是非常强大的。
到目前为止我已经讲过的一切主要是这些类型的系统问题的正确性。如果我的工作崩溃了,我不想让它腐败的桌子上。如果两个人写表在同一时间,我希望他们都看到一致的快照。但实际上数据质量是更多。您可以编写代码,运行正确,但是可以有一个错误在代码中并得到错误的答案。
这就是为什么我们扩大数据质量的概念允许您以声明的方式谈论质量约束。这是工作在接下来的季度。但是这里的想法是我们让你,在一个地方,指定的布局和约束三角洲湖。所以,你知道第一个我们可以看到一些重要的数据在哪里之类的东西。存储,您可以选择打开检查严格的模式。
三角洲湖有两种不同的模式。我经常看到人们使用他们作为他们穿过数据质量的旅程。在前面的表,您将使用一个模式并打印,也许你刚读了一堆JSON和把它完全像三角洲湖。我们这里有很好的工具将自动执行安全模式迁移。
所以,如果你写数据到三角洲湖,你可以打开合并模式标志,它就会自动添加新列中的数据表,以便你可以捕捉一切没有花很多时间写DDL。
我们当然也支持标准的严格模式检查,你说,创建一个表的模式,拒绝任何不匹配的数据模式。你可以使用alter table改变表的模式。经常,我看到这个使用道路和黄金级别表,你真正想要严格执行的。
最后,你可以在蜂巢metastore注册表,支持快到了。也把人类可读的描述,所以人们来此表可以看到这个数据来自源和解析。这是属于这个团队。这种额外的人类信息,您可以使用它们来了解数据会让你你想要的答案。
最后,我最兴奋的特点是这一概念的期望。一个期望允许你把你的数据质量的概念和实际编码成系统。所以,你可以这样说,例如,在这里,我说我希望这个表有一个有效的时间戳。我能说什么是一个有效的时间戳对我和对我的组织。
所以,我希望时间戳。我希望它发生在2012年之后,因为我的组织在2012年开始。所以,如果你看到资料说1970由于深人错误,我们知道这是错误的,我们要拒绝它。所以,这非常类似于那些熟悉的传统的数据库。这听起来很像一个变量,你可以把not null或其他东西放在桌子上。
但是有一个微妙的区别。不变量的想法是,你可以说事情表。如果违反了其中的一个不变量,该事务将自动中止,并将失败。
我认为大数据的问题,为什么不变量本身是不够的,如果你停止加工,每一次你看到一些意想不到的,尤其是在那些早期的青铜表,你永远不会处理任何事情。这真的可以伤害你的敏捷性。
所以,最酷的期望是我们实际上有一个可调的严重性。这不能阻止我们做支持,你可能想要使用的表上你的财务部门使用,因为你不希望他们看到的东西是不正确的。但是我们也有这类较弱的东西,您可以监视有多少记录是有效的和有多少未能解析和警告阈值。
甚至更强大,我们有这个概念的数据隔离,你可以说,任何记录,不符合我的期望不填充管道,但也不能让它通过。检疫在这里,另一个表,所以我可以过来看后,决定我需要做些什么来纠正这种情况。所以,这允许您继续处理,但是没有腐蚀下游结果无效的记录。
所以,就像我说的,这是一个功能,我们现在积极工作。请继续关注GitHub的更多的工作。我认为这从根本上改变你的思维方式,对数据质量与Apache火花和三角洲湖。
现在,他们一直在高水平的三角洲是什么,你为什么要关心它吗?我想进入的细节细节δ实际上是如何运作的。因为它听起来几乎好得令人难以置信,我们可以将这些完整的ACID事务到像Apache火花和分布式系统仍然保持良好的性能。
首先,我们先来看看一个增量表看起来像当它实际上是存储在磁盘上。的你,有一个三角洲湖,这应该很熟悉。它只是一个目录文件系统存储在S3, HDFS, Azure Blob存储,abl。它只是一个目录和一帮铺文件。
还有一个额外的一点,是非常重要的。这是我们商店这个事务日志。事务日志里面,都有不同的表版本。和我将谈一谈这些表版本。但我们仍然将数据存储在分区目录。然而,这实际上是主要用于调试。他们也三角洲模式,我们可以直接与存储系统以最优的方式。
例如,在S3中,他们建议如果你要写大量的数据定期而不是创建日期分区,创建热点的时间局部性。相反,你随机散列分区因为δ的元数据的力量,我们也可以这样做。最后,编码标准数据文件,这只是正常的拼花可以读取文件,任何系统。
所以,实际上在这些表的版本是什么?我们如何思考一个表的当前状态是什么吗?所以,每一个表的版本有一组操作,适用于表,并以某种方式改变它。此刻,一个表的当前状态的结果所有这些行动的总和。所以,什么样的行动,我在说什么?
对于一个例子,我们可以改变的元数据。所以,我们可以说这是表的名称,这是表的模式,您可以添加一个列到表或东西,你可以设置表的分区。所以你可以采取什么行动来改变元数据。
另一个行为是添加一个文件和删除文件。所以,我们写出一个拼花文件。然后让它可见表中,它也需要被添加到事务日志。和我将讨论为什么额外的间接层是一个非常强大的技巧。另一个细节是,当我们将文件添加到三角洲,我们可以让很多可选的统计数据。
在一些版本,我们可以保持每一列的最大和最小值,我们可以用它来做数据跳过或快速计算聚合值在桌子上方。最后,你也可以从表中删除数据通过删除文件。再一次,这是一个懒散的操作。这种级别的间接真的很强大。当我们从表中删除一个文件时,我们不一定立即删除这些数据,允许我们做其他很酷的东西,比如说时间旅行。
所以,所有这些事情的结果在这里是你最终与当前元数据,文件的列表,然后还有一些细节的列表已经提交的事务,我们在协议版本。
如何让我们得到酸得到这些漂亮的事务数据库的属性?这里的一个细节是,当我们创建这些表版本,我们将它们存储有序原子单元称为提交。所以,我之前谈过这个问题。我们创建表的版本0通过创建这个文件,0. json。这里的想法是,当三角洲构造该文件在文件系统中,我们将使用基本原子原语。
在S3,为了保证原子性,所有你需要做的就是上传系统。他们这样做的方式是你开始你的上传,说我希望上传这么多字节。实际上除非你成功上传,许多字节,S3不接受的权利。所以,你保证在7月得到整个文件或所有的文件。
另一个系统是Azure或HDFS。我们要做的是我们将创建一个临时文件的全部内容。然后我们会做一个原子重命名,这样整个文件创建。然后你可以有连续的版本。所以,在一个版本中,我们增加了这两个文件,抱歉,在零版本中,我们增加了这两个文件。在一个版本中,我们删除它们,把第三。举个例子,你在这里可以做压实,你自动地把这两个文件并压缩成一个大文件。
现在,另一个重要的细节是,我们要为每一个提交添加原子性,但是我们也希望可串行性。我们想要每个人都同意的变化稳定,我们可以正确地做事情像并入变化数据捕获和其他东西需要这个属性。
所以,为了达成这些变化即使有多个作者,我们需要这个属性称为互斥。如果两个人试图创建一个增量的相同版本表,只有一个人能成功。所以,为了清楚地说明这一点,用户可以编写版本表的零。用户可以写两个版本。但如果他们都试着写两个版本,其中一个可以成功,但另一个必须得到一个错误消息说,“对不起,您的交易没有通过。”
现在你可能会说,“等一下。但如果两个人做,失败。这听起来像我浪费了大量的时间和大量的工作。这对我来说听起来像很多复杂性。“不幸的是,这就是我们用第三个酷技巧叫做乐观并发。和乐观并发的想法是对表执行一个操作时,你要乐观地认为它会工作。如果你有一个冲突,你就看看冲突问题。如果没有,你可以乐观地再试一次。
然后在大多数情况下,实际的交易不重叠,你可以自动修复。所以,给你一个具体的例子,假设有两个用户,这些用户都是涌向相同的表。
所以,当他们开始他们的流吧,他们开始通过阅读的版本表在那一刻。他们都读版本0。他们读表的模式中。因此,他们确保他们的数据添加正确的格式。然后写一些数据文件流的内容将被记录在这批处理。他们记录是什么从表中读取和写入。
现在,他们都试图提交。在这种情况下,用户一个赢得比赛和用户两个失去。但用户两个要做的是他们会查看是否有变化。因为他们唯一了解表的模式,模式没有改变,他们允许自动再试一次。这是隐藏在您的开发人员。这些都是自动进行的。所以,他们会尝试提交和他们会成功。
现在,最后一个技巧,我们这里是表可以有大量的元数据。和那些试图把数以百万计的分区放在蜂巢metastore可能是熟悉这个问题。一旦这些数据大小、元数据本身可以带来系统的东西。
所以,我们有一个诀窍,其实我们已经有了一个分布式处理系统能够处理大量的数据,我们将只使用火花。所以,我们组的事务日志的采取行动,我们读与火花,我们可以编码在拼花作为一个检查点。一个检查点基本上是整个表在一些版本的状态。
所以,当你正在读事务日志,而不是阅读整个事务日志,你可以从一个检查站,然后任何后续之后发生了变化。然后这本身可以处理火花。
所以,当你走到一个大表,有数以百万计的文件,和你问的问题,有多少记录昨天说,我们要做的是我们将运行两种不同的火花工作。第一个宇航员是元数据和昨天说哪些文件是相关的。它会回来的文件列表,然后您将运行另一个火花实际上的工作流程并计数。
在两个阶段通过这样做,我们可以大大减少需要处理的数据量。我们只看与查询相关的文件。我们将使用火花过滤。
所以,在我们去之前的问题,我想谈谈路线图。就像我说的,虽然这个项目已经有几年了,只是最近开源的。bob下载地址我们有一个非常令人兴奋的今年余下的路线图。基本上,我们的目标是完全开源三角洲湖项目的API兼容是什么砖内bob下载地址可用。所以,其余的路线图季度基本上是开源很多很酷的功能。
所以,实际上我们几周前0.2.0发布版本,添加支持阅读从S3和阅读从Azure Blob存储和Azure三角洲湖。本月,我们打算做一个0.3.0释放,将添加Scala api更新,删除、合并和真空。和Python api将在不久之后。然后剩下的这个季度,我们有几件事情我们的计划。我们想要添加完整的DDL支持。这就是创建表和修改表。
我们也想给你的能力来存储蜂巢metastore三角洲表,我认为这是非常重要的数据发现在不同的组织。我们想把这些DML命令之前的更新、删除和合并实际上钩到火花SQL解析器。因此,您可以使用标准的SQL执行这些操作。
然后向前,让我们知道你想要什么。所以,如果你感兴趣,我建议你在Delta.io查看我们的网站。它有一个高水平项目的概述。有一个快速的入门指南如何开始。和它也有GitHub的链接,你可以看,看看我们的路线图是什么进展并提交自己的问题你认为这个项目应该去的地方。
所以,我肯定鼓励你这么做。但是,我认为我们将问题。所以,我先把这些,看看我们有什么。
问答
Michael时常要:
三角洲湖增加性能开销吗?
我想要打破它。所以,首先,三角洲湖被设计成一个高吞吐量的系统。所以,每个操作,有一点表演它的开销。所以,你基本上因为而不是写文件,我们还需要写出文件和事务日志写出来。所以,这增加了几秒钟火花的工作。
现在,重要的是我们设计了三角洲是大规模并行和高吞吐量。所以,你找几秒钟添加到您的火花工作。但这主要是独立于火花的大小工作。所以,三角洲湖是真的,真正擅长的是摄取数万亿的记录数据或pb的数据或字节的数据。不擅长什么数据插入个人记录。如果你运行一个记录每火花工作,会有很大的开销。
诀窍是你想用δ的火花最意义的地方,这是相对较大的工作分散在很多机器。在这些情况下,开销可以忽略不计。
因为它有酸性质,将我的系统高可用性?
三角洲,再一次,这是专门利用云计算和利用这些好的特性。
所以,对我来说,有几个不错的云的属性。一个是云很可伸缩。你可以把大量的数据到S3和任意只是处理它。通常漂亮的高可用性。所以,你总是可以从S3读取数据,不管你在哪里。如果你真的,真的在乎,甚至还有诸如复制,你可以复制数据到多个地区。和δ扮演得很好。所以,阅读从三角洲表应该非常高可用性,因为它只是底层存储系统的可用性。
现在,那些熟悉的上限定理可能会说,但是等等,所以对于权利当我们考虑一致性、可用性和分区容忍,三角洲选择一致性。所以,如果你不能跟中央协调器,取决于你在S3,可能自己的服务,你跑步,在Azure他们采取一致性的方法,我们使用一个原子操作,系统将会暂停。
但值得高兴的是,由于乐观并发机制,这并不意味着你失去了整个工作,你可能已经运行几个小时。它只是意味着你要等到你能够跟服务。所以,我想说读起来非常高可用性而言,在权利方面,我们选择的一致性,但总的来说,还是很不错的。
接下来是你保留所有级别的数据。好吧,我想我要澄清青铜的背后,银,金。不是每个人都让周围的原始数据,并不是每个人都让所有的数据。你可能会保留要求说,你只允许保留两年的数据。
所以,真的,我认为这是由你来决定哪些数据可以抓住。我唯一想说的是,我认为优点三角洲湖泊和三角洲一般适用于他们是如何你有权保持原始数据和尽可能多的你想要的。
所以,不存在技术上的限制,允许你保持所有的数据。结果,许多和我一起工作的组织实际上把所有他们在法律上被允许保持很长一段时间,和你只删除它当他们不得不摆脱它。
你写逻辑?我们可以用Scala编写逻辑吗?
三角洲湖插入现有的API的所有Apache的火花,这意味着您可以使用任何这些。所以,如果你是一个Scala程序员,您可以使用Scala。如果你是一个Java程序员,工作。我们也有在Python绑定。如果你和你不想项目分析师,我们也支持纯SQL。
真的如此,我们的想法是底层引擎用Scala编写和δ也用Scala编写的。但是你的逻辑可以用您熟悉的语言写的。这是另一个情况,我认为你需要正确的工具,正确的工作。
就我个人而言,我做很多我的东西在Scala中,但当我需要图表,我切换到Python。但是,三角洲给我过滤大量数据的能力,把它缩小东西会适合熊猫,然后我做一些绘图。
转眼间三角洲湖的一部分还是只有火花吗?
这是现在发展的很快。所以,有几个不同的答案。所以,我要告诉你,我们在和我们去的地方。
现在,里面的一个特性的砖,我们致力于开源,它允许您为三角洲,作家写这些东西称为manifest文件允许您查询一个增量表以一致的方式从转眼间或雅典娜知道任何其他基于转眼间的系统。
然而,我们正在深入的亮光,一转眼间背后的公司,建立一个本地连接器很快。我们也有活跃的蜂巢的兴趣社区,在滚烫的社区。所以,有很多的兴趣建立连接器。今天,三角洲的核心构建在火花,但我认为真正强大的开源和开放标准是,任何人都可以与它集成。bob下载地址和我们的项目,我们致力于发展生态系统和使用任何人。
所以,如果你对其中一个项目提交者,请加入我们的邮件列表,加入我们的松弛频道,检查一下,让我们知道我们如何可以帮助您构建这些额外的连接器。
我们可以尝试三角洲湖community edition的砖吗?
是的,你可以。三角洲湖在community edition是可用的。检查出来。一切都应该有。让我们知道你的想法。
和蜂巢三角洲表可以创建吗?
是的。所以,转眼间基本上相同的答案。有活跃的兴趣社区建设的支持。今天没有,但绝对是我们想构建。
三角洲湖是怎样处理缓慢变化维度从原始到黄金?
实际上还有一个博客在www.neidfyre.com上。如果你谷歌,缓慢变化维度三角洲,它将引导您完成所有的细节。但我认为,正确的答案是,合并操作符和加上权力或火花,它实际上很容易构建的所有不同类型的缓慢变化维度。
三角洲和神奇的一件事是添加的火花,使这些交易。修改一个表会非常危险没有交易和三角洲使这成为可能。因此,它使这种类型的用例。
我们通常处理Azure。我们想知道是否三角洲湖有什么不同的行为在Azure上运行时事件中心而不是卡夫卡?
我将回答这个问题有点更普遍。所以,我认为我谈到一个强大的三角洲,它集成了火花。和一个主要的原因就是我认为火花的瘦腰大数据的生态系统。有火花连接器世界上几乎每一个大数据系统。
所以,如果火花可以阅读它,它适用于三角洲湖。活动中心,特别是,既有本地连接器插头到火花数据源,并作为卡夫卡API与火花卡夫卡作品。所以,你可以很容易地读取事件中心和做所有的东西我今天谈论使用事件中心而不是卡夫卡。其实,这适用于任何系统,火花可以读取。
就一般而言,回答Azure一点,δ在Azure上完全支持,包括ADLS,我们最近改进的支持ADLS代。它可以为您下载。这也是Azure砖从盒子里的一部分。
到底是Scala API DML命令,喜欢更新吗?
答案是,它看起来像这样的火花SQL。火花SQL,您传递一个字符串,并更新。答案是,我们会同时支持。所以,如果你真的去GitHub库,我相信这段代码已经被合并。所以,你可以看到Scala API。如果不是,有设计,讨论细节添加更新的票。
但这里的想法是,都将是一个Scala函数叫做更新可以使用编程方式无需执行字符串插值。还有一个SQL的方法,这样你就可以创建一个SQL字符串,并传递。再说一遍,这就像你用你最熟悉的语言,已经工具包的一部分,和δ应与自动工作。
三角洲湖与HDFS工作吗?
是的,这完全与HDFS。HDFS有我们需要的所有原语,所以你不需要任何额外的细节。这里我所说的是HDFS支持原子重命名失败如果目的地已经存在。
所以,只要你足够运行一个新的版本的HDFS,这甚至不是新的,应该自动工作。如果你查看入门指南,在δδ文档。io,所有不同的存储系统,我们支持和细节你需要做什么设置。
更新、删除一行或记录水平?
这个问题有两种答案。所以,是的,三角洲允许你做细粒度的个人行更新。所以,你不一定要做更新或删除在分区级别。如果你在分区级别,他们是重要的。如果你喜欢删除,例如,在分区级别,这是更有效,因为我们可以将元数据。我们不需要做任何手动修改。
但是如果他们不是在分区级别,如果你做一个细粒度的单行更新或删除,我们要做的是我们会找到相关的拼花文件,修改,提交添加和删除操作发生。然后,它的事务。它支持它,但它确实涉及重写单个文件。
所以,我在这里要说的是如果δ绝对不是设计成一个OLTP系统,你不应该使用它如果你有大量的个人行更新。但是我们支持细粒度的用例。
你知道什么时候三角洲湖的Scala api可以吗?
嗯,有几个答案。所以,三角洲湖阅读和写作和流媒体和批处理工作今天已经在Scala中可用。如果你专门谈论更新、删除和合并,我相信大部分的代码已经被放入存储库。所以,如果你下载和构建它自己,它的存在。我们希望7月发布。希望这个月,会有下一个版本,其中包含额外的Scala api。
让我们来看看。是的。所以,下一个问题是关于数据质量。我们可以有其他字段进行验证的目的除了时间戳?是的。所以,我们之前谈论的预期,只是一般的SQL表达式。所以,任何期望,您可以在SQL编码是允许的。
因此,在这个示例中,它是一个非常简单的比较操作和一些具体日期。但它可以是任何你想要的。它甚至可以是一个UDF,检查数据的质量。真的,最重要的是,我们只是让你把这些作为属性的数据流,而不是手动验证你自己记住要做的事。所以,实施全球在任何人使用该系统。
三角洲湖是否支持合并的数据帧而不是临时表?
是的。所以,一旦Scala和Python api可用,然后你可以通过在一个数据帧。今天,砖,唯一可用的是SQL DML。在那种情况下,你需要注册一个临时表。但就像我说的,请继续关注本月底。我们将有一个释放Scala api,然后你就可以通过自己在数据帧。
我见过几次这个问题,所以我只回答一次。我们同时支持ADLs Gen1和代,尽管代会更快,因为我们有一些额外的优化。
在检查点的例子中,是引发工作计算三角洲湖检查点内部需要手写吗?
所以,当你使用流读取或者写入三角洲表,如果你只是使用它在两个不同的三角洲表、检查点是由结构化流处理。
所以,你不需要做任何额外的工作来构造检查站。内置的引擎。火花的结构化流的工作方式是每一个源和一切,有一个合同,允许我们做自动检查点。所以,源需要能够说,从这里到这里我处理数据。和那些在流的概念,我们称之为补偿,这些需要是可序列化的。我们商店的检查站。我们基本上使用检查点作为正前方日志。
所以我们说批号10将是这些数据。然后我们试图过程批号10。然后我们把它同步。这里的担保是必须项强大的同步。因此,它必须只接受批号10次。如果我们试图把它写两次由于失败,它必须拒绝就跳过它。把所有这些约束在一起,你实际上得到一次处理自动检查点没有你需要做任何额外的工作。
为什么不使用通晓多种语言的持久性和使用RDBMS存储acid事务?
我们尝试这一点。事实上,早期的三角洲使用MySQL版本之一。这里的问题是,MySQL是一个单独的机器。所以,刚刚的列表文件为一个大桌子可以成为瓶颈。而当你将元数据存储在一个表单,火花本身可以本地过程中,您可以利用火花加工。
所以,没有什么阻止你实现三角洲事务协议的存储系统。事实上,有一个很长的谈话在GitHub库现在的什么来回需要建立基础数据库版本的三角洲。是的,这当然是可能的。但在我们最初的可伸缩性测试,我们发现火花是最快的方法,至少我们的系统测试,这就是为什么我们决定这样做。
这是否意味着我们不需要数据帧和可以做所有转换三角洲湖呢?
我说不。哦,我想你只能更新、删除和合并不使用任何实际的数据帧代码可以使用/ SQL。但实际上,我认为这是正确的工具,正确的工作。
三角洲湖深深地集成引发数据帧。,就我个人而言,我觉得这是一个非常强大的工具进行转换。就像SQL + +,因为你有这些关系的概念,但嵌入在一个完整的编程语言。其实我觉得可以是一个非常有效的方式写你的数据管道。
三角洲湖如何管理引发的较新版本?
三角洲湖需要2.4.3火花,这是一个非常最近的版本。因为有虫子在火花的早期版本中,阻止数据源正确插进去。但总的来说,我们正在努力火花兼容性。这是本季度我们的核心项目之一是确保一切三角洲插入好稳定公共api的火花在未来我们可以处理多个版本。
三角洲湖是否支持兽人?
再次,讨论GitHub添加支持。所以,我鼓励你去检查在这个问题上投票如果这是对你很重要的东西。
这个问题有两种答案。一个是三角洲湖事务协议。我认为这实际上是在事务日志和实际支持指定的格式存储的数据。所以,它实际上可以用于任何不同的文件格式,txt, JSON、CSV、内置协议了。今天,我们不公开,作为一个选择当你创建一个增量表时,我们只做拼花。
原因很简单。我只是觉得调谐旋钮通常是越少越好。但RFC,如果有很好的理由为什么您的组织可以切换,我认为会很支持,很容易添加。这是我们社区的讨论。所以,请到GitHub,发现问题和填补它。
之间的区别是什么附带的三角洲湖砖和开源的版本吗?bob下载地址
这是一个问题,我有很多,我认为思考这个问题的方法是我想谈谈我的哲学是什么开源背后。bob下载地址那就是我认为的api通常需要开放。
所以,任何程序可以正确运行的内部砖也应该在开源工作。bob下载地址现在,今天这并不完全正确,因为开源版本的三角洲湖只有两个月大。bob下载地址所以,我们要做的是我们正在努力开源存在的所有不同的api。bob下载地址所以、更新、删除、合并的历史,你可以做所有这些事情的砖也将可用的开源版本。bob下载地址
管理三角洲湖是我们提供的版本。这将是更容易建立。它会与所有其他的集成块砖。所以,我们做缓存。我们有一个更快版本的火花。因此,运行更快。但在功能方面,我们的目标是为这里特性校验完成,因为我们致力于使这个开源项目成功。bob下载地址我认为开放api是正确的方法。
所以,我想我们会结束它。今天非常感谢你加入我。