【DolphinScheduler】datax读取hive分区表时,空分区、分区无数据任务报错问题解决

问题背景:

最近在使用海豚调度DolphinScheduler的Datax组件时,遇到这么一个问题:之前给客户使用海豚做的离线数仓的分层搭建,一直都运行好好的,过了个元旦,这几天突然在数仓做任务时报错,具体报错信息如下:

问题一:datax读取hive分区表时,datax-hdfsReader 读取空目录报错

问题描述:

com.alibaba.datax.common.exception.DataXException: Code:[HdfsReader-08], Description:[您尝试读取的文件目录为空.].  - 未能找到待读取的文件,请确认您的配置项path: /user/hive/warehouse/dws.db/dws_index_business_xzkh/dt_date=2024-01-02

关键信息:

INFO HdfsReader$Job - 您即将读取的文件数为: [0], 列表为: [] Code:[HdfsReader-08], Description:[您尝试读取的文件目录为空.]. - 未能找到 待读取的文件,请确认您的配置项 path:具体路径  /user/hive/warehouse/dws.db/dws_index_business_xzkh/dt_date=2024-01-02

错误分析:

由于上层数据处理逻辑没有生成任何数据导致未生成任何目录和文件(如果上层 逻辑有自动创建目录,则会出现该问题)

问题很简单,因为该分区下没有数据文件所以报错。

这个解决也很容易。

1.当时想的是在shell里判断分区路径是否存在 然后hdfs dfs -ls /path |wc -l 看文件个数是否>0

   后来发现这种不是很可取。

2.当时就觉得这种判断不太对,以前其他reader的时候怎么不见报错,hdfsReader就报错是吧。

   哪里报错丢异常 我改成 warn就好了。

问题解决

找到报错点

处理方法一:

那全部原因就是 emptyDirIsExecption 再看

/**emptyDirIsExecption  默认值为true,当指定为false,空目录任务会返回成功,同步记录数为0**/
private Boolean emptyDirIsExecption=null;
再看,这里就是很清楚了

emptyDirIsExecption = this.readerOriginConfig.getBool(Key.EMPTY_DIR_IS_EXECPTION, true);
 我们设置在json里设置 emptyDirIsExecption=false即可。

根据网上的这个方法我没改成,只能继续研究源码。

处理方法二:修改源码,最简单的办法就是把throw的异常,仅用LOG.warn打印出来即可。

将原有的抛出异常修改为打印错误记录终止本次调度任务(结果记为 成功避免后续任务正常进行,具体该如何处理需要根据具体业务决定),修改的 Java 文件为 位于 hdfsreader 工程下的 com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader。  

        public List<Configuration> split(int adviceNumber) {LOG.info("split() begin...");List<Configuration> readerSplitConfigs = new ArrayList<Configuration>();// warn:每个slice拖且仅拖一个文件,// int splitNumber = adviceNumber;int splitNumber = this.sourceFiles.size();if (0 == splitNumber) {// throw DataXException.asDataXException(HdfsReaderErrorCode.EMPTY_DIR_EXCEPTION,//        String.format("未能找到待读取的文件,请确认您的配置项path: %s", this.readerOriginConfig.getString(Key.PATH)));//异常处理逻辑修改LOG.warn(String.format("未能找到待读取的文件,请确认您的配置项path: %s", this.readerOriginConfig.getString(Key.PATH)));LOG.info("split() end");LOG.info("Task exited with return code 0");System.exit(0);}

重新打包后,替换安装目录下 /data/datax/plugin/reader/hdfsreader 下的 hdfsreader-0.0.1-SNAPSHOT.jar 包。(记得如果是ha,还要提前将hdfs-site和core-site文件打到包里),如果海豚调度搭建的是集群,请将集群中的都修改了,不用重启海豚直接执行任务就行。

问题二:datax读取hive分区表时,datax-hdfsReader 读取目录不存在报错

问题描述:

DataX 组件读取的目录不存在导致调度任务报错,错误信息截图如下:

关键信息:

ERROR HdfsReader$Job - 无法读取路径[具体路径] 下的所有文件,请确认您的配 置项 fs.defaultFS, path 的值是否正确,是否有读写权限,网络是否已断开! java.io.FileNotFoundException: File 具体路径 does not exist.

错误分析:

由于上层数据处理逻辑没有生成任何数据导致未生成表分区目录。

问题解决:

修改源码,在目录读取前做判断如果目录不存在打印系统错误日志并终止本次调 度任务(结果记为成功避免后续任务正常进行,具体该如何处理需要根据具体业务决定), 修改的 Java 文件为位于 hdfsreader 工程下的 com.alibaba.datax.plugin.reader.hdfsreader. DFSUtil。

重新打包后,替换安装目录下 /data/datax/plugin/reader/hdfsreader 下的 hdfsreader-0.0.1-SNAPSHOT.jar 包。(记得如果是ha,还要提前将hdfs-site和core-site文件打到包里),如果海豚调度搭建的是集群,请将集群中的都修改了,不用重启海豚直接执行任务就行。

这里要说一下,我们改源码请找自己对应版本的源码,别找错了

【DATAX】datax读取hive分区表时,空分区任务报错问题解决_datax hdfdsreader 读 hive分区表

【DataX】Dolphinscheduler调度Datax任务读取Hive分区表案例_目前支持orc,sequence,rcfile,text,csv五种格式的文件,请检查您文件类型和文

最简单dophinscheduler 集成datax步骤_dolphinescheduler datax

Dolphinscheduler配置Datax踩坑记录_dolphinscheduler datax

datax-hdfsReader空目录报错_datax hdfsreader

gitee的代码传送门:https://gitee.com/mirrors_alibaba/DataX

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

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

相关文章

JUC之锁

乐观锁和悲观锁 悲观锁 当一个线程在操作资源的时候&#xff0c;会悲观的任务有其他的线程会来抢占该资源&#xff0c;因此会在操作资源前进行加锁&#xff0c;避免其他线程抢占。 Synchronized关键字和Lock实现类就是悲观锁。 显示的锁定资源后再对资源进行操作。 使用场景&…

生日视频模板-试试这样制作

视频制作已经成为表达情感、记录生活的重要方式。尤其在生日这样的特殊日子&#xff0c;一份个性化的视频祝福不仅能让人感到温馨&#xff0c;还能成为长久珍藏的回忆。那么&#xff0c;如何快速制作出精美的生日模版视频呢&#xff1f;下面就给大家介绍几种可以制作生日模版的…

通信入门系列——离散卷积、连续卷积、卷积性质

本节目录 一、线性系统的激励响应 1、离散δ信号 2、离散卷积 3、连续δ信号 4、连续卷积 二、卷积性质 1、交换律 2、分配律 3、结合律 4、与冲激函数卷积本节内容 一、线性系统的激励响应 输入信号又称为激励&#xff0c;输出信号又称为响应。一个信号输入给一个线性系统的时…

基于单片机设计的智慧农业大棚检测系统

一、设计目标 本项目基于单片机设计一个智慧农业大棚检测系统&#xff0c;以提供实时监测和管理大棚环境的关键参数。系统支持环境温度、湿度检测&#xff0c;光照强度检测&#xff0c;并能根据预设的阀值进行报警提示。为了实现数据的显示和管理&#xff0c;该系统还利用Qt开…

生成式人工智能研究焦点:揭秘基于扩散的模型

生成式人工智能研究焦点&#xff1a;揭秘基于扩散的模型 文章目录 生成式人工智能研究焦点&#xff1a;揭秘基于扩散的模型去噪扩散是什么让扩散发挥作用&#xff1f;采样生成图像的设计选择以更少的步骤理顺流程在低噪音水平下步骤高阶求解器可实现更准确的步骤训练降噪器的设…

50天精通Golang(第17天)

beego框架总结及数据库连接配置 一、beego框架总结 1.1 Beego项目组织架构 上节课程内容对beego的案例代码进行了一个简单的分析&#xff0c;总结一下beego项目的组织结构&#xff0c;总结如下&#xff1a; 1.1.1 项目配置&#xff1a;conf 项目配置文件所在的目录&#x…

异常处理注解 @ExceptionHandler

今天记录下 SpringBoot 中 ExceptionHandler 的使用。 场景 有一个员工表(employee)&#xff0c;且给表中的 username 属性设置了唯一性。 -- auto-generated definition create table employee (id bigint auto_increment comment 主键primary key,name va…

【WPF.NET开发】OpenType字体

本文内容 OpenType 字体格式变量大写字母连字花体备用项数字样式版式类 本主题概述了 Windows Presentation Foundation (WPF) 中 OpenType 字体技术的一些主要功能。 1、OpenType 字体格式 OpenType 字体格式是 TrueType 字体格式的扩展&#xff0c;增加了对 PostScript 字…

Linux的SSH远程管理和服务器之间的免密连接

目录 一、远程管理基础 1.ssh协议 2.ssh原理 3、使用ssh协议传输的命令 4.登录方法 二、免密连接 1.免密连接的原理 2.实战 一、远程管理基础 1.ssh协议 ssh协议是基于C/S机构的安全通道协议&#xff0c;通信数据进行加密处理&#xff0c;用于远程管理。 ssh的服务名…

MATLAB二维与三维绘图实验

本文MATLAB源码&#xff0c;下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740747 一、实验目的 掌握图形对象属性的基本操作。掌握利用图形对象进行绘图操作的方法。 二、实验内容 利用图形对象绘制曲线&#xff…

【图解数据结构】深入剖析时间复杂度与空间复杂度的奥秘

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;图解数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️算法的定义二. ⛳️算法的特性2.1 &#x1f514;输入输出2.2 &#x1f514;输入输出2.3 &…

MySQL面试题2

文章目录 面试题 (9-15) 面试题 (9-15) 09&#xff09;查询学过「张三」老师授课的同学的信息 SELECT s.*,c.cname,t.tname FROM t_mysql_teacher t,t_mysql_student s,t_mysql_course c,t_mysql_score sc WHERE t.tidc.tid and c.cidsc.cid and sc.sids.sid and tname ‘张…

网站建设网络设计营销类网站eyouCMS模板(PC+WAP)

模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&#xff0c;完美兼容IE7、Firefox、Chrome、360浏览器等&#xff1b;主流浏览器&#xff1b;结构容易优化&#xff1b;多终端均可正常预览。

【面试合集】说说微信小程序的登录流程?

面试官&#xff1a;说说微信小程序的登录流程&#xff1f; 一、背景 传统的web开发实现登陆功能&#xff0c;一般的做法是输入账号密码、或者输入手机号及短信验证码进行登录 服务端校验用户信息通过之后&#xff0c;下发一个代表登录态的 token 给客户端&#xff0c;以便进行…

线程安全2

文章目录 锁的可重入性死锁内存可见性引起的线程安全 锁的可重入性 直观来看这个代码不能运行 为啥没有出现阻塞&#xff1f; 当前由于是同一个线程&#xff0c;此时的锁对象&#xff0c;就知道了第二次加锁的线程&#xff0c;就是持有锁的线程&#xff0c;第二次操作&#xff…

前端开发必备:掌握正则表达式,轻松应对复杂的表单验证

前言 在前端开发中&#xff0c;经常需要处理 URL 地址、校验手机号合法性、提取域名等。正则表达式是一种常用的工具。通过使用正则表达式&#xff0c;我们可以对用户输入进行有效的验证&#xff0c;确保数据的合法性和完整性。本文将介绍一些常见的正则表达式&#xff0c;帮助…

使用JDK自带的jvisualvm工具查看堆dump文件【回顾】

JDK自带的jvisualvm的使用 打开方式&#xff1a; 直接命令行输入&#xff1a;jvisualvm ,然后回车​​​​​​​ ​​ 或者去jdk的bin目录下找到打开 安装visual GC插件 检测死锁 再点击“死锁 dump”就可以看到死锁的线程信息了&#xff1b;

Vulnhub靶机:driftingblues 4

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;driftingblues4&#xff08;10.0.2.20&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entr…

【Python数据分析系列】实现txt文件与列表(list)相互读写转换(源码+案例)

这是Python数据分析系列原创文章&#xff0c;我的第199篇原创文章。 一、问题 平时在做数据分析或者程序开发的时候&#xff0c;需要将中间的一些结果或最后的处理结果保存下来&#xff0c;比如保存为txt格式的文本文件&#xff0c;这就涉及列表与txt之间的一种读取和写入操作…