cover_image

微保离线数据开发平台DataStudio介绍

chriscchen 微保技术
2020年08月28日 09:01

作者:chriscchen 陈华佳

编辑:lynnewei 魏琳

DS平台致力于为用户提供一站式数据开发服务,打造沉浸式数据开发工作台,让用户可以在平台里面无缝衔接地完成ETL流程的相关工作。用户无须频繁地切换工作台,打断开发思路;无须过多地关注任务底层的提交过程,专注于业务本身的逻辑开发,提高开发效率。

1

背景与目标

1.1 背景

日常数据分析和开发工作中,很多需求要求快速响应并得出结果,如果每一个需求都写在代码文件中,然后编译打包上传再执行,就会非常浪费时间,尤其是写出来的查询语句频繁出错,需要不断改正再重复打包上传。在业务快速发展的初期,微保数据中心内部开发了一些工具/平台去满足开发人员的需求,快速接入大数据平台的组件。但随着业务的发展,这些工具/平台的问题开始暴露出来,主要有以下几个方面:

  • 缺乏权限管控 用户可以访问所有Hive数据,并且都有写权限,权限管理粗放,存在数据安全性等问题,无法直接给业务分析人员开放。缺乏统一的权限管控流程,用户要用数据时,不知道如何申请;开通权限流程非常复杂,需要多个负责人同时处理;用户离职或转岗时,没有及时清理权限。

  • 缺乏资源隔离 没有对用户的任务资源进行控制,单个用户跑大任务(读写数据量大)会影响整个平台的任务。

  • 缺乏任务依赖管理 大量任务在同一个项目,同一个层次,同一时间启动。任务间的依赖基本没有,上下游依赖依靠在SQL里检测上游表数据量是否为0。缺乏优先级调度。

  • 稳定性、高可用、可扩展性存在隐患 服务部署存在单点隐患,任务脚本缺少备份。后台服务是基于python flask实现的单机服务,不便于水平扩展。

  • 单一计算引擎和语言 只支持Hive SQL,并且没有扩展的计划。为了更好地服务数据开发人员、数据分析人员,提高数据开发效率,基础数据组设计并实现了离线数据开发平台Data Studio(以下简称DS)。

1.2 目标

DS平台致力于为用户提供一站式的开发服务,打造沉浸式的开发工作台。

在DS平台里面,我们致力于打造一个完整的ETL开发生态圈,让用户可以在平台里面一站式地完成ETL流程的相关工作,从权限申请,到SQL开发、调试,最后发布到调度系统上定时调度,全部可以在DS平台里面无缝链接起来。用户无须频繁地切换工作台,打断开发思路,无须过多地关注任务底层的提交过程,只要专注于SQL本身的逻辑开发,提高开发效率。

1.3 术语

  • Hadoop

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构,提供分布式存储和分布式计算能力处理海量数据。

  • Hive

    Hive是由Facebook开发的基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。Hive SQL语法是SQL-Like,非标准SQL语法。

  • Presto

    Presto是由Facebook开发的基于内存进行计算的开源大数据分布式高性能SQL查询引擎。Presto SQL语法遵循ANSI标准。

  • Azkaban

    Azkaban是由Linkedin开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。DS平台的定时调度功能是基于Azkaban进行封装的。

  • WOF

    WOF是微保基础运营平台,提供登录认证、页面权限管理,是微保所有服务的统一接入网关。

2

平台概述

从平台角度来看,整个大数据主要分成了两层,一层是基础平台,一层是功能平台。

基础平台主要是各种开源/商业组件,提供基础的计算存储能力。

功能平台是基于这些组件进行封装之后的服务,主要是为了方便分析人员快速进行数据开发。

DS平台属于功能平台的一部分,目前DS平台主要是基于Presto实现的,提供基于Presto的SQL开发调度功能,后续会扩展支持更多的计算引擎,如Hive、Spark、MySQL。

图片

2.1 平台架构

图片

DS平台的架构采用了当前流行的微服务框架。用户的入口只有一个:就是前端的IDE。IDE是由WOF 统一管理的,由WOF统一控制页面权限。IDE发起的请求统一走服务网关转发,在服务网关处做好负载均衡、请求鉴权等功能。DS平台的各个服务统一在服务注册中心处注册,以便服务网关进行服务发现。DS平台的服务配置、任务记录统一保存到MySQL 中。

2.2 平台服务

DS平台有几个相对独立的微服务,这些微服务是我们在需求分析之后,结合团队的成员组成进行拆分的结果,主要有4个微服务:

  • 项目发布服务 项目发布服务作为DS平台与Azkaban的桥梁。项目发布服务将相关脚本按照用户指定的执行顺序进行打包,发送给Azkaban进行定时调度。其中,发布模块还封装了DS平台的任务执行逻辑,方便Azkaban调用。

  • 作业提交服务 作业提交服务是DS平台的关键服务,包含两块内容:脚本管理、任务执行。脚本管理负责用户脚本的增删改查等功能,任务执行负责任务的提交、监控、结果查询等功能。DS平台所有的任务都会提交到作业提交服务上面进行统一管理、跟踪、审计。作业提交服务会根据任务的类型选择不同的计算引擎执行,如Presto、Hive等,并且采集计算引擎上的任务状态、日志等信息,实时反馈给用户。

  • 权限管理服务 主要负责用户的数据权限管理功能。用户只需一次申请,在不同的计算引擎里面是通用的,如Presto、Hive,解决大家经常遇到的重复申请权限的问题。

  • 元数据服务 主要负责Presto的元数据查询。IDE上面的元数据目录树、SQL自动补全,都是基于这个服务实现的。

各个服务内部都是高可用的,并且支持服务水平扩展。为了做到分布式服务这个架构,我们做了不少的工作来保证数据一致性、状态一致性,让不同实例能够提供一样的服务。

2.3 功能模块

图片

这是DS平台的功能模块图,橙色的是目前已经实现的功能。这些模块目前都是基于Presto实现的,后续DS平台还会继续扩展,支持更多的计算引擎,如Hive、Spark、MySQL等。

2.4 一期特点

图片

DS平台一期主要有四个特点:

  • 基于Presto计算引擎 DS平台能够更好地检测Presto语法。同时可以利用Presto跨数据源查询的特性,关联多个数据源进行数据分析。

  •  自动化权限管控体系 用户只需要在DS平台里面申请权限,经过直属上级、数据业务属主审批通过之后就可以马上使用数据,无须等待相关人员处理,也无须关心底层的权限是如何处理的。DS平台通过在平台层解析SQL,获取用户的操作、库表信息,交由权限管理服务统一判断授权信息,一是避免底层复杂的授权流程,二是能够更好地审计用户操作。在任务出现问题时,能够快速定位原因。

  • 支持任务编排 一般情况下,数据开发人员在处理ETL时都会有好几个步骤,比如先进行数据清洗,再进行数据转换,最后生成业务报表数据。在旧平台上,这些步骤只能放到一个脚本里面去实现,一旦出现问题,需要花费大量的时间去定位到底是哪个步骤出错,再花费大量的时间去重跑。在DS平台这里,用户可以将每个步骤放到不同的脚本里面,然后通过任务编排的方式,定义一个有向无环图DAG,决定好脚本的执行顺序,然后一键发布到Azkaban上面定时执行。

  • 日志分离 DS平台对任务日志与结果数据进行了分离,方便用户查看数据。用户也可以在一个脚本里面编写多个查询语句,一次性地获取多个结果进行查看,DS平台对不同的结果数据也进行了分离,形成不同的数据集。

3

平台功能

3.1 平台初探

小明是一名数据分析人员,最近他听同事说有一个离线开发平台,英文名叫DataStudio(DS),可以让分析人员在上面进行一站式的自助数据开发。正好他有一个数据提取的需求,上周跟开发人员商(si)量(bi)了好久,都没有办法让开发人员优先安排上,不知道要等到猴年马月。既然如此,求人不如求己,小明决定自己摸索一把这个DS平台。

小明很快就从内部共享文档中搜索到DS平台的用户手册,经过一轮囫囵吞枣地阅读,大概了解DS平台的使用套路:申请权限 -> 数据开发 -> 任务调度,如下图:

图片

这个套路小明相当熟悉,不就是ETL开发的常见流程吗,平时跟开发人员打交道没少听他们讲。

3.2 权限自助申请

看到这个流程,小明不禁打起了退堂鼓,想起上次申请一份数据权限的折腾过程,心里不由凉了几分。上次权限申请的时候,先是找各位老板沟通,说明申请背景原因。老板同意之后,又要去找各个运维童鞋,让他们帮忙处理授权。

本来小明已经准备放弃了,但看到“自动化授权”这几个字让他燃起一点希望。本着尝试一次、太复杂就拉倒的心态,小明在DS平台上点击“权限申请”,平台自动跳转到了办事中心。

图片

这个页面看起来还挺简单的,小明按照用户手册的指引,尝试在现存表权限那里“增加一行”,然后依次选择:

  • “环境” – “PROD”

  • “开发工具” – “Presto”

  • “组件” – “Hive”

轮到“库”、“表”的时候,小明以为会跟以前那样,由自己手动填写库表名,但没想到这里竟然可以直接选择Hive里面的库名、表名,避免手打出错,还可以进行搜索,使用起来倒是挺方便的。

图片

填好表单之后点击提交,申请自动就流转到小明的直属上级进行审批了。正好老板就在旁边,小明跟老板说明一下情况,老板很快就审批通过了。

3.3 数据开发探索

小明看了看时间,没想到还不到15分钟就搞定权限了,这效率有点高呀。趁热打铁,小明按照用户手册的指引,很快就建好项目、脚本,并且写下了自己的第一条SQL :SELECT COUNT。在输入库表名的时候,小明发现DS平台竟然可以自动补全库表名,这简直就是数据分析人员的福音啊,终于不用记住那一长串复杂的表名了。

图片

点击“运行”,不到5秒就返回了结果,并且按照表格的形式展示,看起来还不错的样子。

图片

在脚本的编辑器下面,可以看到脚本的“执行记录”,里面还可以查看对应记录的“执行日志”、“执行结果”,还真是方便。

图片

经过不到半个小时的摸索,小明已经确定,DS平台可以满足自己的数据开发需求,接下来就是按照自己的想法进行SQL开发,提取成自己想要的数据。

小明在开发过程中,突发奇想尝试下Presto引擎支持跨数据源查询这个特性。经过一番准(zhe)备(teng),小明编写了以下SQL,ds_demo_table是Hive的表,mysql_table是MySQL的表。运行脚本,发现确实可以直接关联Hive、MySQL,这样他就可以针对Hive与MySQL做一些数据校验的工作,太好了!

图片

3.4 项目发布

经过大半天的开发,终于把需要的数据都按要求提取好了。但这时小明想起一个问题,要怎样才能定时执行这些脚本呢?这些数据他希望能够每天都进行提取的。

小明再次阅读DS平台的用户手册,发现DS平台已经提供了定时调度的功能。按照手册的指引,小明选中刚刚开发好的项目,点击“发布”按钮。

图片

进入到发布页面,按照业务的要求,配置任务的调度信息:每天早上6点开始跑任务。

图片

配置了任务的调度时间,按照正常情况,任务会在7点半完成。作为一名考虑周全的分析人员,小明希望在任务延迟的时候可以及时通知到自己,这样他就可以尽早处理,保证在9:30前,就是老板上班之前按时产出数据,因此他又配置了相关告警,如果任务在7:40还没完成,就打电话通知自己。

图片

配置好调度,小明开始编排自己写好的几个脚本,将他们从左侧拖动到右侧,按照预期的执行顺序进行连接,生成了一个有向无环图DAG:

图片

配置完成后,点击“发布”按钮,提示“发布成功”,大功告成。

第二天小明兴致勃勃地来查看数据,发现DS平台按照他预期的时间执行了任务,并且按预期产出了数据。

图片

有了这个平台,小明终于可以快速完成数据提取这些需求了,不用再等开发人员排期,而且可以自己把控开发的逻辑,专注于业务数据的分析。

4

平台规划

DS平台未来会继续发展,实现以下功能:

  • 接入更多的计算引擎,如Hive、Spark、MySQL等。

  • 提供任务资源管理器,可以对任务的资源进行预估、申请、管控、展示等。

  • 支持跨项目依赖,完善任务的血缘关系。

  • 提供代码版本管理,支持代码版本对比、回滚等。

  • 接入数据集成、数据质量、数据字典等服务,完善ETL开发流程。

DS平台作为微保数据中台项目的一员,承担着数据中台对外赋能环节中的一个重要角色,目标是成为离线数据开发的统一入口,为数据开发人员、数据分析人员提供一站式服务,打造一个沉浸式的开发工作台,提高数据开发效率。

若童鞋们有技术问题想探讨,欢迎在评论区留言。



图片 图片


继续滑动看下一个
微保技术
向上滑动看下一个