基于kyuubi+spark3 加速hive批计算任务

​​​0x00背景

我司报表平台大量ETL任务原来采用hive on tez引擎执行批计算任务,存在资源不足执行慢等问题急需解决。

经调研及测试,我们发现spark 3.0引擎在sql兼容性及执行速度等方面有巨大优化,平均执行速度是hive的2-10倍,因此我们计划通过spark3.0进行离线加速工作。

0x01架构

  • ​​​kyuubi 1.3.0
  • spark 3.1.2 Scala 2.12
  • Submarine:Spark Sercurity 0.6.0  对接ranger进行库表权限
  • 基于kyuubi 1.3.0 开发自定义账号验证器
  • python 3.6.0 above
  • jdk 1.8
  • zookeeper 2.4.3

以上为我司报表平台Spark引擎的架构简图,从图中可以看出我们采用网易开源的Kyuubi替换spark官方sts用于session的管理与转发。

在新架构研发中我们遇到了几个小难点需要解决:

  1. spark shuffle service的部署
  2. kyuubi 登陆验证开发及基于ranger库表权限控制
  3. kyuubi+spark 任务调优
  4. 报表平台任务迁移方案及sql兼容处理等

0x02 spark shuffle service的部署

我司计算调度主要采用yarn平台,该平台上跑了多种计算引擎的任务,spark shuffle service当前属于nodemanager的一个辅助服务,因此需要修改配置文件并重启nodemanager。

Spark系统在运行含shuffle过程的应用时,Executor进程除了运行task,还要负责写shuffle 数据,给其他Executor提供shuffle数据。

当Executor进程任务过重,导致GC而不能为其他Executor提供shuffle数据时,会影响任务运行。

这里实际上是利用External Shuffle Service 来提升性能,External shuffle Service是长期存在于NodeManager进程中的一个辅助服务。

通过该服务 来抓取shuffle数据,减少了Executor的压力,在Executor GC的时候也不会影响其他 Executor的任务运行。

启用方法:

1. 在NodeManager中启动External shuffle Service。

a. 在“yarn-site.xml”中添加如下配置项:

<property>    
    <name>yarn.nodemanager.aux-services</name>   
    <value>spark_shuffle</value>
</property>
<property>    
    <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>    
    <value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>    
    <name>spark.shuffle.service.port</name>    
    <value>7337</value>
</property>

配置参数描述

   yarn.nodemanager.aux-services:NodeManager中一个长期运行的辅助服务,用于提升Shuffle 计算性能。

   yarn.nodemanager.auxservices. spark_shuffle.class : NodeManager中辅助服务对应的类。

   spark.shuffle.service.port :Shuffle服务监听数据获取请求的端口。可选配置,默认值为“7337”。

b. 添加依赖的jar包

    拷贝“${SPARK_HOME}/yarn/spark-*-yarn-shuffle.jar”到“$ {HADOOP_HOME}/share/hadoop/yarn/lib/”目录下。

c. 重启NodeManager进程,也就启动了External shuffle Service。

2. Spark应用使用External shuffle Service。

在“spark-defaults.conf”中必须添加如下配置项:

spark.shuffle.service.enabled true
spark.shuffle.service.port 7337

说明 :

<

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值