datax-hdfsReader 学习
创始人
2024-03-05 11:18:34

今天同事遇到了一个问题。 就是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里执行比较合理。但是呢感觉有问题。

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

 

 

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...