△Meetup 现场视频

Kylin 平台化实践

首先,介绍下我们为什么进行平台化改造?

我们部门为公司内其他业务线提供了各种大数据平台,如 Kylin、HBase、Spark、Flink 等等,提供公共统一的平台系统势必会牵扯到用户管理、资源隔离、部门内各个平台的融合等问题,而 Kylin 现有的用户管理、资源隔离机制并不能满足我们需求,基于此,我们对 Kylin 进行了平台化改造。平台化改造完成后,我希望在以下几个方面,能够有一些改进:

用户管理

资源隔离

易用性提升

方便运维

1.   用户管理

为了便于系统的管理及安全,公司内部有一套自己的认证系统,而且需要用个人账号去验证,所以 Kylin 作为一个平台对外提供服务的话,也需要接入到该系统。所以,我们新增了一个用户管理界面,该界面展示了 Kylin 平台内的所有用户。管理员可以新增任一用户到 Kylin 平台,新增用户时会填写企业微信名、用户角色以及是否激活用户。当用户登录系统时,会自动检测用户账号以及该账号是否在平台内注册,如果没有注册则无权限,反之自动登录系统。

2. 内部 Hive 兼容

由于历史原因,我们部门内的 Hive 版本(THive)与 Kylin 不兼容,这就导致 Kylin 无法正常访问 Kylin 集群,所以我们采用了上图所示的兼容方案。首先,我们使用社区 Hive 版本搭建一个全新的 Hive,并作为 Kylin 的默认 Hive;其次,当 kylin 加载源表时,我们是通过内部的 UPS 系统读取 THive 的元数据信息;最后,在 Load 源表到 Kylin 时,我们根据表的元数据信息在 Kylin 的 Hive 上创建一张相同的表,但该表的存储路径依旧指向 THive 的路径,而用户在构建 cube 时,则访问新创建的表,至此就解决了 Kylin 访问 THive 的问题。

3. 计算资源可配置化

目前,Kylin 配置计算资源信息有两种方式:一是在 Kylin 配置文件中配置一个全局的计算集群及队列;二是在创建工程或者 Cube 时,在扩展参数中指定集群配置。这两种配置方式在灵活性及便捷性方面都比较差,而在我们内部是有接口可以获取到某一个用户有计算资源的计算集群及计算队列的,所以,在创建工程或者 Cube 时,我们使用了下拉框选择式的方式,让用户选择提交任务的计算资源及队列,从而大大简化了用户的使用流程。

4. 通知机制

Kylin 只提供了发邮件通知的功能,而作为目前使用最广泛的工具,微信、企业微信在实时性及便捷性方面都远远胜于邮件,所以,我们提供了邮件、微信、企业微信三种方式,供用户选择。

5. 定时调度

Kylin 系统自身并没有提供定时调度功能,但基本上每家公司都有自己的统一调度平台,我们也不例外。我们通过 Kylin 提供的API接口,将 Cube 定时构建的功能作为一个插件集成到了公司内部的统一调度平台上。

6. 业务接入

做完以上平台化改造后,Kylin 平台基本具备了接入不同类型业务的能力,用户申请接入流程如上图所示。

业务使用情况:

我们团队是在今年初才开始引入 Kylin,目前已经在使用的业务主要有 QQ 音乐、腾讯视频、广点通、财付通等,Cube 的数量有 10 个,单份数据存储总量是 5 T,数据规模在 30 亿条左右。

Flink Cube Engine 原理及实践

目前,Kylin 已经支持使用 MapReduce 和 Spark 作为构建引擎,而作为目前比较火的流批一体的大数据计算引擎怎能缺席?所以我使用 Flink 开发了一个高性能的构建引擎:Flink Cube Engine。

Flink Cube Engine 是腾讯基于 Kylin 插件化的 Cube Engine 架构开发的一个高性能构建引擎,目前已具备了上线使用的能力,感兴趣的同学可以体验一下,目前该引擎已经在腾讯生产环境上线 1 个月+,非常稳定而且效果不错。

Umbrella issue:

https://issues.apache.org/jira/browse/KYLIN-3758

分支:

https://github.com/apache/kylin/tree/engine-flink

1. 支持 Flink Engine 的子任务

Kylin 的一次 Cube 构建任务,包含了很多个子任务,而最重要的莫过于 Cube 构建这一步骤,所以,我们在 build 和 merge Cube 这两种任务中,优先实现了Cube 构建这一步骤,其他计算步骤依旧通过使用 MapReduce 来实现。

2. 如何使用 Flink Cube Engine

选择使用 Flink Cube Engine 的方式也和选择 Map Reduce 和 Spark 任务类似,我们提供了前台可视化的界面,供用户选择。

3. Flink Cube Engine 与 Spark  (线上业务)

上图是我们内部业务上线 Flink Cube Engine 之后的性能对比,从图中可见,该步骤的构建耗时从 49 分钟降到了 13 分钟,优化效果比较明显。两种情况的资源配置如下:

Flink 配置为:

-ytm 4G -yjm 2G -ys 1 -p 100 -yn 100

Spark 采用的动态分配资源如下:

kylin.engine.spark-conf.spark.dynamicAllocation.enabled=true

kylin.engine.spark-conf.spark.dynamicAllocation.minExecutors=2

kylin.engine.spark-conf.spark.dynamicAllocation.maxExecutors=1000

kylin.engine.spark-conf.spark.dynamicAllocation.executorIdleTimeout=300

kylin.engine.spark-conf.spark.shuffle.service.enabled=true

kylin.engine.spark-conf.spark.shuffle.service.port=7337

虽然,Spark 采用的是动态分配资源,但在任务执行过程中,我们观察到 Spark实际分配的资源远比 Flink 要多的多。

那为什么性能提升会那么明显呢?

4. Flink Cube Engine 的优化

性能的提升,无非有两方面的原因,一是参数的优化,二是代码的优化。

1)   调参

影响 Flink 任务性能主要有几个核心参数:并行度、单个 TM slot 数目、TM container 数目,其中单个 TM container 数目=并行度/单个 TM slot 数目。

我们调优的过程采用了控制变量法,即:固定并行度不变、固定 Job 总内存数不变。通过不断的调整单个 TM 的 slot 数目,我们发现如果单个 TM 的 slot 数目减少,拉起更多的 TM container 性能会更好。

此外,我们还使用了对象复用、内存预分配等方法,发现没有对性能提升起到太大的效果。

2)   代码优化(合并计算)

在实现 Flink Cube Engine 的时候,一开始我们使用了 Map/Reduce 两个算子,发现性能很差,比 Spark 的性能还要差很多,后来我们通过调整使用了 Flink 的 mapPartition/reduceGroup 两个算子,性能就有了明显的提升。

Flink Cube Engine 下一步的计划:

1. 全链路 Flink

如上所述,目前 Cube 构建过程中,只有最关键的 cube 构建这一子任务使用了 Flink,而其他子任务仍然使用的是 MapReduce,我们下一步会继续完善 Flink Cube Engine,将所有的子任务都使用 Flink 来构建。

2. Flink 升级到 1.9

Flink 最近发布了 1.9.0,该版本包含了很多重要特性且性能也有了一定提升,所以,我们会把 Flink Cube Engine 使用的 Flink 版本升级到1.9.0。

打一个自己的小广告,大叔本人最近在做一个一对一在线定制学习的课程,

有兴趣的小伙伴可以后台回复【定制】了解一下,或者加我微信聊聊

觉得有价值请关注▼

kylin如何支持flink_Kylin 在腾讯的平台化及 Flink 引擎实践相关推荐

  1. 深度学习系列:深度学习在腾讯的平台化和应用实践

    深度学习系列:深度学习在腾讯的平台化和应用实践(一) 莫扎特 2015-01-04 6:05:13 大数据技术 评论(0) 深度学习是近年机器学习领域的重大突破,有着广泛的应用前景.随着Google公 ...

  2. 工欲善其事必先利其器,Apache Kylin原来支持这么多可视化工具

    工欲善其事必先利其器,Apache Kylin原来支持这么多可视化工具 坚持原创,写好每一篇文章 Apache Kylin的广泛应用还得益于它对很多软件都非常的支持,这篇文章我们将汇总一下Apache ...

  3. kylin如何支持flink_如何使用 JuiceFS 在云上优化 Kylin 4.0 的存储性能?

    Apache Kylin 4.0 采用 Spark 作为构建引擎以及 Parquet 作为存储,让云上部署和伸缩变得更容易,然而使用云上的对象存储相较于使用本地磁盘的 HDFS,可能存在部分兼容性和性 ...

  4. kylin如何支持flink_日均万亿条数据如何处理?爱奇艺实时计算平台这样做

    1.爱奇艺 Flink 服务现状 爱奇艺从 2012 年开始开展大数据业务,一开始只有二十几个节点,主要是 MapReduce.Hive 等离线计算任务.到 2014 年左右上线了 Storm.Spa ...

  5. kylin如何支持flink_Flink 在快手实时多维分析场景的应用

    作者:董亭亭.徐明 摘要:作为短视频分享跟直播的平台,快手有诸多业务场景应用了 Flink,包括短视频.直播的质量监控.用户增长分析.实时数据处理.直播 CDN 调度等.此次主要介绍在快手使用 Fli ...

  6. java常用地图坐标系转换工具类,支持谷歌,腾讯,百度等主流的地理坐标转换

    package com.shen.springboot.redis.util;import java.util.ArrayList; import java.util.HashMap; import ...

  7. 支持珊瑚虫:腾讯曾提供珊瑚虫下载的证据

    如何找到腾讯曾许可珊瑚虫的证据[转帖]珊瑚 虫的Blog 司法机 关应查明腾讯是否提供过珊瑚虫下载游云庭IT法律评论 珊瑚虫声援站http://www.helpsoff.com.cn/ 不要在失去自由 ...

  8. 魔众视频教学系统 v2.3.0 直播支持阿里云和腾讯云,内核升级

    魔众视频教学系统是基于Laravel开发的在线教育点播收费系统,让您一键开展线上教育业务,支持视频点播,电子书,图文收费,考试系统,问答等功能. 魔众视频教学系统发布v2.3.0版本,新功能和Bug修 ...

  9. kylin如何支持flink_大数据集群运维(28) Kylin 配置使用 flink 构建 Cube

    用 Flink 构建 Cube Kylin v3.1 引入了 Flink cube engine,在 build cube 步骤中使用 Apache Flink 代替 MapReduce:您可以查看  ...

最新文章

  1. 为经典版eclipse增加web and JavaEE插件
  2. CentOS中vsftp安装与配置
  3. axure 点击按钮弹出框_Axure 教程:web网站原型设计技巧的分享
  4. JQuery实现父级选择器(广告实现)
  5. linux syslogd 源码,syslogd 详解二
  6. 都是CPU松动若的祸
  7. 每日一皮:举一反三,这么聪明的客户可不多见了...
  8. 哈希拓展--布隆过滤器
  9. PHP CURL 使用代理访问服务器
  10. 使用maven构建dubbo服务的可执行jar包
  11. python 字符串去重且相同字符最多出现2次_【Python】获取字符串中出现次数最多/少的字符...
  12. linux用cmake编译,CMake使用简介(forLinux)
  13. SPC控制图的样品子组大小为什么建议为5
  14. 数学建模的论文格式以及visio画图
  15. 【机器学习】LSTM模型原理
  16. Python-Data-Science-Toolbox-Part-1
  17. 智能泊车技术及现状详解
  18. IntelliJ IDEA 2019 通用 急活码
  19. 出行即服务MaaS精华主题汇总(更新至20220827)
  20. 阿里P7晒出1月工资单:狠补了这个,真香...

热门文章

  1. WebBrowser脚本错误的完美解决方案
  2. MongoDB 一个基于分布式文件存储的数据库
  3. 介绍ASP.NET控件ID
  4. 解决ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  5. Swoole命令行输出但浏览器会超时
  6. java 创建线程_【80期】说出Java创建线程的三种方式及对比
  7. 微信小程序把wx.showToast的文字提示长度增加的方法
  8. error.html mp4,HTML Video error用法及代码示例
  9. 1000 驱动_华为海思自研OLED驱动芯片已流片:最高28nm、可完全去美化
  10. python消息队列celery高可用_分布式消息队列-Celery