【实践案例】Databricks 数据洞察 Delta Lake 在基智科技(STEPONE)的应用实践

简介: 获取更详细的 Databricks 数据洞察相关信息,可至产品详情页查看:https://www.aliyun.com/product/bigdata/spark

作者

高爽,基智科技数据中心负责人
尚子钧,数据研发工程师

1、基智科技

北京基智科技有限公司是一家提供智能营销服务的科技公司。公司愿景是基于 AI 和大数据分析为 B2B 企业提供全流程的智能营销服务。公司秉承开放,挑战,专业,创新的价值观从线索挖掘到 AI 智达、CRM 客户管理覆盖客户全生命周期,实现全渠道的营销和数据分析决策,帮助企业高效引流,精准拓客,以更低的成本获取更多的商机。截至目前,基智科技已与包括房产、教育、汽车、企业服务等领域展开广泛合作。

2、背景

在基智科技目前的离线计算任务中,大部分数据源都是来自于业务 DB(MySQL) 。业务 DB 数据接入的准确性、稳定性和及时性,决定着下游整个离线计算 pipeline 的准确性和及时性。最初我们在 ECS 上搭建了自己的 Hadoop 集群,每天使用 Sqoop 同步 MySQL 数据,再经由 Spark ETL 任务,落表写入 Hive ,ES,MongoDB 、MySQL ,通过调用 Service API 做页签的展示。

我们的 ETL 任务一般在凌晨1点开始运行,数据处理阶段约1h, Load 阶段1h+,整体执行时间为2-3h,下图为我们的 ETL 过程:
1.png

3、存在的问题

上面的架构在使用的过程中以下几个问题比较突出:

  • 随着业务数据的增长,受 DB 性能瓶颈影响突出。
  • 需要维护多套数据源,数据冗杂,容易形成数据孤岛使用不方便。
  • 天级 ETL 任务耗时久,影响下游依赖的产出时间。
  • 数据主要存储在 HDFS 上,随着数据的增加,需要增加集群,成本这一块也是不小的开销。
  • 大数据平台运维成本高。

4、选择 Databricks 数据洞察 Delta Lake的原因

为了解决天级 ETL 逐渐尖锐的问题,减少资源成本、提前数据产出,我们决定将T+1级 ETL 任务转换成T+0实时数据入库,在保证数据一致的前提下,做到数据落地即可用。

考虑过使用 Lambda 架构在离线、实时分别维护一份数据但在实际使用过程中无法保证事务性,随着数据量增大查询性能低,操作较复杂维护成本比较高等问题最终没能达到理想化使用。

后来我们决定选择数据湖架构,紧接着考察了市场上主流的数据湖架构:Delta Lake(开源和商业版)& Hudi。二者都支持了 ACID 语义、Upsert、Schema 动态变更、Time Travel 等功能,但也存在差异比如:

Delta Lake 优势:

  • 支持 Java 、Scala 、Python 及 SQL。
  • 支持作为 source 流式读写,批流操作简捷。

Delta Lake 不足:

  • 引擎强绑定 spark 。
  • 需要手动合并小文件。

Hudi 优势:

  • 基于主键的快速 Upsert / Delete 。
  • 支持小文件自动合并。

Hudi 不足:

  • 不能支持 SQL 。
  • API 较为复杂。

综合以上指标,加上我们之前的平台就是基于阿里云平台搭建,选型时阿里云尚未支持 Hudi ,最终我们选择了阿里云 Databricks 数据洞察(商业版 Delta Lake 专业性更强)。同时 Databricks 数据洞察提供全托管服务,能够免去我们的运维成本。

5、整体架构图

2.png

整体的架构如上图所示。我们接入的数据会分为两部分,存量历史数据和实时数据,存量数据使用 Spark 将 MySQL 全量数据导入 Delta Lake 的表中, 实时数据使用 Binlog 采集实时写入到 Delta Lake 表中,这样实时数据和历史数据都同步到同一份表里面真正实现批流一体操作。

集群迁移

前期在阿里同事的协助下我们完成了数据迁移的工作,实现在Databricks数据洞察架构下数据开发工作,我们的前期做的准备如下:

  • 数据存储将Hive数仓数据迁移到OSS,数据同步继续使用Sqoop定时执行。
  • 元数据管理从自建Hadoop集群迁移到阿里云RDS MySQL,后面随着我们业务的扩展会转入DLF元数据湖管理。
  • 大数据分析架构由自建CDH迁移到Databricks数据洞察。

3.png

Delta Lake 数据接入

每天做ETL数据清洗,做表的merge操作 ,delta表结构为:

%sql
CREATE TABLE IF NOT EXISTS delta.delta_{table_name}(id bigint,uname string,dom string,email string,update timestamp,created timestamp
)
USING delta
LOCATION '------/delta/'
%sql
MERGE INTO delta.delta_{table_name} AS A
USING (SELECT * FROM rds.table_{table_name} where day= date_format (date_sub (current_date,1), 'yyyy-mm-dd') AS B
ON A.id=B.id
WHEN MATCHED THEN
update set
A.uname=B.name,
A.dom=B.dom,
A.email=B.email,
A.updated=current_timestamp()
WHEN NOT MATCHED
THEN INSERT
(A.uname,A.dom,A.email,A.update,A.created) values (B.name,B.dom,B.email,current_timestamp(),current_timestamp())

6、Delta Lake 数据 Merge & Clones

由于 Delta Lake 的数据仅接入实时数据,对于存量历史数据我们是通过 SparkSQL 一次性 Sink Delta Lake 的表中,这样我们流和批处理时只维护一张 Delta 表,所以我们只在最初对这两部分数据做一次 merge 操作。

同时为了保证数据的高安全,我们使用 Databricks Deep Clone 每天会定时更新来维护一张从表以备用。对于每日新增的数据,使用 Deep Clone 同样只会对新数据 Insert 对需要更新的数据 Update 操作,这样可以大大提高执行效率。

CREATE OR REPLACE TABLE delta.delta_{table_name}_clone
DEEP CLONE delta.delta_{table_name};

7、产生的效益

  • 节省了 DB 从库的成本,同时 Databricks 数据洞察全托管架构我们节省了人力成本(省1运维+2名大数据)因此我们采用商业版 Databricks 数据洞察 Delta Lake 流批一体架构之后,整体成本有很大节省。
  • 得益于商业版 Databricks 数据洞察 Delta Lake 高效的执行引擎,执行效率上6-10的性能提升。
  • 实现了计算和存储分离,同时基于 DLF 元数据湖管理,可扩展性明显提高。
  • 商业版 Databricks 数据洞察提供了一整套批流处理的 Spark API 使我们研发工作高效便捷了很多。

8、后续计划

  • 基于 Delta Lake ,进一步打造优化实时数仓结构,提升部分业务指标实时性,满足更多更实时的业务需求。
  • 持续观察优化 Delta 表查询计算性能,尝试使用 Delta 的更多功能,比如 Z-Ordering ,提升在即席查询及数据分析场景下的性能。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java springmvc搭建_【JavaEE】Springmvc+Spring搭建方法及example

这一篇在前一篇Springmvc的基础上,加上Spring。Spring的主要用途叫做控制反转(依赖注入,IoC/DI)和面向切面的编程(AOP),本文只介绍IoC,因为AOP主要的应用场景是记录日志,暂时不需要,等我要整合的几个框架都…

腾讯王巨宏:开源是一项长跑,与开发者共赢开源未来

11月4日,2021腾讯数字生态大会Techo Day技术峰会在武汉召开,腾讯首次披露了在5大技术领域的开源新进展,并回顾了腾讯开源的四大变化。 腾讯公司副总裁王巨宏表示,云与开源共生共荣、相互支撑,共同为用户和开发者创造价…

python安装找不到硬盘_python2.7下安装theano

今下午在新硬盘上面重新升级Python2.7的时候,升级完之后,发现pip还是不行,使用“# wgethttps://bootstrap.pypa.io/ez_setup.py -O - |python”提示找不到libpython2.7.so.1.0,经过查找,可以使用如下方法解决&#xff…

【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤

简介: 以测试集群版本为例(EMR-4.4.1)—— Flink SQL Client 集成 Hive 使用文档 作者:林志成,阿里云EMR产品团队技术支持,拥有多年开源大数据经验 1、以测试集群版本为例(EMR-4.4.1&#xff…

python pycharm打包_【转】通过PyCharm 把Python 程序打包为exe

但是由于PyCharm 用了虚拟环境venv, 所有一些参数是有区别的,网上查询了很久没有查到这方面的信息,下面这些都是我自己探索出来的lin49940。步骤一,点击进入PyCharm 的输入终端Terminal步骤二,输入下面的语句&#xff…

云原生的进一步具象化

简介: 云原生这个概念已经越来越深入人心,但对“云原生到底是什么?”这个问题,仍然是各种各样的解读,最近对云原生具体是什么有了点感触,于是写下来分享和探讨下。 云原生这个概念已经越来越深入人心&…

java求极限值_高等数学——讲透求极限两大方法,夹逼法与换元法

本文始发于个人公众号:TechFlow今天的文章聊聊高等数学当中的极限,我们跳过极限定义以及一些常用极限计算的部分。我想对于一些比较常用的函数以及数列的极限,大家应该都非常熟悉。大部分比较简单的函数或者数列,我们可以很直观地…

Kubernetes 上调试 distroless 容器

作者 | Addo Zhang来源 | 云原生指北Distroless 镜像Distroless 容器,顾名思义使用 Distroless 镜像[1]作为基础镜像运行的容器。"Distroless" 镜像只包含了你的应用程序以及其运行时所需要的依赖。不包含你能在标准 Linxu 发行版里的可以找到的包管理器、…

技术干货 | 如何在 Library 中使用/依赖 mPaaS?

简介: 在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。 使用场景 在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。本文以将复用 mPaaS 扫码组件的…

java 租车管理系统_jsp+servlet+jdbc实现的java web共享租车信息管理系统,包括登陆注册,页面框架Easy UI...

项目描述初学java web项目时做的一个课设,基于servletjspjdbc的后台管理系统,包含5个模块:汽车账户部管理、租车账户部管理、汽车信息管理表、租车记录表、租车租聘表。功能完整,均能实现增删查改。运行环境jdk8tomcat8.5mysql5.7Eclipse项目…

Java单元测试技巧之PowerMock

简介: 高德的技术大佬向老师在谈论方法论时说到:“复杂的问题要简单化,简单的问题要深入化。” 这句话让我感触颇深,这何尝不是一套编写代码的方法——把一个复杂逻辑拆分为许多简单逻辑,然后把每一个简单逻辑进行深入…

OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心

简介: 2021年5月20日,据国际事务处理性能委员会(TPC,Transaction Processing Performance Council)官网披露,蚂蚁集团自主研发的分布式关系型数据库OceanBase在数据分析型基准测试(TPC-H&#x…

python小波分解与重构_小波分解和重构

小波变换能够很好地表征一大类以低频信息为主要成分的信号,小波包变换可以对高频部分提供更精细的分解详见(http://www.cnblogs.com/welen/articles/5667217.html)小波分解函数和重构函数的应用和区别(https://www.baidu.com/link?urlNsLWcGxYPabqB0JEFzkjHzeLmcvG…

Java中string与String区别_JAVA中String与StringBuffer的区别

JAVA中String与StringBuffer的区别2009-12-3文字大小:大中小在java中有3个类来负责字符的操作。1.Character 是执行单个字符操作的,2.String 对一串字符执行操作。不可变类。3.StringBuffer 也是对一串字符执行操作,但是可变类。String:是对象不是原始类…

快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”

简介: 大前端团队如何选型技术?如何快速上手?如何高效协同?让我们看看快成科技如何解决这一问题。 导言 从 2017 年开始,GMTC“移动技术大会”就更名为“大前端技术大会”。发展至今,混合开发、原生开发、前…

直接 root Android 设备,会「隐身」的恶意软件 AbstractEmu 正在偷偷作恶

整理 | 梦依丹出品 | CSDN(ID:CSDNnews)“我就点一下,钱就没了”!手机不仅给我们带来便利,而且还记录着我们方方面面的信息,甚至是一言一行。正因此,它成了漏洞制作者、恶意软件黑客…

进入中国内地第31年的麦当劳 ,为什么还能不断吸引新消费人群?

简介: 麦当劳的数字化转型从2016年开始全面推行,力求无论何时何地何种方式,消费者都能随心享受麦当劳的产品与服务,数字化转型在过去几年取得显著效果!而阿里云数据中台的引入,将成为麦当劳数字化转型在拓展…

tomcat jsvc java_opts_Tomcat 学习笔记(2) - 使用 jsvc 启动tomcat

jsvc 是个什么是么高端武器呢全称:Java Service还是没有弄明白是什么,那就继续往下看。我们赞不讨论 tomcat 应不应该运行在80端口上。假如我们有需求,需要 tomcat 运行在 80 端口上。那么一个限制就出现了。*nix操作系统只用root权限才能监听…

python 元类 type_python Class:面向对象高级编程 元类:type

type的用法:1、普通的type用法:检查类型class my(object):def hello(self, nameworld):print(Hello, %s. % name)h my()print(type(my))print(type(h))运行结果:my是class, 所以它的类型是type,h是class的实例,所以它的类型是cla…

配置审计(Config)变配报警设置

简介: 本文作者【紫极zj】,本篇将主要介绍通过配置审计的自定义规则等服务,对负载均衡进行预警行为的相关介绍。 前言 配置审计(Config)将您分散在各地域的资源整合为全局资源列表,可便捷地搜索全局资源&…