提供见解从20米与500 +设备+智能家居

2021年5月26日,下午04:25 (PT)

我们开始处理大数据使用AWS S3, EMR集群,雅典娜为分析数据提取表BI服务。

然而随着我们的数据和团队规模的增加,Avro从源数据进化模式,我们试图通过网络应用提供分析数据,我们触及AWS EMR的局限性,胶/雅典娜的方法。

这是一个故事,我们如何向外扩展数据处理和提高团队的工作效率,以满足我们目前的需求从20 m +智能住宅和500 +设备在全球范围内,从众多的内部业务团队和我们的150 + CSP伙伴。bob体育外网下载

我们将描述经验教训和最佳实践与砖自动定量的建立了我们使我们的团队工作集群和笔记本和Avro /镶花的数据迁移到使用MetaStore, SQL端点和SQLA控制台,而绘制的路径三角洲湖…

在这个会话表:
Sameer Vaidya、架构师羽设计公司。

成绩单

Sameer Vaidya:我们希望你,你的家人和你爱的人保持安全,今天能够帮助有困难的人。我们欢迎您到我们的会话,我提供是普遍的和平的信息。
(唱)
你们都是来听我们的会话理解我们是如何发展我们的数据实践服务的见解和分析来自2000万多个智能家居消费者超过5亿连接设备的历史时间,好吗?为了得到我们的会话,我们想先给你一点背景的羽毛做什么业务,其业务规则是什么,什么是我们要解决的一些问题?和我们的各种数据的关系团队在解决这些问题。我能讲一些事情公众面临和在互联网上可用的。但是,我会尽量获得一些内部面临挑战,我们今天解决。所以羽的业务提供连接智能家居的消费体验。
我们运行我们的产品在数以百万计的家庭和监视和管理各种类型的服务在这些智能家居,好吗?给你的我们的业务团队正在寻找的一些事情,我将讨论一些业务团队是我们的利益相关者和我们的数据产品的消费者。所以一开始,在这里你可以看到在plume.com上我们提供最近在2000万年发射智能家居的庆祝活动。营销人想和提供一些见解来自我们的数据,他们可以启动公共网络上的活动。所以我们的营销是一个消费者。他们寻找这样的事情在家里发生了什么,在全世界范围内,在不同的部署我们的客户,和基于见解获得不同类型的连接设备。这里在左边,你可以看到一个热图显示我们所有的部署在全球各地,我们每天必须更新。
同样,我们请求来自产品管理。和产品经理想了解如何工作的各种特性,是否人们来打开或关闭时,他们是如何执行,等等。再一次,发生在我们所有的家庭在全球地区。还有人从我们的产品团队,产品工程师或算法工程师正在努力改善和优化我们的产品连接智能家居的表演。所以他们寻找之类的,我们的产品优化执行如何?连接设备质量的经验如何?这些指标和kpi,他们希望看到我们的地理位置在一段时间,我们正在收集不同类型的遥测技术指标。最明显的,在这里你看到诸如交通模式在一段时间内,网络速度测试和可用性随着时间的跨时间和跨地域,好吗?
另一个团队,认真地使用我们的很多数据产品和见解是我们网络作战团队。这是负责网络运营团队推出功能和格式更新在很多不同的地区,在大量的房屋。当他们推出新固件推出新版本的软件,他们想知道一切仍执行相对稳定和竞争之前他们看到什么变化。这些是各种类型的见解,我们必须对这些不同类型的利益相关者服务。
和团队服务这些见解跨三种类型的团队。我们有建筑工程团队,接受和过程数据的数据管道。我们使用的数据科学团队数据调整和优化算法,引入产品创新。和BI和分析团队,以数据和图表,我们生产在我们的数据仓库,这暴露通过仪表板,特别报告和各种类型的见解,我们的利益相关者的问我们,好吗?
这是我们公司的背景和团队结构和类型的问题,我们正在努力解决。现在在这,我们将进入会议的议程是什么?我们是Sameer Vaidya…所以我。我作为建筑师在羽,我专注于数据工程BI和分析问题。后来在会话中,我的同事Raghav Karnam将加入我们的行列。和他是一个专家在数据机器学习科学和工程公司。和他谈论一些事情他们做机器学习和与你们分享一些见解。我们今天的会议是真的针对初学者,我们依旧是最好的作为一个初学者会话水平。
和我们所说的初学者水平的人是相对较早在他们的旅程采用各种技术来构建大数据分析。特别是,如果你感兴趣看砖,数据平台,湖的房子,SQL分析,这些地区。bob体育客户端下载我们今天要讲的是我们如何建立我们当前一代的这些技术,数据处理平台和我们的教训在这,整个环境是什么样子的。bob体育客户端下载我们将讨论如何使用集群工作来提高我们的生产力。我们使用笔记本电脑开发人员的生产力和某些领域对数据处理、元数据管理的大数据处理转化为各种应用程序的SQL可查询数据。我将关注。当Raghav加入我们,他将讨论机器学习生命周期,对吧?
我们希望那些新区域,再从我们今天表示,对于那些更有经验,你觉得你知道很多这个东西,我们也希望,既然你加入了我们的会议,我们希望你带走一些见解和啊哈时刻你学到一些东西从我们的会话。,值得你投资于美国。你应该像我们的会话,我们不得不说,我们公司在做什么。我们将对你的爱来引用你的朋友申请职业在数据区域的李子。我们在大数据从早期开始的旅程,所以大约在5年前。此时当我们开始看数据处理和分析,我们被吸引到,选择Apache引发我们所有的数据处理框架。
在一段时间内,我们继续使用,并使用,是成功和快乐。再一次,也从早期,我们是一个大的AWS商店。我们拥抱着,部署在AWS世界多个地区,非常幸福和成功的平台,托管服务。bob体育客户端下载从早期,因此当我们开始我们的数据处理与火花,我们自然会转向使用现有的AWS大数据处理框架。处理大数据集群,我们使用AWS弹性MapReduce,它给我们提供了托管集群,您可以点击和很容易生成这些集群为你处理。一旦你完成处理数据以暴露通过SQL分析我们的数据仓库,我们开始使用AWS雅典娜,将底层数据并使其可通过SQL。
所以我们认为雅典娜数据仓库。为了把底层的大数据暴露通过SQL在雅典娜,你必须使用一种叫做AWS胶水爬虫。我几乎可以永远不要说胶履带正确,但我认为这次我是正确的。胶水爬虫底层文件系统,无论是Avro,拼花,或JSON或CSV,并生成元数据的自动曝光他们作为SQL数据库和生动的场面,你可以配置它。这是我们最初的基础设施,我们开始了。在早期它能很好地工作当团队规模小,我们正在处理的数据量是合理的。什么是开始发生在一段时间内,随着数据进化,我们开始越来越多的数据。开发人员的数量增加了。我们开始越来越团队构建这些工作。我们有轻微困难保持一致的和标准化的一切。
开始发生了什么,我们开始遇到一些瓶颈,我想谈谈我们面临的一些挑战,我们如何克服它们。所以我们先讨论引发数据处理集群。我们发现,这是大约两年前,就是在这个时间点我描述。两年前被面临这些挑战,然后我将解释我们如何克服它们。所以在时间点上的数据处理,我们发现,我们在开发和生产都是处理数据。在生产,我们的DevOps团队想控制我们的资源和管理资源。
我们发现,当人们开始使用EMR集群在生产操作中,我们开始编写越来越多的就业机会。我们发现它复杂的找出EMR集群大小,如何配置它们如何规模和即时的方式使用它们的工作处理。事实证明,我们在这一点上没有发现如何自动化。今天,我不知道这是可能的,但至少在这一点上,我们有一个基础设施,我们将创建一个集群,就让它运行,因为它太复杂我们终止它,关闭它。然后再一次,重新配置并重启它。因为这种复杂性,我们进入这个习惯的EMR集群只是建造一次运行。一旦你离开他们跑步,然后我们开始添加更多和更多的就业机会,对我们来说变得复杂找出大小,如何种植他们和收缩。和我们不是很能算出来。
集群的运行在生产中,我们发现,我们的一些批处理很少的或只是偶尔的一天,我们整天只是运行集群,本质上大大减少这些集群的资源利用率和不必要的资源,我们没有使用。这是在生产中发生了什么。在开发中,开发人员想要创造自己的集群,我们经历了一段时间,我们让开发人员做自己的集群。和灵活性反弹对我们,因为在某些情况下,开发人员所做的就是他们离开大型集群运行长周末之类的东西,意识到他们不是超级负责。
,原因是没有一个简单的方法来建立一个集群,并自动时间出来回来工作,开始了等等。所以我们称这种缺乏自动化。我们发现开发人员不能使用它们非常负责任。我们经历了一段时间,我们试图创建集群和管理共享集群。这有很复杂,因为使用共享库的物流集群等等。这些是我们的一些挑战和集群。那时还在开发过程,我们发现,大多数开发人员使用火花提交工作和评估搜索到集群和运行东西引发壳还是运行作业和查看日志文件调试和故障排除。
,总的来说,我们发现开发人员经验和生产率很低。可能有一个或两个足智多谋,勇敢的工程师想出了如何使用笔记本电脑,但它不是一个广泛采用的做法。所以出于某种原因,我们生活在这些黑暗洞穴时代的开发经验。这些是我们的一些挑战和火花加工。实际上采取底层过程数据和公开,我们发现胶爬虫…对不起,我的坏。我想回到AWS,雅典娜。我想谈谈我们在雅典娜的挑战。雅典娜,我们大多是快乐。它几乎所有的查询的表现很好,我们想要做的事情。有几个地区是陷阱。
地区之一,虽然大多数的查询工作的相当好,我们发现,在某些场合,当我们的数据科学家试图寻找深见解通过运行在大型数据集上进行复杂的查询聚集在大的时间,他们发现他们想要运行复杂的SQL。他们发现,他们将运行它几个小时,最终它会超时或耗尽资源。实际上他们无法完成这些查询。和我们发现的东西作为我们的拦截器,似乎没有任何真正的解决方案。所以在这里你可以看到,这是你得到的东西如果你耗尽时间或者如果你想使用资源,他们不愿意给你。
这是因为雅典娜serverless环境和serverless利弊。箴,你不必惹容量规划和管理资源,这就是它吸引人的和有吸引力的。缺点是,应该有一个时间,你有一个复杂的大型查询你想跑,你愿意支付它,因为它对你来说是足够有价值,你不介意使用额外的资源,旋转并支付它。真的没有选择,你只是运气不好。的概念,所以在这种情况下,serverless不利于你因为你没有控制旋转额外的资源,需要处理你需要做的。这是一件事,我们不太喜欢它。
另一个领域,我们有一个问题是,一些可用的数据,我们发现了一种公开支持代理。他们发现它很有用数据和表面成web应用程序的支持。他们会用它来服务客户支持电话等等。我们认为这是伟大的,我们可以公开这个雅典娜数据对这些web应用程序。它工作得很好一段时间,直到支持量开始增加,然后随着体积开始增加,我们发现的是,雅典娜给你一个固定数量的队列固定数量的学分。如果有一天太多的代理正在应用的支持,突然会填满的队列,没有其他处理工作。其他人现在封锁了因为所有的队列被代理的支持。
然后我们意识到,“哦,这是不好的,因为它是一个共享队列在人的使用这个账户,没有去上班。这样的想法没有控制池的资源和决定哪些消费者应用程序获得资源的多少,但设施不是可用的。所以在这种情况下,我们开始收缩的感觉,受到serverless概念。最后一个区域相关的元数据管理。胶水爬行,而我说,大多数时候作为一名开发人员构建这些底层管道,他们发现它很容易配置这些爬虫,他们指向一个位置。它会自动构建元数据。这种有机经过一段时间的演变。它也工作了一段时间,直到它停止工作很好,好吗?
我们注意到,随着时间的推移我们的模式开始进化。模式进化,进化版本的模式。也改变了一些处理技术,我们发现某些文件在底层文件系统引入了比以前不同的,当我们改变了我们的技术。我们注意到的是,如果开发人员不小心配置爬虫只有正确的排除条款和正确的参数,爬虫会卑鄙的小人,开始产生很多工艺或不正确的元数据并不是有用的。这是可能发生的事情的一个例子基于一些基本情况。所以爬虫突然开始生成大量的数据表,因为它认为底层分区或文件数据生动的场面,因为它是自动尝试检测生动的场面是什么。在这种情况下,如果你不小心,或者如果有一个特定的情况和你不占,很容易就可以制造混乱,好吗?
所以我们发现这个想法基于爬行的自动元数据管理系统并不是一个很好的情况。这是一些我们在挣扎。所以当我们决定寻找一个更好的解决方案。我们遇到了砖,砖首先证明是集群的概念。我们绝对喜欢它,因为在集群,他们向我们展示了您可以创建这些标准集群服务器或共享集群开发人员之间。而且很容易创建和提供它。然后为你工作,你创建一个叫做工作集群。和工作仅仅集群自旋向上,当你提交作业。当工作完成,他们把它拆掉,就是这样。你支付的处理你和你的工作。 There is no idle time, underutilized resources.
标准的集群,我们开始给我们的开发人员,或者我们可以给我们的开发人员根据他们的技术,他们有建筑集群的概念,然后当偶像,它只告诉关闭,你停止支付底层的计算成本。当开发人员的准备工作,他们可以点击一个按钮,重新启动集群,对吧?。在某些情况下,你可以提交一个查询,它会自动启动集群。所以我们发现,很吸引人,我们决定接受。同样使用这种元数据管理,我们很喜欢三角洲湖的概念。
三角洲湖是一个自我清单管理系统,这意味着没有外部额外的爬虫,你需要看底层文件系统并确定表结构是什么样子的模式是什么样子,好吗?三角洲系统写数据和元数据的更新数据。权利和更新是沉重的,但是读取的速度快速、高效,有一种方法来优化底层数据。所以我们发现更有吸引力比,体现基于爬虫自动元数据管理系统。
这些是一些吸引人的东西开始使用砖。和接下来的几张幻灯片,我们将告诉你通过我们的旅程如何转换到砖平台,是什么规模的一些挑战我们解决它在我们全球处理?bob体育客户端下载和我们获得的好处是什么呢?让我们开始第一个话题,谈论的是运营效率和开发人员的生产力。为此,我们必须部署砖工作区世界各地不同地区的处理。然后让开发人员使用他们在每一个区域的处理。
所以我要谈谈我们如何去的一些挑战是什么,我们必须克服,和哪些最佳实践我们了,好吗?现在意识到砖是一个已安装的产品,这意味着它不像AWS本地,在那里你可以点击一些AWS服务并启用它,打开它。你必须计划砖安装,叫做一个工作区。在我们的案例中,因为我们在多个地区、多个操作AWS VPC是世界各地。我们必须计划任何数量的工作区。现在,我们大约在10的这些,但是我们不得不为这些计划。在每种情况下,我们不得不计划双成对,开发工作空间的想法,在每个地区生产工作区。
为了计划,我们意识到我们必须小心的一些事情是第一,我们必须规范名称空间。名称空间是什么意思?任何给定的砖工作空间有一个URL,您用来访问和参考。所以我们计算出最佳实践的命名应该始终使用无处不在,因为如果你把它错了,遗憾的是没有简单的重命名命令。你必须从字面上拆除整个事情,重建它。所以这样一个昂贵的教训后,我们在吸取了教训标准化名称空间。今天我们遵循一个模式,这是公司名称破折号和域名缓冲区域的名字。之后,你得到了.cloud.www.neidfyre.com。所以我们标准化,为所有的工作区名称空间我们开始安装他们。
在规划工作空间的同时,我们也意识到,我们应该计划桶的名字。再一次,这是其中之一,你必须标准化桶的名字,因为一旦你选择了桶在安装期间,你不能改变这一桶的名字和最好的自动化和DevOps和所有这些实践有一致的市场名称无处不在。所以我们知道我们应该规范名称空间在创建这些工作区。在AWS用户和组,所以在我们账户跨各种vpc,我们可以创建组和用户。和相同的一个是可以通过AWSIM全世界。但随着砖这不是真的,因为每个空间都有自己的用户和组的概念。所以这意味着我们必须在每一个管理用户和组的工作空间。所以想象像乘以9或10的,对吧?
但好消息是,他们提供所谓的SAML单点登录,它叫做脱脂集成。与此同时,你可以做的是您可以使用我们的SSO。所以我们使用单点登录SAML身份提供商,我们地图用户和组的SAML SSO,它维护。所以当新用户或新员工加入公司,作为新员工培训过程的一部分,ID规定它们进入我们的单点登录供应商。然后底层集成自动将用户和组到砖工作区。这允许我们做用户管理在这些大量的工作区。这就是我们如何解决这个问题。然后在每一个,你有各种各样的资源,比如集群、工作、数据库等等。所以,我们很快意识到我们需要自动化的基于角色的访问控制和应用到每一个工作空间。
所以我们必须建立一些脚本所有这些底层资源管理角色和自动化的应用在所有这些工作区。这些是你必须知道的一些事情和计划。我们意识到的一件事是,在一段时间内不同区域和工作区,砖本身升级他们的底层服务。在不同的时间,这些可以通过维护和升级。我们发现…我想给status.www.neidfyre.com的喊出,我们发现是非常有用的理解当事情看起来不太对,我们试图想知道我们的问题或问题,你可以看看statusstarwww.neidfyre.com和告诉你发生了什么在世界各地不同的工作区和地区。
这是我们如何建立我们全世界不同的工作区。一旦我们建立这些工作区,我们希望开发人员开始使用它。我们注意到,几乎从一开始,每个人都迅速转向使用笔记本电脑作为他们的集成开发人员的经验,作为他们的ID的选择。我自豪地宣布一年之后,我们将调查和大量的开发人员在调查中声称,他们主观上认为,他们认为生产力是30至50%使用和采用笔记本。所以笔记本,最酷的是,笔记本有东西叫做细胞。细胞,你可以写你的语言的选择。所以我们有我们的数据工程师使用Scala。所以现在在Scala是他们开发的基础工作和创建jar文件,上传到集群。然后他们可以与之交互的开发和测试,看看他们的工作是如何工作。他们能通过笔记本与它交互,Scala代码。
我们的数据科学家能够编写一个biotin-based代码,然后使用Python代码与它们的底层算法等对他们的数据。我们的分析师可以使用SQL和SQL使用SQL细胞互动,玩笔记本电脑的数据和他们的开发过程。这都是工作很好。有趣的一件事我们可以做的是以前我们的分析师将依赖于数据工程师任何转换成预定的工作,但是现在的笔记本,他们能做的就是他们能够编写一些代码在SQL并单击一个按钮和进度计划的工作。所以很容易。所以你可以写你的代码和逻辑的工作,然后安排砖将运行在任何您指定或时间表。所以他们能够做的相当快速和容易得到的工作和全面推广的工作而不必等待数据工程团队为他们这样做。
在一段时间里,我们学到了一些东西。一是早期的笔记本是没有潜在的Git支持,但最近他们介绍GitHub库支持,我们非常高兴。GitHub库允许我们将笔记本映射到底层存储库和管理,在底层的版本控制存储库。当然你应该看看GitHub回购。然后在调度方面,我们了解到,所有的计划工作是相当不错的,方便我们没有连接到我们的Airflow-based工作监控系统。
所以在一段时间内我们转换到气流得到监控。所以我们停止使用砖调度器和简单的调度这些工作用气流得到这份工作依赖性和监控。所以我们开始使用气流。你可以做的另一件事是如果…这是不足够的,还有其他几个备用的经历,我们对于开发人员使用。所以一个是您可以配置使用辛巴司机。您可以配置一个SQL ID。所以你可以连接到砖集群使用商业SQL ID,您可能更喜欢,或者你可以使用你的开发者ID IntelliJ或Pycharm等之类的,提交代码到火花的集群使用一种称为砖的技术连接。和我们的开发人员使用所有这些技术的结合将提高了生产力的发展。
现在我们讨论集群。集群,我提到了在早期对工作集群和高并发性和标准集群。集群的工作,我们所做的是我们从气流提交工作工作,每个开发人员负责的工作可以决定多少资源,工作的需求。他们编写的气流标签创建工作分级…对不起,集群规模,并提交工作到集群。然后砖将旋转指定集群,但是在你的工作和拆除它正如我提到的,好吗?所以在这方面,我们所做的就是我们使用集群政策的概念,这样我们可以保持一定数量的限制和健康检查,这样别人不会太疯狂,没有我们发现,好吗?所以我们使用集群政策的工作。
我们玩标准和高并发集群。因为不同的时间点的开发人员工作和没有足够的并发性,我们的结论是,标准的集群对我们更好。集群和高并发运行更昂贵,但它允许…这是建立在这样一种方式平衡所有传入的请求。如果你同时有许多开发人员,您应该使用high concurrency集群,但是如果你有零星的使用稀疏集群的使用,只需给他们专用集群。在此,我们发现了一些最佳实践。集群的其中之一是,我们最初试图使用现货实例无处不在。我们很兴奋,这些实例可以相当便宜,您应该使用现货实例。然后我们知道随着时间的推移,这是一个坏主意,因为可能发生的是什么,有时作业将运行了三,四个小时,五个小时,然后它将终止,因为火花司机节点就会消失,因为底层现场实例被带走。现在你的整个工作失败。
我们学到的是,我们应该使用保留的实例对司机笔记和其他现货实例。这对我们一直很好。不应该发现,当开发人员提交这些工作,他们必须提交的工作在他们自己的凭证。一旦你这样做,没有其他的开发人员可以解决你的工作。如果你的工作失败,想帮助你的队友使用这个工作或故障排除这个工作,这是不可能的。然后砖介绍这个东西称为服务原则。和服务原则概念允许您带我们本质上相当于一个无头的服务用户,你可以创建你的组和使用服务原则推出你们的工作。一旦你这样做,那么你们组的人能够看到日志和故障排除等。我们发现,我们应该学习服务管理工作原则。
我们学到的一件事是,这个子网的概念,可能我应该提到它我之前的幻灯片关于规划工作空间,但这是我们学到一个教训,在某一时刻,我们有一些问题…一些处理。我们发现,虽然安装工作区,DevOps团队已经安装在现有的VPC和其他服务,而砖的最佳实践建议您与足够的子网空间专用子网。我们汲取了惨痛的教训。我们必须拆毁重建工作在适当的专用子网。
所以记得给它一个专用子网,给足够的空间,让我们成长。因为,这是我们了解到,一开始,我们以为有多少实例我们可以使用吗?对吧?但正如我们处理了,我们突然开始意识到我们可以使用相当多的情况下,我们应该计划一个足够大的子网,我们不担心空间不足的。这是你应该计划建立一个足够大的专用子网底层集群和工作区。对于高可用性,我提到我们的作业调度使用气流。我们学会了在一段时间内,砖服务和api通过保养周期。这意味着,保养周期是一段时间,你的工作可能会调用API来启动集群和运行你的工作,但是调用失败,因为API正在维护升级。
现在他们都是足以宣布在信道状态和警报和电子邮件警报和这些东西。但再也不一样了,你必须考虑到你的工作启动和执行。所以我们学会了做过一段时间重试的工作,因为当这些APS消失,然后回来在15日,20分钟。然后我们了解到,而不是让它失败,手动处理它,我们建立了一个逻辑放在气流工作现在重新工作在几分钟内,试试长达30分钟。现在一直对我们很好。我们学到的另一件事是,在某些情况下,当实例的数量和我们开始增长数据处理增加,我们了解到,在有些情况下,AWS潜在的可用性区域在一定地区的某些类型的实例。
当这种情况发生时,你能做的。有一次,我们向砖的支持,但是他们说:“看,我们依赖底层AWS实例给我们。如果他们没有实例类型,没有什么我们可以做的。”,我们认为是合理的。于是我们学会了做的是重新就业,这样你可以问它运行在不同的可用性区域。然后更好的为我们工作,现在如果底层可用性区域的情况下,我们只是尝试另一个可用性区域,得到我们的工作执行可用性区域。所以你应该计划这样的重试逻辑,试图在不同的可用性区域应该原来运行的实例类型。另一件我们有经验,这是非常真实的。他们讨论这个文档,项目能力的工作。
记住我给你的例子,APA提交用于失败?所以在这种情况下,所发生的是我们发现了一些情况下重试逻辑将重新提交工作,同样的工作运行两到三次。这实际上为我们带来了不少问题,因为在某些情况下,它会写多个文件下面,它会打乱我们的逻辑依赖项底层记录之类的东西。这实际上给了你错误的数据结果。我们必须找出如何处理它,解决它。所以我们学过这个东西叫项效力令牌。现在当我们提交我们的工作,我们提交使用项目效力令牌。这已经使每一份工作完全独特的在时间和空间。我们不再遭受这个问题当我们重试的工作在工作中有多个提交。
所以强烈推荐使用作业提交项目效力令牌。这些是我们的一些教训在集群操作。,这使得我们几乎对开发人员通过自助的方式大部分和大大减少DevOps的参与和开销来管理和维护这些集群。
现在,人们开始使用这些集群,在某种程度上我们不得不更新执照和找出我们的花是什么。直到那个时候,我有点尴尬地承认我们没有做得很好跟踪我们的花,但现在我们学到的教训。和我们学的是这些美妙的使用报告,您可以使用AWS标签。只要你正确标记它,你可以分割成花在相当多的方面。随着时间的推移,我们学会了做是标签申请不同的方式我们想看花。所以成本中心,通过什么样的项目我们支出这些集群?使用它是哪支球队?个人所有者负责什么吗?和环境和地区处理运行?通过创建这些类型的AWS标签来启动集群,我们现在能够去看看使用报告和切割。
使用报告可以直接通过砖账户管理控制台,或者他们也可以让你导出数据和构建您自己的自定义报告。于是我们开始做出口定制报告,然后做自己的报告基于表的使用。这是非常有用的。所以我强烈建议你计划从《盗梦空间》。
好吧。所以我们谈论建立集群和建立开发经验。我想谈谈…变速和进入元数据管理和如何管理查询性能和我们如何从层次结构和SQL三角洲湖。我们之前谈论胶爬虫,我提到胶元数据系统使Metastore更新,和Metastore本质上是一个表的定义以及它们如何映射到底层文件系统,好吗?现在,当你搬砖,我们不能试试这个混合的想法主意说,也许我们可以利用和重用现有的AWS胶系统,等等。但这实际上是相当复杂的,并没有给我们一个干净的抑制这些问题之间的关系。挣扎了一段时间后,我们决定创建一个干净的石板和完全独立与AWS的我们在做什么,胶水和雅典娜在砖从我们在做什么。
所以我们决定完全拥抱砖的砖Metastore管理的元数据。在现在,我们要开始用我们现有的每个人都铺文件,并简单地使用元数据映射到砖Metastore。我们发现这些数据实际上是有点复杂,因为需要你做的是什么,这需要你自己编写爬虫。因为现在记住,虽然我抱怨胶水爬虫,好消息是他们至少有自动化的东西给你。但是如果你想做自己的拼花,Avro使用砖,然后你必须真正解决你自己的有效的元数据管理系统。我们做了一些,因为我们想要转移到砖,然后慢慢地迁移到三角洲。我将谈论三角洲迁移经验是什么,但是我们发现通过使用镶木地板和Avro砖SQL查询是真的不工作高效、优化与原始雅典娜系统,基于不同的技术比火花SQL。
所以基于这些经验,我们决定去三角洲湖尽快,因为三角洲湖安排底层数据以更优化的方式,并与砖更好的工作。如果你打算从遗产,拼花和SQL…对不起,拼花,Avro成砖,然后你真的实际上,你应该立即计划迁移到三角洲湖因为遗产潜在Avro铺的支持而存在不是很好。SQL查询性能都不是很好。你必须保持自己的元数据,编写自己的爬虫系统。所以我将避免这样做,如果我有机会。所以我们必须通过系统和创建爬虫,但我将避免这样做。
现在,我们必须拯救砖有这种技术称为自动加载程序。和我们的居民解决方案架构师帮助我们配置自动加载程序,它工作得很好。自动加载程序,你可以做的是你可以写几行代码流,使其指向一个来源。实际上在流代码中,你可以将它转换成一个…把它写成三角洲和保持最新。所以就像我们摄取系统摄取到三角洲体系。这是我推荐给你一试。但我想花一点时间在我们对我们现有的镶花迁移到三角洲的发泄,因为我认为这是一个挑战我们接受。和你们中的一些人已经现有的遗留,不是试图这样做要做同样的事情。
所以,第一件事是,你必须发现你的拼花和Avro数据在哪里被使用。,这意味着你必须有一个干净的内部目录和数据沿袭的理解是什么数据?的数据在哪里?使用它是谁?它来自哪里?对吧?对于这个,你有所有底层的元数据。我所说的元数据的DDL。对于这些数据,你必须有每个表的定义语言以及它如何映射到底层数据。我们开始通过编目所有部件和我们所有的模式对这些基础数据DDL。 And so once we did that, we started planning for how to convert the underlying Parquet into Delta. Now realize one thing that there is a quick and easy command for converting Parquet to Delta, because essentially Delta is just Parquet plus, it just write some metadata on top of Parquet.
这是一个相当简单,方便的命令。但是如果你有Avro, Avro没有这样简单的命令。你需要做一些工作摄入Avro转换为δ,好吗?但幸运的是,我们的很多基础数据是拼花。所以我们可以这样做更容易一些。所以,我们所做的是,我们必须首先计划的其他消费管道吗?现在意识到这一点,这就是我所说的第一步大鸟的事,你必须把所有的基础数据,你必须把它从铺到三角洲。一旦你这样做,解决问题的初始数据转换。但想象第二天或下一个小时,一些作业将运行,它会写更多的数据,对吧?
所以你不希望的情况的工作是写作三角洲…对不起,拼花数据到底层数据文件转换成三角洲。所以我们要做的是我们必须找出所有工作我们有阅读和写作底层铺数据,我们不得不修改这些工作非常手术将我们读从铺写读取写入δ为合适,好吗?所以我们必须采取所有这些管道和转换所有的代码和有这个准备。在某些情况下,我们还发现,有外部的消费者基础数据是直接加载数据和材料使用SQL。他们直接从底层文件系统加载数据。我们必须配合他们说,“嘿,我们将这转化为三角洲和你们应该准备好了。和时将在我们这个三角洲体系。”
之后我们做了,然后,我们创建脚本来自动化和把所有的数据。我们暂停所有的管道,下载的所有数据,然后开始新代码的管道,这是阅读和写作δ,好吗?然后恢复所有的管道。第二天开始,所有这些代码现在阅读和写作三角洲格式。这是我们如何做转换从铺到三角洲。为了保持向后兼容雅典娜,有一种方法把δ通过清单系统数据和公开它,让它可以雅典娜。现在,因此,我们还必须创建自己的MSE护理修复机制让雅典娜看到底层三角洲数据更新。
所以你不能使用现有的胶爬虫了。你必须构建自己的机制,把底层数据刷新雅典娜的元数据系统定期让它看到更新的三角洲数据变化。这是我们的路径转换从铺到三角洲。所以结束的时候,我们现在有有效的开发人员的生产力。和底层数据转换为三角洲和给我们自动化元数据管理,以及更好的性能,因为底层三角洲系统有旋钮优化和整合文件等等。所以在此基础上,我们现在能够使用SQL分析,这暴露了底层数据通过SQL。为此,我们只是把现有的雅典娜,开始转移他们的使用一个应用程序中,一个用户。现在我们的砖Metastore实施和填充,我们能够将这些潜在的应用程序从开始使用雅典娜使用砖SQL的分析。
和SQL的分析,我们开始通过SQL端点,我们称之为通用,开始新员工培训的大部分应用程序。只有在一段时间内,有人具体需要做更多。我们开始创建的自定义端点和集群。同时,注意,在SQL分析产品,如果你不非常兴奋的SQLBot报价,我们可以使用一个外部SQL ID DBeaver。和SQL分析能够解决web api。我抱怨耗尽资源。和我们现在能够使用SQL分析端点通过扩大底层集群性能以满足API。这是我的故事的结束。我谈论我们如何克服了很多问题与工作空间管理、集群和笔记本,我们如何升级到SQL分析元数据和拥抱。我希望你发现一些有用的见解。 I want to transition and hand this over now to my colleague Raghav. And he’s going to talk about what he’s doing with ML in the company, over two you Raghav.

Raghav Karnam:早上好,你好。我是拉。和我领导的机器学习和数据科学团队在羽流。我在这里谈论机器学习生命周期在羽流,以及我们如何帮助砖自动化很多东西。所以羽流在业务方面关注很多机器学习用例。第一和最主要的一个,我们开始它能够满足无线家庭以无缝的方式,好吗?给最好的无线网络,给(听不清)最好的wifi的经验。我们需要了解有哪些设备,在家里,在家里你有什么动作。例如,大多数时候在你的客厅,我们必须调整我们的无线你的客厅。如果你有大多数时候电视5兆赫,我们必须调整无线连接。
做这些事情,我们需要了解设备的性质在家里,在家里的设备,在家里的时刻。这是一个非常大的空间,机器学习帮助我们。第二个方面是,一旦你有wifi, wifi的你想做什么?你想做很多事情,但你想是安全的。你想要保护你在互联网上。这就是我们的第二个用例出现,网络安全。(听不清)我做数字化保护我们的客户来自外部的攻击。网络安全领域,我们做很多机器学习的空间。然后可能,像主题表示,我们在2000万+,5亿+设备。这是一个很多数据。 And how we can help our consumers, Plume is a consumer hold services business. Like say, wifi is our first service.
第二个是网络安全。第三,是防止做积极的维护。有没有一种方法我们可以知道你有在你的wifi经验和故障修复它之前你意识到吗?这是一个巨大的对我们感兴趣的领域,因为我们希望wifi体验最好的给你,这是另一个领域。然后是另一个用例,如何进行数字…我们甚至数字化保护你。我们可以为你做实物保护吗?例如,今天当你远离你的家,假设您正在使用(环)或任何其他产品。你门传感器等等。当你呆在家里,如果一些不速之客进来,你会得到一个弹出说,“嘿,有入侵者,对吧?但是你需要一个外部传感器。 Can we do this without using external sensors with your access to wifi access points?
我们想做的事情。这是一个挑战我们如何做呢?是另一个机器学习的目的。我们可以感觉运动检测使用wifi信号吗?是的。答案是肯定的,我们已经解决了它在某种程度上,是的。在运动,有很多挑战,像你远离你的家庭在家里但是你的宠物。你不应该称之为入侵者。所以有很多的侮辱,我们已经进化和改进自己。然后有很多的创新领域内柱。 We have evoking, we can probably not discuss like this with all this information learning happening within Plum. So these are the machine learning areas of focus for us. And there’s a huge expectation for machine learning teams, because we have to be very fast on up to the needs to market, at the same time, adapt to the scale at which we are growing.
现在,让我们回到我们的第一天。我们面临的挑战是什么在我们的生命周期和MLOps第一代毫升、我们如何最终在砖,好吗?基本上,我们的进化开始用一个缓冲。最初,当我们开始做数据科学和机器学习,我们有一个非常小的团队热情工程师想做很多很酷的产品,它将去市场更快。和我们每一个人。我们有一个机器学习工程师和数据科学家负责做胎儿的生命周期阶段。但是在某一时刻的时候,如果你想增加的速率特性范围生产,好吗?当我们开始思考,是什么和我们如何优化不同阶段每个阶段。例如,这是一个非常标准的过程,像我们的机器学习所涉及的步骤。
你读数据,你做每一件事情,你做很多事情。你怎么做呢?工程师应该牧师的数据的原始数据格式。然后建立模型的一般数据科学家的责任。所以在,如何优化性能和优化您的指标?使阈值。部署模型,我们通常有ML工程师这样做。你好,当现有的生产模式?你添加额外的模型在A / B测试模式下,你怎么能做到无缝地?
然后最后的最后一步是当你整合模型,你与很多交互软件工程师microservices的建造者,你如何快速融入这个团队,以及他们如何了解机器学习模型你给他们,这样他们可以定义简单的通过或失败。这是另一个阶段。
最后一个阶段是不会在生产操作模型。你如何看待模型或数据漂移漂移,等等,好吗?这是令人担忧的地方。就像Sameer指向最初的幻灯片,数据科学家利用大量的这些事情。我们想要分解的过程,就人而言,在技术方面的工具和优化这些东西。的人…但你可以看到是明确地定义我们的旅程。这是人们和团队的一部分,好吗?也许,工具和技术,数据科学家最初万岁的小团队,并且两人足够聪明为整个团队主办的笔记本,和我们。但它不是把我们太久了。然后跟踪毫升实验中,性能指标。 We had an open source MLflow on a specific server with attacking experiments. But they such a burden was on top of the data scientist’s head. So how do we adapt this? How do we free up the space and the burden on the data scientist? That does have one question to be asked?
这是第一个问题,让我们做一个发现砖,砖提供一个ID叫砖的笔记本。这些笔记本电脑帮助我们自旋向上和自旋向下的火花集群。以前,在之前的旧数据科学家使用旋转EMR集群和主机笔记本在细胞自我MLflow集群。我们捡起砖,因为它帮助我们上下旋转集群。和数据科学家不需要担心,ID,笔记本他们总是由砖,所以我们不需要担心这个问题。这些都是带我们的凉爽的因素。
这是第一个原因关于砖。然后我们真正使用它对模型性能指标,MLflow和模型的历史。MLflow跟踪性能指标和注册表,好吗?我走过一个演示。和我们的导游来平衡这个演示,一切以这样一种方式,满足初学者的利益和那些已经使用它。我已经使用一些开源的数据的自由对于这种情况演示,好吗?bob下载地址和通用架构与MLflow羽之间,这是一个离线架构实时(听不清)。这就是它看起来的样子。我们有各种砖工作区。
为一般组合砖工作区,我们有模板砖工作区。我们有一个通用组合砖工作区和生产工作区,好吗?工作空间的发展和生产空间的方式是很常见的存储库交互,这就是我们存储模型,对吧?这是一般的建筑看起来像。大多数时候我们的数据科学家和ML的工程师把数据从S3或[Mongle]或其他第三方数据源。他们正在做的工程特性引发集群。和他们有自己的ML框架。我们用Horovod深度学习的框架。我们使用MLflow跟踪实验,然后MLflow库注册模型。和注册使用的模型生产砖的工作区。 This is a general architecture which we have done, okay? And one of the good things we have all about is for example in case of Plume, we have multiple workspaces. We have a lock space for EMEA, Databricks workspace for EMEA, Databricks workspace for US, Databricks workspace for Asia Pacific, okay?
写,每个地区为例,欧洲有自己的开发智力和开发工作区。它有它自己的临时工作空间。它有一个生产工作区。所以我们要做的是我们所有的发展发生在所谓的发展空间,在构建模型,然后我们把它暂存到公共共享模型存款。所以我们保留一个空间作为共享现代注册表或工作区。我们检查在我们的模型。一旦模型被注册,他们可以访问不同的工作区。它可以在不同的地区。他们可以在一个特定区域集中的工作区。和工作区是在不同的地区可以访问模型。
这就是我们建立了。在接下来的幻灯片,我想为你演示所有这些事情,让它变得更加清晰。而不是一个架构幻灯片,我想给你们从我们所做的一个小例子。在这个演示,我们想展示的是如何使用MLflow训练,锁定和跟踪的机器学习模型。
对于这种情况,我将使用一个深度学习模型。它演示了使用LSTM autoencoder。但更重要的是我们要展示如何MLflow帮助我们,好吗?所以在MLflow,你可以设置一个实验您喜欢的任何名称。就我而言,我只是给一些随机的名字在这里,你可以点击这里观看实验。这就是你创建(听不清)的实验。然后开始你的实验运行一个特定的名字。
在这个例子中(听不清)最新的运行时,但你可以做定制命名约定开始运行。一旦你这样做,你可以做…其余的步骤非常普通。你让你的训练数据,加载它们。然后在每个机器学习最重要的一步一步像马尼拉,你想锁参数是什么?例如,当使用MLflow实验中,如果你看到这里,这是我在过去的两个实验。如果你点击这个实验中,你会看到很多参数模型是非常必要的跟踪。还有一些指标,如丢失或异常的数量或任何你们定义的客户数据。这些指标。所以每个实验都有这些参数和指标。所以根据你的需要你有机器学习算法,你拿起这些参数和指标。 Few of them can be constant parameters. Few of them can be metrics, which will vary which [eek] with each and every run.
然后它也有工件,如果你可以观察这个工件。它有一个毫升模型进行,可行的文件和一切。所以回去,对吗?如果你回到之前的幻灯片…。所以一旦你创建您的实验中,特定名称你运行你的实验,你必须定义这些参数和奉献的指标。在我的例子中,成本是每一个业务部门。想象你的模型是用这些领域或不同国家,不同领域的产品或不同领域的国家。你想切割和监控您的模型性能的片。所以它是非常重要的如何切片。你可能会在你的头脑中有具体的指标。 You might have some time step seasonality based ones involved. So whatever it is, you have to set those MLflow log parameters.
这是你如何设置您的日志参数。一旦你发送日志参数,您可以遵循构建深度学习的一般过程模型。我将非常快,因为这些都是常规的步骤。我将使用调谐器,这是一个调谐器(听不清)空间。你可以使用任何调谐器hyper-model参数调优,好吗?然后最后我想解释的是这就是你生活你的参数你修理坏的,一切。然后这将是我的架构如何我知道LSTM层和辍学,等等。你用你自己的体系结构。一旦你训练你的模型,对吧?和你日志指标? What you’re supposed to do is you’re supposed register your model. That’s what I wanted to cover. This is all training the model. One of the most important thing which I found is how do you wrap your pre-processes, the feature engineering and the model together so that you can get in a Python class, which can be leveraged by inference engines.
所以他们有一个非常美丽的东西叫MLflow PyFunc模型,您可以添加您的自定义预处理以及新模式结合在一起,这样可以(听不清)。这就是我们正在做的。我们有一个自定义预处理数据处理模块能够利用你的模型。所以你也要设置环境变量,你可以设置你的标签,好吗?一旦你这样做,你(听不清)Python模型,然后现在我们可以移动和注册模型到远程存储库。我会向您展示如何积极到远程注册模型。
你想发现你最好的实验中,在你的情况下,你的(听不清)函数或不管你选择什么,对吧?就我而言,我只是设置这个实验。我将使用这段代码去接实验基于日志,好吗?我运行我的日志,我得到最好的实验。然后使用注册表文件,这就是我想分享你的幻灯片我分享如何多个工作区,现在,一个工作空间有一个公共注册中心。在我们的指标,这个演示的情况下和特定的注册表URI,你可以设置你的注册表URI,然后你可以把炫耀你的模型特定运行模型,特定的注册表,好吗?这有点棘手,注册表URI和该工作区将会获得共同的工作区使用钥匙,好吗?
这只不过是一个范围和一组三个键确认。一旦配置,您可以访问公共存储库。这就是您注册您的模型。一旦您注册您的模型,我只是想告诉你注册模型如何,注册模型的一个例子,假设一次放电后,你可以看到各种动作的每一个版本,它是怎样执行的一切。这是三个完整的版本。所以为了他们,我又打开了,一切都运行,但这就是你注册模型的样子。
你的推理如何看起来像什么?推理是这样的,就给我一个第二,和所有你的推理模型,所以你使用你的PyFunc模型中,您可以调用数据。这是非常重要的,因为你是历史。你已经使用了一个你必须携带在你的工作空间,基于真正的问题你出现,你选择模型的最新版本,或在我的例子中我把旧的现代版两种。
您可以自动化这,你需要一个特定的模型限制,特定版本和负载模型。然后你可以运行你的推论上,瞧,你的结果。我想这就是我想要的结论。在这种情况下,这些都是常规的趋势。红点是异常或异常值的性能。所以希望你们有一些了解。我曾试图给你如何使用的概述MLflow记录您的指标和运行,登记你的模型和推理。谢谢每一个人。祝你有美好的一天。

Sameer Vaidya

“Sameer Vaidya导致数据架构在羽流,服务指数增长的要求分析和BI /见解从产品、营销、网络作战,销售,财务/会计和170 + CSP定制…
阅读更多

Raghav Karnam

Raghav Karnam

Raghav Karnam羽毫升工程,服务5亿+设备在我们的网络模型的影响。他的团队关注的方方面面毫升1)基础设施和工具。
阅读更多