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

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

  • 背景介绍
  • 排查过程
    • 任务慢的具体原因
      • 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.mzph.cn/bicheng/73905.shtml

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

相关文章

【微信小程序变通实现DeepSeek支持语音】

微信小程序实现录音转文字,并调用后端服务(Node.js)进行语音识别和,然后调用DeepSeek 处理的完整实现。 整体架构 前端(微信小程序): 实现录音功能。将录音文件上传到后端。接收后端返回的语音…

uniapp常用组件

写在前面 今天将uniapp中的组件都过了一遍,上手难度不大,但是还是遇到了一些问题: HBuilder实在是太难用,不管是插件生态还是设计之类的,总之就是用的哪哪不顺手虽然打开内置浏览器是挺方便的,但是不知道…

【Linux】应用层自定义协议 + 序列化和反序列化

应用层自定义协议 序列化和反序列化 一.应用层1.再谈 "协议"2.序列化 和 反序列化 二. Jsoncpp1.序列化2.反序列化 三. Tcp全双工 面向字节流四.自定义协议 保证报文的完整性1.Makefile2.Mutex.hpp3.Cond.hpp4.Log.hpp5.Thread.hpp6.ThreadPool.hpp7.Common.hpp8.…

二.使用ffmpeg对原始音频数据重采样并进行AAC编码

重采样:将音频三元组【采样率 采样格式 通道数】之中的任何一个或者多个值改变。 一.为什么要进行重采样? 1.原始音频数据和编码器的数据格式不一致 2.播放器要求的和获取的数据不一致 3.方便运算 二.本次编码流程 1.了解自己本机麦克风参数&#x…

器材借用管理系统详细设计基于Spring Boot-SSM

‌ 目录 ‌摘要 一、系统概述‌ ‌二、系统架构设计‌ 2‌.1技术选型‌ ‌2.2系统架构‌ ‌三、需求分析 3.1用户需求分析 3.2功能模块设计‌ 3.3、性能需求分析 3.4、安全需求分析 ‌四、数据库设计‌ ‌五、安全性设计‌ ‌六、系统测试与维护‌ ‌七、总结‌…

麒麟V10 arm cpu aarch64 下编译 RocketMQ-Client-CPP 2.2.0

国产自主可控服务器需要访问RocketMQ消息队列,最新的CSDK是2020年发布的 rocketmq-client-cpp-2.2.0 这个版本支持TLS模式。 用默认的版本安装遇到一些问题,记录一下。 下载Releases apache/rocketmq-client-cpp GitHubhttps://github.com/apache/roc…

C语言每日一练——day_12(最后一天)

引言 针对初学者,每日练习几个题,快速上手C语言。第十二天。(最后一天,完结散花啦) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ&#xff0…

网络安全应急入门到实战

奇安信:95015网络安全应急响应分析报告(2022-2024年)官网可以下载 https://github.com/Bypass007/Emergency-Response-Notes 应急响应实战笔记 网络安全应急响应技术实战指南 .pdf 常见场景 第4章 勒索病毒网络安全应急响应 第5章 挖矿木…

jvm中每个类的Class对象是唯一的吗

jvm中每个类的Class对象是唯一的吗 在 Java 中,同一个类的 Class 对象在由同一个类加载器加载时是唯一的。析: 1. 同一类加载器的唯一性 规则:若一个类被同一个类加载器加载,无论创建多少实例,其 Class 对象始终唯一…

Visual Studio里的调试(debugging)功能介绍

参考 1- Introduction to Debugging | Basic Visual Studio Debugging(这是一位印度博主视频,我下面做到笔记也主要参考她的视频,但不得不说口音太重了,一股咖喱味) 目录 个人对调试浅显的认识和对调试的介绍逐行调…

NLP高频面试题(六)——decoder-only、encoder-only和encoder-decoder的区别与联系

一、基本概念与代表模型 1. Encoder-only 架构 Encoder-only 架构最具代表性的模型是 BERT。BERT 使用 masked language modeling(MLM)进行预训练,即随机遮蔽部分输入词汇,让模型预测被遮蔽的词汇。由于这种架构能够同时看到输入…

如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)

在渗透测试领域,Metasploit Framework(MSF)的 msfvenom 工具是生成 Payload(载荷)的核心利器。然而,当我们选择 Payload 时,经常会遇到一个问题:这个 Payload 是 Staged(…

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介: 本板为模拟量高速采样板(ADI),主要用于电机转速和相电流检测,以实现电机闭环控制。 性能规格: 电源:DC5V,DC3.3V,DC15V,DC24V FPGA:…

Gymnasium Cart Pole 环境与 REINFORCE 算法 —— 强化学习入门 2

Title: Gymnasium Cart Pole 环境与 REINFORCE 算法 —— 强化学习入门 2 文章目录 I. Gymnasium Cart Pole 环境II. REINFORCE 算法1. 原理说明2. REINFORCE 算法实现 I. Gymnasium Cart Pole 环境 Gymnasium Cart Pole 环境是一个倒立摆的动力学仿真环境. 状态空间: 0: Ca…

Python高级:GIL、C扩展与分布式系统深度解析

文章目录 📌 **前言**🔧 **第一章:Python语言的本质与生态**1.1 **Python的实现与版本演进**1.2 **开发环境与工具链** 🔧 **第二章:元编程与动态特性**2.1 **描述符协议(Descriptor Protocol)*…

C++学习笔记(二十一)——文件读写

一、文件读写 作用: 文件读写指的是将数据从程序存储到文件,或从文件读取数据,以实现数据的持久化存储。 C 提供了 fstream 头文件,用于文件操作,主要包括: ofstream(输出文件流)—…

RBA+minibatch的尝试

目录 还是咬着牙来写 RBA了 JAX JAX->TORCH torch tensor的变形 pytorch怎么把一个【3,3,5】的tensor变成【3,10,5】,多的用0填充 pytorch如何把shape【100】转成【100,1】 把torch shape【100,1】变成【100】 SQUEEZE grad_fn 不能两次反向传播 还…

基于Python+Django的二手房信息管理系统

项目介绍 PythonDjango二手房信息管理系统(Pycharm Django Vue Mysql) 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括:首页、二手房信息、公告管理、…

爬虫基础之爬取猫眼Top100 可视化

网站: TOP100榜 - 猫眼电影 - 一网打尽好电影 本次案例所需用到的模块 requests (发送HTTP请求) pandas(数据处理和分析 保存数据) parsel(解析HTML数据) pyecharts(数据可视化图表) pymysql(连接和操作MySQL数据库) lxml(数据解析模块) 确定爬取的内容: 电影名称 电影主演…

解决Qt信号在构造函数中失效的问题

情景引入:音乐播放器的“幽灵列表”问题 假设你正在开发一个音乐播放器应用,其中有一个功能是用户首次打开应用时,需要从服务器拉取最新的歌曲列表并显示在“本地音乐”页面中。你可能会写出类似这样的代码: // LocalSong 类的构…