当前位置: 首页 > news >正文

datax同步数据翻倍,.hive-staging 导致的问题分析

一、背景

有同事反馈 Datax 从 Hive 表同步数据到 Mysql 数据翻倍了。通过查看 Datax 任务日志发现,翻倍的原因是多读取了 .hive-staging_xx 开头的文件。接下里就是有关 .hive-staging 的分析。

二、环境

Hive 版本 2.1.1

三、分析

3.1 .hive-staging_hive 产生的原因

通过 Spark SQL、Hive SQL、Hue 等提交 SELECT 或者 INSERT OVERWRITE 等 SQL 到 Hive 时,会产生该目录,用于临时存放执行结果,比如 INSERT OVERWRITE 会将结果暂存到该目录下,待任务结束,将结果复制或移动到 Hive 表中。
对应的的参数:
hive.exec.stagingdir

  • Default Value: .hive-staging
  • Added in: Hive 1.1.0 with HIVE-8750

Directory name that will be created inside table locations in order to support HDFS encryption. This is replaces hive.exec.scratchdir for query results with the exception of read-only tables. In all cases hive.exec.scratchdir is still used for other temporary files, such as job plans.
https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-QueryandDDLExecution
对应的源码:
https://github.com/apache/hive/blob/branch-2.1/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
查看 moveFile() 方法
从源码可以看到,有下面几种情况
① 源文件是本地系统的文件,使用 copyFromLocalFile 代码行数: 2925~2934
② 如果是跨系统或者不同加密的数据,会使用 copy ,涉及方法 needToCopy ,代码行数:3018~3032
③ 其他情况都是 move,涉及操作 namenode 元数据,不会有额外数据操作。 (注意:这里和 Hive 1.x 不一样,在 Hive 1.x 中如果原目录是目标目录的子目录,原目录下的每个文件进行copy操作,这个效率很低的!!!,可以查看 1.x 的原码:戳我)

3.2 为什么临时文件没有自动删除?

① 任务执行失败时,这些临时文件和目录不会被自动删除掉,直到有相关的 SQL 执行成功时,才会自动删掉。
② 我们发现,在 Hue 中提交的 SQL,临时文件和目录页也不会自动被删掉。也许和长连接有关系,我尝试了多次,必现。

3.3 .hive-staging_hive 会导致的一些问题:

① 如果目标路径存在临时文件的话,datax 读取hdfs数据的时候会递归读取,所有 .hive-staging_hive 临时文件的数据也会被 datax 读到,导致数据至少翻倍。
② 有的 .hive-staging_hive 可能会包含很多的临时文件,占用空间,同时也会造成 namenode 的压力;

四、如何解决?

从 Datax 的角度分析,修改 HDFS Reader 插件,过滤点开头的文件或目录。
从集群的角度分析,修改 hive.exec.stagingdir 配置,修改成统一的目录。

hive.exec.stagingdir
/tmp/hive/.hive-staging

从用户的角度分析,不要使用 Hue 补数,使用调度系统或者 beeline 执行 SQL,这两种方式都可以保证会话(连接)断开,临时文件(目录)会自动清理。

从社区的角度分析,查看社区的 issue ,有其他用户遇到了这个问题: Hive is not cleaning up staging directories 也可以看出,除了上述分析的原因,也可能有一些奇奇怪怪的bug导致临时文件不会被清理。
看到两个修复:
① https://issues.apache.org/jira/browse/HIVE-17479 3.0 版本
When these queries are internally rewritten, a new context is created with a new execution id. This id is used to create the scratch directories. However, only the original context is cleared, and thus the directories created with the original execution id.
The solution is to pass the execution id to the new context when the queries are internally rewritten.
② https://issues.apache.org/jira/browse/HIVE-20409 4.0版本

五、总结

hive-staging文件不会自动删除,有些未知的情况还无法避免。

  • 会浪费存储
  • 会影响datax同步数据,datax hdfs reader 也会把临时目录的数据同步到下游。

我认为最优的解决方案是,临时文件改成统一的目录,这样即使有临时文件没有自动删除,我们也可以进行周期性的监控并清理没有及时清理的过期的临时文件。

hive.exec.stagingdir
/tmp/hive/.hive-staging

另一种方案,不要使用hue刷数据,使用调度或beeline执行SQL,大概率(不排除是不是有其他bug)不会出现临时文件不会自动清理的情况。

大数据学习指南 专注于大数据技术分享与交流。

在这里插入图片描述

相关文章:

datax同步数据翻倍,.hive-staging 导致的问题分析

一、背景 有同事反馈 Datax 从 Hive 表同步数据到 Mysql 数据翻倍了。通过查看 Datax 任务日志发现,翻倍的原因是多读取了 .hive-staging_xx 开头的文件。接下里就是有关 .hive-staging 的分析。 二、环境 Hive 版本 2.1.1 三、分析 3.1 .hive-staging_hive 产…...

DataGrip 恢复数据

DataGrip 恢复数据 准备数据库 create database chap02; use chap02;恢复数据 运行sql脚本方式恢复数据到刚刚创建的数据库 数据右键—> SQL Scripts —> Run SQL Script… 选择sql脚本...

【深度学习实验】前馈神经网络(一):使用PyTorch构建神经网络的基本步骤

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入库 1. 定义x,w,b 2. 计算净活性值z 3. 实例化线性层并进行前向传播 4. 打印结果 5. 代码整合 一、实验介绍 本实验使用了PyTorch库来构建和操作神经网络模型,主要是关…...

【Unity】LODGroup 计算公式

Unity 在配置 LodGroup 时,其分级切换的计算方法是按照物体在相机视野中占据的比例计算的。在运行时,如果相机视野范围(Field of View)没有改变,那么这个值可以直接换算成物体距离相机的距离。这里就讨论下如何计算得到…...

【数学建模】2023华为杯研究生数学建模F题思路详解

强对流降水临近预报 我国地域辽阔,自然条件复杂,因此灾害性天气种类繁多,地区差异大。其中,雷雨大风、冰雹、龙卷、短时强降水等强对流天气是造成经济损失、危害生命安全最严重的一类灾害性天气[1]。以2022年为例,我国…...

docker 安装 nessus新版、awvs15-简单更快捷

一、docker 安装 nessus 参考项目地址: https://github.com/elliot-bia/nessus 介绍:几行代码即可一键安装更新 nessus -推荐 安装好 docker后执行以下命令 #拉取镜像创建容器 docker run -itd --nameramisec_nessus -p 8834:8834 ramisec/nessus …...

使用API Monitor工具巧妙探测C++程序中监听某端口的模块

目录 1、问题说明 2、API Monitor工具介绍 2.1、API Monitor主要用途 2.2、如何使用API Monitor工具 3、使用API Monitor监测程序对bind函数的调用,定位启用2620端口的模块 3.1、为啥要监控socket API函数bind 3.2、编写演示代码进行说明 3.3、使用API Moni…...

vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动

问题描述:默认情况下 vue-grid-layout 移动卡片到页面底部时页面滚动条并不会跟随卡片滚动。 问题解决: 在 grid-item中的move事件中,获取到当前移动的元素,并使用scrollIntoView方法来实现滚动条跟随。 代码如下: c…...

git查看自己所在的分支

很多时候可能大家不太想切换其他工具,又不知道自己是否在自己需要操作的分支 可以直接终端执行 git branch此时 他就会在终端将所有的本地分支输出出来 并特殊标注自己所在的分支 这样我们就可以进一步去做自己想要做的操作了 当然 随着各种编辑器的发展 这个命令…...

竞赛 基于视觉的身份证识别系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-sen…...

Redis的softMinEvictableIdleTimeMillis和minEvictableIdleTimeMillis参数

背景: Redis的softMinEvictableIdleTimeMillis,minEvictableIdleTimeMillis是一个令人疑惑两个参数,特别是当它和minIdle组合起来时就更难理解了,本文就来梳理下他们的之间的关系 softMinEvictableIdleTimeMillis,mi…...

向量数据库库Milvus Cloud2.3 的QA问题

1. Milvus 从 2.2.x 升级至 2.3.x 的最大变化是什么? 如果用一句话来总结,那就是使用的场景更加丰富了。具体可以从两个方面来体现,即部署环境和用户的使用感。 例如,从部署环境来看,Milvus 原来只支持 X86 架构的 CPU,版本升级后,不仅可以支持 GPU,还能够支持 ARM 架构…...

嵌入式 - 经典的有刷电机和先进的无刷电机

自从无刷直流电机诞生,“古老的”有刷电机就开始没落,但它依然是低成本应用的可靠选择,并且实现起来简单。 在有刷电机中,磁极方向的跳转是通过移动固定位置的接触点来完成的,该接触点在电机转子上与电触点相对连接。这…...

【力扣2154】将找到的值乘以 2

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接:将找到的值乘以 2 给你一个整数数组 nums ,另给…...

C++ —— 单机软件加入Licence许可权限流程(附详细流程图、详细代码已持续更新..)

单机版许可证简介 笼统的说:实现一个生成授权Lic文件应用程序(我们使用),生成的Lic文件给应用程序(客户使用)启动时读取一下对比加密后的字符串或自定义格式的密钥判断是否正确。 单机版许可证执行流程 第一级比对:发布的加密许可证文件,该加密许可证文件仅可用使用的软…...

Windows 下 MySQL 8.1.0 安装及配置图文指南,快速搭建实验学习环境

目录 下载 MySQL安装 MySQL配置 MySQL修改密码配置环境变量 卸载 MySQL开源项目微服务商城项目前后端分离项目 下载 MySQL 访问 MySQL 下载地址:https://dev.mysql.com/downloads/mysql/ 下载 MySQL 时,你可以选择 ZIP 包或 MSI 安装: ZIP包…...

Linux内核顶层Makefile的make过程总结

一. Linux内核源码的make编译 本文对 Linux内核源码的 make时, 顶层Makefile所做的事进行总结。即总结一下 Linux内核源码的 make 过程。 本文续上一篇文章,地址如下: Linux内核顶层Makefile的make过程说明二_凌肖战的博客-CSDN博客 二.…...

C语言每日一题(9):跳水比赛猜名次

文章主题:跳水比赛猜名次🔥所属专栏:C语言每日一题📗作者简介:每天不定时更新C语言的小白一枚,记录分享自己每天的所思所想😄🎶个人主页:[₽]的个人主页🏄&am…...

L10 数据库

1, 数据库的安装 sudo dpkg -i *.deb 2, 数据库命令: 1)系统命令 , 都以.开头 .exit .quit .table 查看表 .schema 查看表的结构 2)sql语句&…...

前端面试:01.图中输入什么?

~~~~~~~~~~~~~ 先自行想一想,答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ 先自行想一想,答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ 先自行想一想,答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ 先自行想一想,答案在~~~~~~~~~~~~~~~~~ ~~~~~~~~…...

基于vLLM与OpenAI API的LLM生产部署框架实战指南

1. 项目概述:一个面向生产环境的LLM部署框架最近在折腾大语言模型(LLM)的部署,发现了一个挺有意思的项目:run-llama/llama_deploy。这名字乍一看,可能会让人以为它只是用来部署Meta的Llama系列模型的&#…...

ARM Cortex-A520集群架构与缓存优化配置指南

1. ARM Cortex-A520集群架构概述ARM Cortex-A520作为新一代高效能处理器核心,其集群配置能力直接影响着嵌入式系统和移动设备的整体性能表现。A520集群采用多核共享缓存架构,支持从单核到多核的灵活扩展,为开发者提供了丰富的参数配置空间。在…...

嵌入式LED色彩校正:Gamma原理与Arduino NeoPixel实战

1. 项目概述:为什么你的NeoPixel灯带颜色总是不对劲?如果你玩过像NeoPixel、WS2812B这类可编程LED灯带,并且尝试过自己调色,大概率遇到过这样的困惑:你在代码里设定了一个“橙色”——比如红色满值255,绿色…...

终极虚拟显示器解决方案:ParsecVDisplay完全指南

终极虚拟显示器解决方案:ParsecVDisplay完全指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd ParsecVDisplay是一款基于Parsec虚拟显示驱动(VDD&#x…...

企业级应用如何通过 Taotoken 统一管理多个团队的模型调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何通过 Taotoken 统一管理多个团队的模型调用 在中大型企业的技术实践中,多个项目组或产品线同时接入和使…...

新手必看!CTFShow文件上传靶场通关保姆级教程(Web151-170全解析)

CTFShow文件上传靶场全解析:从入门到精通的实战指南 初识文件上传漏洞 文件上传功能几乎是每个Web应用都具备的基础模块,但恰恰是这个看似简单的功能,成为了无数安全漏洞的温床。在CTF竞赛中,文件上传类题目因其直观性和实战性&am…...

如何用免费开源通信调试工具Wu.CommTool提升工业自动化效率

如何用免费开源通信调试工具Wu.CommTool提升工业自动化效率 【免费下载链接】Wu.CommTool 基于C#、WPF、Prism、MaterialDesign、HandyControl开发的通讯调试工具。支持Modbus Rtu调试、Mqtt调试、TCP调试、串口调试、UDP调试 项目地址: https://gitcode.com/gh_mirrors/wu/W…...

Arduino电机与舵机控制:从晶体管驱动到PWM调速实战

1. 项目概述与核心价值在机器人、智能小车或者任何一个需要“动起来”的嵌入式项目中,电机控制都是你绕不开的一道坎。你可能已经能让LED闪烁、让屏幕显示文字,但当你第一次尝试让一个小马达转起来,却发现Arduino板子上的引脚直接冒烟时&…...

Zabbix监控大屏展示中文总乱码?手把手教你替换DejaVuSans为微软雅黑字体

Zabbix监控大屏中文乱码终极解决方案:从字体替换到视觉优化 当你精心配置的Zabbix监控大屏在向管理层汇报时突然出现中文乱码,那种尴尬就像交响乐团演出时小提琴突然走音。作为经历过数十次企业级监控系统部署的资深运维,我深知字体问题远不止…...

PyWxDump:微信数据管理的终极本地解决方案指南

PyWxDump:微信数据管理的终极本地解决方案指南 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 在数字时代,微信聊天记录承载着我们珍贵的回忆和重要信息,但你是否曾担心数据安全、备份困…...