摘要: 海量数据处理平台,服务于批量结构化数据的存储和计算,提供海量数据仓库的解决方案以及针对大数据的分析建模服务.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节,从而达到分析大数据的目的。
MaxCompute(原ODPS)的概念
大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的PB/EB级数据仓库解决方案,具备万台服务器扩展能力和跨地域容灾能力,是阿里巴巴内部核心大数据平台,支撑每日百万级作业规模。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。(官方文档有这里就不多做介绍了)
优势
用户不必关心分布式计算细节,从而达到分析大数据的目的。
应用场景
大型互联网企业的数据仓库和BI分析、网站的日志分析、电子商务网站的交易分析、用户特征和兴趣挖掘等。
MaxCompute(原ODPS)的架构
MaxCompute由四部分组成,分别是客户端 (ODPS Client)、接入层 (ODPS Front End)、逻辑层 (ODPS Server) 及存储与计算层 (Apsara Core)。
ODPS的客户端有以下几种形式:
1.Web:ODPS以 RESTful API的方式提供离线数据处理服务;
2.ODPS SDK:对ODPS RESTful API的封装,目前有Java等版本的实现;
ODPS CLT (Command Line Tool):运行在Window/Linux下的客户端工具,通过CLT可以提交命令完成Project管理、DDL、DML等操作;
3.ODPS IDE:ODPS提供了上层可视化ETL/BI工具,即“采云间”,用户可以基于采云间完成数据同步、任务调度、报表生成等常见操作。
ODPS接入层提供HTTP服务、Cache、Load Balance,用户认证和服务层面的访问控制。
1.逻辑层又称作控制层,是ODPS的核心部分。实现用户空间和对象的管理、命令的解析与执行逻辑、数据对象的访问控制与授权等功能。在逻辑层有Worker、Scheduler和Executor三个角色:
2.Worker处理所有RESTful请求,包括用户空间(project)管理操作、资源(resource)管理操作、作业管理等,对于SQL DML、MR、DT等启动Fuxi任务的作业,会提交Scheduler进一步处理;
3.Scheduler负责instance的调度,包括将instance分解为task、对等待提交的task进行排序、以及向计算集群的Fuxi master询问资源占用情况以进行流控(Fuxi slot满的时候,停止响应Executor的task申请);
4.Executor负责启动SQL/ MR task,向计算集群的Fuxi master提交Fuxi任务,并监控这些任务的运行。
计算层就是飞天内核(Apsara Core),运行在和控制层相互独立的计算集群上。包括Pangu(分布式文件系统)、Fuxi(资源调度系统)、Nuwa/ZK(Naming服务)、Shennong(监控模块)等。ODPS中的元数据存储在阿里云计算的另一个开放服务OTS(Open Table Service,开放结构化数据服务)中,元数据内容主要包括用户空间元数据、Table/Partition Schema、ACL、Job元数据、安全体系等。
MaxCompute处理流程
下面将以一个完整的SQL语句为例,介绍提交后经过MaxCompute处理的全流程:
提交作业:
1.通过console提交一个SQL语句。
2.调用SDK计算配置信息中的签名。
3.发送 RESTful 请求给HTTP服务器。
4.HTTP 服务器发送请求到云账号服务器做用户认证。
5.认证通过后,请求就会以 Kuafu通信协议方式发送给 Worker。
6.Worker判断该请求作业是否需要启动Fuxi Job。如果不需要,本地执行并返回结果。
7.如果需要,则生成一个 instance, 发送给 Scheduler。
8.Scheduler把instance信息注册到 OTS,将其状态置成 Running。
9.Scheduler 把 instance 添加到 instance 队列。
10.Worker把 Instance ID返回给客户端。
运行作业:
1.Scheduler会把instance拆成多个Task,并生成任务流DAG图。
2.把可运行的Task 放入到优先级队列TaskPool中。
3.Scheduler 有一个后台线程定时对TaskPool 中的任务进行排序。
4.Scheduler 有一个后台线程定时查询计算集群的资源状况。
5.Executor在资源未满的情况下,轮询TaskPool,请求Task。
6.Scheduler判断计算资源。若集群有资源,就将该Task发给Executor。
7.Executor调用SQL Parse Planner,生成SQL Plan。
8.Executor 将 SQL Plan 转换成计算层的 FuXi Job 描述文件。
9.Executor 将该描述文件提交给计算层运行,并查询 Task 执行状态。
10.Task 执行完成后,Executor更新 OTS 中的 Task信息,并汇报给 Scheudler。
11.Schduler 判断 instance 结束,更新 OTS 中 instance 信息,置为 Terminated。
查询状态:
客户端接收到返回的 Instance ID 后,可以通过 Instance ID 来查询作业状态:
1.客户端会发送另一个 REST 的请求,查询作业状态。
2.HTTP 服务器根据配置信息,去云账号服务器做用户认证。
3.用户认证通过后,把查询的请求发送给 Worker。
4.Worker 根据 InstanceID 去 OTS 中查询该作业的执行状态。
5.Worker 将查询到的执行状态返回给客户端。
这里主要说下计算层的MR Job和SQL Job,因为ODPS有对外提供MapReduce编程接口,来访问ODPS上的数据,其中MR Job就是用来跑那些任务的。而SQL Job主要用来跑通过客户端接受的SQL查询请求的任务。
逻辑层里主要有二个队列,一个是instance队列,一个是Task队列,Scheduler负责instance的调度,负责将instance分解成Task放入到Task队列,重点是:Task队列是按照优先级排序的,负责排序的就是Scheduler发起的一个后台线程。Executor在资源未满的情况下,轮询TaskPool,请求Task,Executor调用SQL Parse Planner,生成SQL Plan,然后将SQL Plan转换成计算层的 FuXi Job 描述文件,最终将该描述文件提交给计算层运行,并查询 Task 执行状态。
MaxCompute生态圈
ODPS提供了数据上传下载通道,SQL及MapReduce等多种计算分析服务,并且提供了完善的安全解决方案,其功能组件(绿色虚线部分)以及周边组件(蓝色标识)。
MaxCompute计算集群分布
首先整个ODPS计算资源被分成多个集群,每个project可以配置多个集群,但是只能默认跑在其配置的默认集群(默认集群只有一个)上面,除非手动切换。
每个集群会被分成多个quota,一般某个project会跑在某个集群上的quota上的,每个quota有固定的计算资源配额,你的project也会有固定的至少获取到的资源,最大获取到的资源就是所在quota的配额,不一定能获取到最大的配额,因为某个quota是多个project共享的。
Logview分析
当某个任务跑的比较慢,我们可以根据其logview来发现问题,进行优化,下面给大家分享如何对logview进行分析,下面我们来看根据某个logview的分析步骤:
点击圆形的sql,就可以看到实际执行的sql,点击diagnosis就可以看到对sql执行的诊断,是否资源充足,是否有长尾情况,是否有数据倾斜情况。
还可以看到任务运行的开始时间,结束时间,运行时间,点击detail就可以看到这个任务执行详情,包括有向无环图,Mapper和Reducer或Join节点具体的运行记录。 下面是点击detail之后,出现的画面,也是我们重点要分析的地方,如下图所示:
我们可以看到左边是整个实例所包含的任务运行的有向无环图,一共有三个Task,右边包括具体的三个Task的详细信息,还有summary,你可以看到每个Task的input和output的记录数,还可以看到每个Task开启了几个instance进行运行。
点击每个Fuxi Job就可以在下面看到每个Job详情:具体如下图所示:
从上面可以看到,M1_STG1这个job一共起了46个instance来跑任务,这个job的开始时间在上面个红色的框框里,每个instance的开始和起始时间在下面的框框里,每个instance实际运行时间就是下面Latency时间,单位是s,最右边的框框里显示的是这个job下面的所有instance里面的最小最大和平均运行时间,如果说差异比较大,可能会有长尾或者数据不均匀所致,我们要根据这些信息进行分析,该如何去优化这个Job。
优化例子
具体的优化过程以后会给大家具体讲解,下面先给大家展示一个例子,由于小表和大表进行join所造成的长尾问题的解决方案以及效果:
-优化方案:
我们将join的二个小表,使用mapjoin的方式进行优化,将每个小表的内容load到每个mapper节点的内存中,这个速度可以大大优化,但是对小表的大小是有限制的,如果太小,可以设置每个mapper的memery的大小,但是这些都不是万能的,当资源不足时,可能会造成资源等待。所以优化方案要根据自己sql以及涉及到的数据量进行优化,任何优化方法都不是万能的。
-优化前:
-优化后:
后续
希望大家在跑sql任务的时候,多看看自己的logview,不要太蛮力的去跑sql,这样不仅占用资源太多,而且还会影响别人的任务运行。优化固然很难,但是也要慢慢走下去。
以后会分享更多的优化方案。
阅读更多干货好文,请关注扫描以下二维码:
相关推荐
- LogView是一款阿里云提供的日志分析工具,通过分析工具可以诊断和优化SQL语句,提高大数据处理效率。 以上内容主要涵盖了在阿里云环境下,大数据数仓建设过程中可以采用的性能优化策略和技术点。这些策略和技术...
《LogView:高效的大文件查看解决方案》 在日常的IT工作中,处理大量日志文件是常见的情景。这些日志文件往往包含丰富的系统运行信息,对于排查问题、优化性能至关重要。然而,当文件大小达到一定程度时,传统的...
在信息技术领域,日志记录是系统运行过程中的重要组成部分,它记录了系统、应用程序以及服务的运行状态和异常情况,为故障排查、性能优化以及安全审计提供了宝贵的数据。本文将深入探讨一款名为"LogView"的日志查看...
学习LogView源码不仅可以提升我们的日志管理技能,还能帮助我们掌握软件设计和实现的实践经验,尤其是对于初学者,这是一个深入了解软件工程的宝贵资源。 通过对LogView源码的深入研究,我们可以获得关于日志管理...
LogView 2.3.1 是一款专业的日志查看和分析工具,专为处理和解析各种类型的应用程序、系统或网络日志文件而设计。它提供了丰富的功能,帮助用户高效地管理和理解大量的日志数据,从而更好地进行故障排查、性能监控和...
8月9日MaxCompute直播课件下载。 了解更多MaxCompute产品和技术相关内容,可扫描二维码加入“MaxCompute开发者交流”钉钉群。
LogView 是一款作为一个 CGI 程序在服务器上运行并且提供总体要求分析,专项调查,高级照会列表,小时概要等功能的服务器日志分析软件.该软件使用一个简单的 HTML 界面并且按照每分钟100MB 的速度处理日志文件.
总结起来,大日志查看工具LogView以其高效的文件处理能力、丰富的分析功能以及良好的平台兼容性,成为了日志管理领域的一款得力助手。对于那些需要处理大量日志信息的专业人士来说,LogView无疑是一个值得信赖的选择...
实时查看文件日志是IT运维和开发者日常工作中的一项重要任务,尤其在系统监控、调试程序或分析系统行为时。Logview是一款国外的免费软件,专为实时查看文件变化而设计,用户可以根据需求自定义字符集,适应不同环境...
《LogView工具LogView.exe深度解析》 ...对于开发者、运维人员以及任何需要处理大量日志数据的人来说,LogView.exe都是不可或缺的得力助手。在日常工作中熟练掌握并利用这款工具,无疑将大大提高我们的工作质量和效率。
日志管理是软件开发中的重要组成部分,它记录了程序运行过程中的事件、错误和调试信息,对于故障排查、性能优化以及系统维护具有至关重要的作用。LogView日志管理系统正是这样一款专注于日志远程记录的工具,它能够...
本文将详细介绍两款实用工具——LogView.exe和SplitFile.exe,以及它们在处理大文件时的强大功能。 LogView.exe,正如其名,是一款专门用于查看大日志文件的高效工具。它针对大文件的特性进行了优化,即使面对上GB...
这得益于其优化的文件读取算法,它能按需加载数据,避免一次性加载整个文件造成内存资源的浪费,从而实现快速响应和低内存占用。 使用LogView,用户可以迅速定位到关键信息。它支持多种过滤和搜索功能,比如按照...
《LogView日志查看软件:高效分析与管理大容量日志的利器》 在IT行业中,日志文件是系统运行状态的重要记录,它们包含了程序运行过程中的错误信息、调试线索以及性能数据。对于开发者和运维人员来说,有效地查看和...
《C++ LogView 源码学习指南...总的来说,通过学习 C++ LogView 源码,我们可以学习到日志处理的实践技巧、GUI 编程、数据结构与算法应用以及性能优化等多个方面的知识,这对于提升个人的 C++ 开发能力具有很大的帮助。
总的来说,Logview这样的日志查看器工具是IT专业人士不可或缺的辅助工具,它们简化了日志分析过程,加速了问题排查,有助于维护系统的稳定性和优化软件性能。无论是个人开发者还是企业团队,都能从中受益。通过...
《大文本查看软件 Logview:高效管理与分析日志文件》 在信息技术领域,日志文件扮演着至关重要的角色,它们记录了系统运行过程中的各种事件、错误信息以及调试数据,是诊断问题、优化系统和确保稳定运行的重要参考...
它可以提高开发效率,因为开发者无需手动检查日志文件,而是可以直接在界面中查看和分析,这对于调试和优化代码至关重要。 从标签中可以看出,“logview for .NET”是专为 .NET 开发者设计的日志查看工具,而“log4...