问题描述:
在某次执行加载语句时,加载文件中存在一些格式错误的数据,加载结束后检查 gcluster/log/gcluster/loader_log
目录发现没有记录加载错误日志。
加载语句如下:
gbase> load data infile 'file:///load_data/data.tbl'
> into table test.t
> fields terminated by '|'
> max_bad_records 0
> skip_bad_file 1;
原因分析:
GBase 8a MPP Cluster 的加载是以并行的方式进行的,排查时发现当加载语句中指定了 max_bad_records
参数后,在执行加载的过程中可能会发生下述情况:
线程A解析到了错误数据,此时停止继续解析,并准备记录日志抛出异常。此时线程B并没有解析到错误数据,在停止解析后,线程B先于线程A进行日志记录,然后抛出异常,此时会导致其他线程无法继续记录日志。
解决方案:
在记录日志前,先判断一下该线程是否存在错误数据,如果存在,则正常进行日志记录和抛出异常的操作,否则该线程不做上述操作。