datax-hdfsReader 学习

news2024/11/26 12:13:51

今天同事遇到了一个问题。 就是hdfsreader->mysqlwriter这种的时候。

有的分区没有数据会报错。

com.tencent.s2.dataingestion.common.exception.DataXException: Code:[HdfsReader-08], Description:[您尝试读取的文件目录为空.].  - 未能找到待读取的文件,请确认您的配置项path: /user/hive/warehouse/dwdmdata.db/dm_tax_f_income_account_detail_y/year_id=2022/ou_code=105

8852ec40d36d4238921930ab23a3e449.png

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

这个解决也很容易。

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

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

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

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

找到报错点

955b02e141a5433eae314472169c7757.png 

 那全部原因就是 emptyDirIsExecption 再看

/**emptyDirIsExecption  默认值为true,当指定为false,空目录任务会返回成功,同步记录数为0**/
private Boolean emptyDirIsExecption=null;

再看,这里就是很清楚了

emptyDirIsExecption = this.readerOriginConfig.getBool(Key.EMPTY_DIR_IS_EXECPTION, true);

 我们设置在json里设置 emptyDirIsExecption=false即可。

f6e24e2e714d4c2caecfcdd9def30aa5.png

————————————————————————————————————————

至此你以为我就研究完了。前面提到了hdfsreader->mysqlwriter。在刚刚的报错过程中发现了一个问题或者说bug?

9dcdfc86ae8047e9a0c02da2e59d09a8.png

hdfsReader报错很正常。但是这里把mysql的presql也执行了。

由此有个疑问 writer和reader那个先运行? 一起还是分先后?

先思考下。

如果writer先reader后。这样writer先执行presql 然后等reader的数据进来,节约了时间

如果writer后reader先。 好处是reader先读数据 如果都没读到,writer都不用启动了。

我们再看看datax是怎么思考的。

4bb622519ea848afbbf60f693a13545f.png

 所以 我上面思考的还是太简单了。

所有的pre post split 几乎都是同一时刻完成的。

当然真正的传输数据是在schedule的时候完成的。 那么我现在需要如果hdfs reader没有数据也不执行writer的presql怎么做呢?

1.按照我上面的第一种办法 在shell里判断文件个数,可以直接跳过datax结束任务

2.还是改源码? hdfs判断文件数是在split()方法里。我们看split方法

0ab7a341d1f84352b7a69cd3e1d48e59.png

 很明显hdfsreader这里会读取到0个文件。当我加了参数emptyDirIsExecption=false后 这里=1

然后走mysql的split方法后面会按照split的个数切分任务就不罗嗦了

40e19bae2ead475b9068eb99fc108735.png

 按照datax的逻辑 走到这的时候presql已经执行了。

再仔细看看 job有prepare ,task有prepare

9581e21cfbf447ecb52fe1729f52df83.png

我们点进方法发现 如果tableNumber=1就是执行job的presql  如果tableNumber>1执行task的presql;

我只能说datax想的很好。但是感觉这个不可行。

比如hdfs  表student到mysql 的student1 和student2;我的presql是truncate table student1;truncate table student2;

那么执行每个task的时候都要truncate下。。好像不是很合理吧。

按照我的需求好像把presql放到task里执行比较合理。但是呢感觉有问题。

———————————————未完待续,有时间搞下—————————————————

 

 

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

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

相关文章

持久层框架设计实现及MyBatis源码分析 ---- MyBatis基础回顾及高级应用

一、基本应用 基本开发步骤: ① 添加MyBatis的坐标 ② 创建xxx数据表 ③ 编写Xxx实体类 ④ 编写sql映射⽂件XxxMapper.xml ⑤ 编写核⼼配置⽂件SqlMapConfig.xml ⑥ 编写测试类 二、配置文件介绍 1. sql映射配置文件 XxxMapper.xml (1) 基础使用 (2) 动态SQL w…

卡尔曼滤波:The Scaler Kalman Filter常量卡尔曼滤波器

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 估计一个常数的通常做法是,做多次测量(measurement),然后使用测量的平均值作为估计值。从统计学的思想上来说,这种做法可以尽量减小估计的误差。这种方…

SpringBoot+Vue实现前后端分离的宠物医院管理系统

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

Fiddler抓包工具是最强大最好用的 Web 调试工具之一

Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大的帮助。 目录 Fiddler的基本介绍 …

【C++11重点语法上】lambda表达式,初始化列表

目录 引子:C11为什么的源来 语法1:初始化列表 1.2.2 多个对象的列表初始化 语法3:默认成员函数控制(delete,default) 语法4:lambda表达式 引子:C11为什么的源来 在2003年C标准…

22年11月-外包-面试题

目录背景题目Spring怎么解决循环依赖?什么是循环依赖第一种:互相依赖第二种:三者间依赖第三种:自我依赖三级缓存补充:那第三级缓存的作用是什么?补充:Spring 中哪些情况下,不能解决循…

【Hadoop】在云服务器上部署Hadoop2.7.1伪分布式集群

文章目录一、准备Hadoop压缩包并安装1、安装Hadoop(1)准备好hadoop压缩包(2)安装hadoop(3)查看是否安装成功2、将hadoop添加到环境变量(1)在文件末尾添加以下内容(2&…

怎样图片转文字?两分钟让你实现快速转文字

在日常的办公中,我们经常会遇到需要将纸质文件里的文字提取出来,再转换为电子档的情况,如果我们采用手动输入的话,不仅速度太慢,而且还可能因此耽误到后边的工作,是不是已经有小伙伴遇到这种现象&#xff0…

[附源码]Python计算机毕业设计Django房产中介管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

[附源码]计算机毕业设计springboot路政管理信息系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

RFC(Remote function call)

文章目录1 Definition2 Call process3. Communication4 Communication module5 RFC version .6 RFC and Web service7 Remote object maintain8 Call RFC1 Definition 2 Call process 3. Communication 4 Communication module 5 RFC version . 6 RFC and Web service 7 Remote…

mysql的主从复制

文章目录前言主备原理binlog的三种格式循环复制问题主备的搭建总结前言 mysql在日常中的使用是比较多的,大部分可能也都搭建过主从复制,或者集群模式。但是其中的原理不知道大家是否清楚。今天我们主要介绍的就是mysql主从复制的原理。 主备原理 主备…

Transformer对接公司需求的调研报告

1. 结构 从宏观的视角开始 首先将这个模型看成是一个黑箱操作。在机器翻译中,就是输入一种语言,输出另一种语言。 那么拆开这个黑箱,我们可以看到它是由编码组件、解码组件和它们之间的连接组成。 编码组件部分由一堆编码器(enc…

Open vSwitch系列之数据结构解析深入分析ofpbuf

上一篇我们分析了hmap,hamp可以说是Open vSwitch中基石结构,很多Open vSwitch中数据结构都依赖hmap。本篇我们来分析一下ofpbuf,这个结构,我们从名字上就可得知,此数据结构用于存储数据的,比如收发OpenFlow…

1543_AURIX_TC275_CPU子系统_CPU内核实现特性

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个章节看的信息应该是针对内核设计实现上TC275的具体实现特点,应该是覆盖了很多内核中的实施相关的特性的。 1. 在上下文功能支持上,P和更灵活一些。E核只支持DSP…

[附源码]Python计算机毕业设计SSM辽宁科技大学二手车交易平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

非常强,批处理框架 Spring Batch 就该这么用!(场景实战)

前言 概念词就不多说了,我简单地介绍下 , spring batch 是一个 方便使用的 较健全的 批处理 框架。 为什么说是方便使用的,因为这是 基于spring的一个框架,接入简单、易理解、流程分明。 为什么说是较健全的, 因为它…

NVIDIA 7th SkyHackathon(八)使用 Flask 与 Vue 开发 Web

1.页面效果 Web 采用 flaskvue 开发,效果图如下 2.后端 import sys import subprocess import os from PIL import Image from datetime import datetime from ASR_metrics import utils as metricsfrom werkzeug.wrappers import Request, Response from …

卡尔曼滤波:过滤随机游走

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 我们知道,随机游走序列是到当前时间为止白噪声实现(white noise realization)的简单求和。换句话说,随机游走序列中的对下一个时间点值的估计(预测)是通…

为什么程序员买不起房子?

很多人都说程序员的收入那么高,为什么程序员还是买不起房呢?其实不是程序员不想买,是真的买不起…… 拿北京为例。北京的房价可谓是越来越奇葩,不仅仅是因为银行政策导致贷款越来越难审批下来,更重要的是进入地产市场…