报错情况
在用datax同步时报检查文件类型失败,报错信息如下:
检查建表语句,确认存储类型为text,如下:
检查hdfs文件,发现存在大小为0的文件,如下
解决方案如下:
方案1、在HDFS路径后加/*,会自动扫描所有文件,并跳过空文件,"path":"/user/hive/warehouse/dv_report.db/table/dt=${yyyymmdd}/*"
方案2、删除空文件,hdfs dfs -rm ***
空文件一般为第一个文件,如
"/user/hive/warehouse/dv_report.db/table/_SUCCESS"
或者 "/user/hive/warehouse/dv_report.db/table/dt=${yyyymmdd}/part-00000-****"
但并不是所有的表都会产生空文件,所以使用删文件的方式需要检查每个表的实际hdfs文件情况,不太推荐。
空文件产生原因
part-000**文件,job在做partiton时由于分桶函数不够完善,或者数据倾斜较严重,而开发没有足够的经验对其做出处理,导致某些reduce没有分到任何数据成为空桶,最终生成一个part-000**的空文件。(使用LazyOutputFormat解决)
_SUCCESS文件,我们在跑完MR或SPARK程序时,数据输出目录一般都会有一个_SUCCESS的空文件(不是一定会产生的),这个_SUCCESS空文件代表该任务运行成功。