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

2023-11-04

问题场景

之前在《Dolphinscheduler调度Datax任务读取Hive分区表案例》博客中我分享了调度任务读取hive分区的几个场景,当时提到了分区中有空文件的解决方案。
除此之外,我们还遇到了空分区的场景,即该分区没有数据,连所谓的空文件也没有,这种场景会报以下异常。

未能找到待读取的文件,请确认您的配置项path……

问题定位

这种问题一般产生的原因是当日抽取源表往hive写数据时,创建了当日的分区,但是抽取的源表却没有当天的数据。
通过报错信息我们定位到datax源码的位置为

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)));
            }

            List<List<String>> splitedSourceFiles = this.splitSourceFiles(new ArrayList<String>(this.sourceFiles), splitNumber);
            for (List<String> files : splitedSourceFiles) {
                Configuration splitedConfig = this.readerOriginConfig.clone();
                splitedConfig.set(Constant.SOURCE_FILES, files);
                readerSplitConfigs.add(splitedConfig);
            }

这里源文件的目录文件数为空时会直接抛异常并任务报错终止,而我们的期望是,可以在日志中有提示,但是任务不能报错终止。

问题解决

所以最简单的办法就是把throw的异常,仅用LOG.warn打印出来即可。
代码修改为:

        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);
            }

重新打包后,替换安装目录下hdfsreader下的hdfsreader-0.0.1-SNAPSHOT.jar包。(记得如果是ha,还要提前将hdfs-site和core-site文件打到包里,可参考《Dolphinscheduler调度Datax任务读取Hive分区表案例》)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【DATAX】datax读取hive分区表时,空分区任务报错问题解决 的相关文章

随机推荐

  • redis详解(一)—— 概述

    首先 分布式缓存框架 可以 看成是nosql的一种 1 什么是redis redis 是一个基于内存的高性能key value数据库 2 Reids的特点 Redis本质上是一个Key Value类型的内存数据库 很像memcached 整
  • 【前端面试

    1 数据类型 1 基本数据类型 Undefined Null Boolean Number String 还有在 ES6 中新增的 Symbol 类型 2 引用数据类型 对象 数组 函数 日期和正则等等 2 判断类型的方法 基本类型判断 t
  • 最新前端面试题整理

    前端技术 常见浏览器的内核分别是什么 IE浏览器 Trident 内核 Firefox浏览器 Gecko内核 Safari浏览器 Webkit内核 Opera浏览器 最初是Presto内核 后来是Webkit 现在是Blink内核 Chro
  • TypeScript中数组类型的定义

    TypeScript中数组类型的定义 现在我们可以定义一个最简单的数组类型 比如就是数字类型 那么就可以这么写 const numberArr 1 2 3 这时候你把鼠标放在numberArr上面可以看出 这个数组的类型就是 number
  • 【Linux】进程间通信

    文章目录 1 进程间通信基础 2 管道 2 1匿名管道 2 1 1匿名管道的原理 2 2匿名管道的特点 2 3匿名管道函数 2 3 1用例 2 3 2实现ps ajx grep bash指令 2 4匿名管道的特点 2 5管道的大小 2 6管
  • 项目管理计算-- PV、EV、AC、BAC、EAC、ETC等计算公式含义

    一 总浮动时间TF和自由浮动时间FF的差别 项目进度网络图 其中每个小方块里面的若干数字是啥意思呢 最早开始时间 ES 最早结束时间 EF 最迟开始时间 LS 最迟结束时间 LF TF Total Flow 总浮动时间 FF Free Fl
  • 史上最全的 Hexo 博客搭建配置完全指南

    欢迎到我的博客查看最新文章 https blog clouder im 本篇博客基于 Centos 7 x root 用户 最近利用 Hexo Github Pages 搭建了一个博客 总体来说比较满意 中间也踩了不少坑 于是将我的配置过程
  • LevelDB使用指南

    这篇文章是levelDB官方文档的译文 原文地址 LevelDB library documentation 这篇文章主要讲leveldb接口使用和注意事项 leveldb是一个持久型的key value数据库 key value可以是任意
  • Node.js 搭配 Socket.io 实现与客户端实时通信

    最近准备用react搭建node搭建一个大数据可视化平台 并且服务端利用到socket io 客户端利用到socket io client 这里总结下基本使用方式 安装 npm i express socket io socket io c
  • SQLi LABS Less-34

    第三十四关注入点为 单引号字符串型 注入类型为 报错注入 此关卡通过 代码WAF 将单引号 转义成 我们使用 编译 绕过WAF 先上结果 and updatexml 1 concat 0x7e substr select group con
  • Delphi多层开发方案比较

    以下转载自 http blog sina com cn s blog 53decb4101009a5m html type v5 one label rela nextarticle http blog csdn net SmallHand
  • 华为机试HJ60 查找组成一个偶数最接近的两个素数

    HJ60 查找组成一个偶数最接近的两个素数 Python 题目 解题思路 代码 结果 题目 解题思路 1 多组输入 需要循环 2 先创建一个判断是否素数的函数以备调用 素数判断 从1以后开始 如果到该数一半的位置有可以整除的数 则不是素数
  • 【pygame杂记】字体

    这一节放在这里挺突兀的 但是因为今天开周会 晚回来了 而且吃晚饭还吃撑了所以就简单写一下吧 举个栗子进行简述 我们知道在python中所有的东西都可以抽象成对象 在这里 我们创建了一个字体的对象 创建字体对象 font pygame fon
  • android Handler详细使用方法实例

    开发环境为android4 1 Handler使用例1 这个例子是最简单的介绍handler使用的 是将handler绑定到它所建立的线程中 本次实验完成的功能是 单击Start按钮 程序会开始启动线程 并且线程程序完成后延时1s会继续启动
  • DDL语言的使用

    第1关 创建数据库 编程要求 在右侧窗口编写 SQL 并创建一个名为 teachingdb 的教学数据库 连接数据库的用户名为 root 密码为 123123 请在此编写代码 操作完毕之后点击评测 Begin create database
  • 蓝桥杯VIP算法训练-轨道炮-看完秒懂的(c++map)

    题目描述 小明在玩一款战争游戏 地图上一共有 N 个敌方单位 可以看作 2D 平面上的点 其中第 i 个单位在 0 时刻的位置是 Xi Yi 方向是 Di 上下左右之一 用 U D L R 表示 速度是 Vi 小明的武器是轨道炮 只能使用一
  • Typescript--Typescript中的新增类型

    一 any any表示的是任意类型 一个变量设置类型为any后 相当于该变量管理了TS的类型检测 尽量不要用any let d any 声明变量如果不指定类型 则TS解析器会自动判断变量的类型为any 隐式的any let d d 10 d
  • DataFrame数据的多种遍历方法

    后续补充 遍历DataFrame的三种方法 iteritem 方法返回一个
  • Unity初探(光源类型与光照模式)

    0 引子 unity的光源有四种 每种光源都有3种光照模式 而场景中不同模式的光源而且对静态和动态的对象有不同的效果 而官方文档又显得有点晦涩难懂 如果是初学者第一次阅读 比如说我 难免会被场景中动态和静态游戏对象与不同模式光源的交互 以及
  • 【DATAX】datax读取hive分区表时,空分区任务报错问题解决

    问题场景 之前在 Dolphinscheduler调度Datax任务读取Hive分区表案例 博客中我分享了调度任务读取hive分区的几个场景 当时提到了分区中有空文件的解决方案 除此之外 我们还遇到了空分区的场景 即该分区没有数据 连所谓的