【平台优化】大数据集群一个客户端参数引起的任务性能差的问题

news2025/3/21 5:06:43

大数据集群一个客户端参数引起的任务性能差的问题

  • 背景介绍
  • 排查过程
    • 任务慢的具体原因
      • Executor中数据内存往磁盘溢写
      • 结果数据写入分区路径
    • 分析
    • 解决方案
  • 结语&思考

背景介绍

随着业务量不断扩大,平台逐步发展成HDFS多联邦的架构,这个过程中,作为平台维护人员也会对参数进行不定期的优化以应对逐渐繁重的存算压力。

最近一个重点保障业务的计算任务无法满足客户的数据时延要求,客户很生气,然后也是各种投诉,然后项目上的同事就拉着一起查了下问题,最终定位到是一个客户端参数在大体量集群下造成的,记录一下

排查过程

在对日志进行分析的时候,主要发现了2个导致执行时间延长的点,分开进行说明:

任务慢的具体原因

在定位的时候,主要有2个地方会导致任务执行时间延长;

Executor中数据内存往磁盘溢写

任务执行过程中,可能会看到下面的这种日志,这样的日志一般是业务问题导致的,内存不够用,临时溢写磁盘,但是对于一个执行时间达到几个小时的任务来说,这个并不是主要的原因
在这里插入图片描述

结果数据写入分区路径

先看一个日志的关键截图,首先是9:31分:
在这里插入图片描述
然后是12:25分的日志
在这里插入图片描述
上图中可以看到在创建分区路径到数据完全写入完成度过了接近3个小时。

分析

因为可以基本定位到结果数据写入分区路径是主要影响任务时长的原因,所以对任务日志进行进一步排查,找找可能得原因;对比慢日志和快日志,有一个明显区别:

// 执行速度比较快的任务日志
2025-03-19 11:35:16,253 INFO org.apache.hadoop.hive.common.FileUtils: Creating directory if it doesn't exist: viewfs://nsX/ns3/path/.hive-staging_hive_2025-03-19_11-35-16_251_7169943507895305206-1
// 执行速度比较慢的任务日志
2025-03-19 07:35:37,022 INFO org.apache.hadoop.hive.common.FileUtils: Creating directory if it doesn't exist: viewfs://ns0/spark-tmp/stagedir/.hive-staging_hive_2025-03-19_07-35-37_020_688260183047175897-1

这个是在执行计算任务的时候指定的数据临时写入的目录路径,如果任务提交节点的客户端配置文件/etc/spark/conf/hive-site.xml中没有指定hive.exec.stagingdir参数,最终hive-staging就会写入到表对应的目录下(这是默认行为)如果客户端配置了这个参数,就会写入到参数指定的目录。

通过日志分析的结果,我们发现任务提交节点的客户端配置配置了该参数的话,任务执行时间久的数量远大于那些没配置该参数的提交节点,对此我们进行了对比:
在这里插入图片描述
进一步分析下来,确定了问题逻辑,因为集群是联邦环境,业务表可能存在于任意一个联邦,如果配置了hive.exec.stagingdir参数,任务执行时临时数据就会写入到一个指定的联邦下,这个时候,如果结果表的路径在其他联邦,那么业务逻辑完成后,就会存在跨联邦复制数据的动作;

而在跨 NameNode 执行 mv 操作时,会涉及到多个 NameNode 之间的元数据交互。源 NameNode 需要告知目标 NameNode 新文件的元数据信息,并且要确保两个 NameNode 之间的数据一致性。这个过程涉及到网络通信和同步操作,会增加额外的延迟,从而导致性能下降。

这就和我们在Linux上移动数据一样,同一个磁盘移动(类比成同联邦下)数据,只是元数据信息更改,不同磁盘移动数据(跨联邦)数据,数据会存在块写入,就会产生大量IO,分布式集群还涉及到网络等交互

解决方案

最终,我们决定删除所有提交节点的hive.exec.stagingdir配置项,这样,任务提交的时候久采用结果表的同联邦进行临时数据的写入,避免了跨联邦的数据移动。

结语&思考

其实,对于普通HDFS集群,配置hive.exec.stagingdir参数是很好的选择,主要有这么几个优点:

  • 临时文件写在一个固定目录,便于管理
  • 任务失败时不会主动删除临时文件,配置指定目录能够更方便的治理废弃数据

然而,对于大型的联邦集群,带宽资源是珍贵的,我们应该尽量减少跨联邦的数据交换,这个时候,保持原本的配置显然就不太合理了,让任务在执行时临时数据写在本联邦下可能是更好的选择,当然这带来的问题就是更高的管理成本,以及定期的失败任务临时目录治理需求

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

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

相关文章

【OCR】总结github上开源 OCR 工具:让文字识别更简单

前言 在数字化的时代,光学字符识别(OCR)技术成为了我们处理文档、图像文字信息的得力助手。它能够将图像中的文字信息转换为可编辑和可处理的文本数据,极大地提高了信息处理的效率。今天,我要给大家介绍一些优秀的开源…

Jmeter使用之http请求默认值

一、添加【HTTP请求默认值】 1、添加方式 【线程组】---->右击【添加】---->【配置元件】---->【HTTP请求默认值】 2、作用 在发送http请求的时候,自带默认值设置的参数(常用:【协议】、【服务器名称或IP】、端口号、内容编码&…

【QT】】qcustomplot的初步使用二

功能预期: 在简单显示曲线()基础上加功能: 1.在曲线区域里,X轴可以随鼠标滚轮变化将图像缩放、随鼠标左键进行曲线移动; 2.在曲线区域里,Y轴的量程可以随Y轴数据大小自适应; 3.可以…

让 Google Play 成为助力 PC 游戏增长的最佳平台

作者 / Google Play 游戏副总裁兼总经理 Aurash Mahbod 我们正在加强多平台游戏产品,并将在今年的游戏开发者大会 (GDC) 上发布激动人心的消息。我们将为用户带来更多游戏,提供更多跨设备畅玩游戏的方式,并进一步优化游戏体验。在游戏开发者大…

路径问题(greedy):地下城游戏

题目描述: 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健…

electron框架(3.0)主程序与桥梁与渲染,以及之间的通信

每个页面程序通过渲染和主进程通信,主进程根据需求调用Native Api来实现功能。 实际,每个页面和主程序通信时,需要建个桥梁来管理它们的通信,preload.js(自己创建),来管理实现通信。 ----创建preload.js定义桥梁js&a…

JS—原型与原型链:2分钟掌握原型链

个人博客:haichenyi.com。感谢关注 一. 目录 一–目录二–原型三–原型链 二. 原型 什么是原型? 每个JavaScript对象都有一个原型,这个原型也是一个对象。比方说 function Person(name) {this.name name; } let person new Person(&quo…

Canal 解析与 Spring Boot 整合实战

一、Canal 简介 1.1 Canal 是什么? Canal 是阿里巴巴开源的一款基于 MySQL 数据库增量日志解析(Binlog)中间件,它模拟 MySQL 的从机(Slave)行为,监听 MySQL 主机的二进制日志(Binl…

图论——Prim算法

53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…

1. 初识golang微服务-gRPC

单体架构 在这里插入图片描述 微服务架构 RPC架构(远程过程调用) 服务端实例代码: package mainimport ("fmt""net""net/rpc""time" )type Hello struct { }func (h Hello) SayHello(req stri…

视频翻译器免费哪个好?轻松玩转视频直播翻译

你是不是觉得看外语视频很麻烦?每次遇到喜欢的外语电影、电视剧或动漫,总是要等字幕组的翻译,或者因为语言不通而错过精彩的情节。 这个时候,掌握多语种直播翻译方案就显得尤为重要,有了实时字幕,看外语视…

Python列表1

# coding:utf-8 print("———————————— 列表 ——————————————")列表 是指一系列按照特定顺序排列的元素组成 是Python中内置的可变序列 使用[]定义列表,元素与元素之间使用英文的逗号分隔 列表中的元素可以是任意的数据类型列表的…

3.19学习总结

学习了Java中的面向对象的知识点 完成一道算法题,找树左下角的值,错误的以为左下角只能是最底层的左节点,但指的是最底层最左边的节点

服务创造未来 东隆科技携多款产品亮相慕尼黑

慕尼黑上海光博会依托于德国慕尼黑博览集团,自2006年首次举办以来,始终坚持将国内外先进的光电技术成果展示给观众,深度链接亚洲乃至全球的激光、光学、光电行业的优质企业及买家。如今已经成为了国内外专业观众信赖的亚洲激光、光学、光电行…

AI 时代,学习 Java 应如何入手?

一、Java 的现状:生态繁荣与 AI 融合的双重机遇 在 2025 年的技术版图中,Java 依然稳坐企业级开发的 “头把交椅”。根据行业统计,Java 在全球企业级应用中的市场份额仍超过 65%,尤其在微服务架构、大数据平台和物联网&#xff0…

LiteratureReading:[2016] Enriching Word Vectors with Subword Information

文章目录 一、文献简明(zero)二、快速预览(first)1、标题分析2、作者介绍3、引用数4、摘要分析(1)翻译(2)分析 5、总结分析(1)翻译(2)…

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…

mysql5.7主从部署(docker-compose版本)

mysql5.7主从部署&#xff08;docker-compose版本&#xff09; 1:docker-compose-test.yml 文件信息 version: 3services:# MySQL 数据库mysql-master:image: mysql:5.7container_name: mysql-masterenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: nacosports:- 23…

Java+Html实现前后端客服聊天

文章目录 核心组件网络通信层事件调度层服务编排层 Spring实现客服聊天技术方案对比WebScoket建立连接用户上线实现指定用户私聊群聊离线 SpringBootWebSocketHtmljQuery实现客服聊天1. 目录结构2. 配置类3. 实体类、service、controller4. ChatWebSocketHandler消息处理5.前端…

解锁 DeepSeek 安全接入、稳定运行新路径

背景 目前&#xff0c;和 DeepSeek 相关的需求总结为两类&#xff1a; 因官方 APP/Web 服务经常无法返回结果&#xff0c;各类云厂商、硬件或软件企业提供满血版或蒸馏版的 API 算力服务&#xff0c;还有不少基于开源家用计算和存储设备的本地部署方案&#xff0c;以分担 De…