es升级8.x后,datax同步出现的问题
按照之前的配置,出现报错
经DataX智能分析,该任务最可能的错误原因是:
com.alibaba.datax.common.exception.DataXException: Code:[ESReader-01], Description:[search出错.].
- 400:{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/liuyan_article_threads_uat_1/_doc/_search]
contains unrecognized parameters: [scroll], [search_type]"}],
"type":"illegal_argument_exception","reason":"request [/liuyan_article_threads_uat_1/_doc/_search]
contains unrecognized parameters: [scroll], [search_type]"}
at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26)
at com.alibaba.datax.plugin.reader.elasticsearch.EsReader$Task.startRead(EsReader.java:152)
at com.alibaba.datax.core.taskgroup.runner.ReaderRunner.run(ReaderRunner.java:57)
at java.lang.Thread.run(Thread.java:750)
无奈.
根据报错,把配置中的scroll和search_type 配置删除,依然报错
查询源码发现,reader里面有默认值
将源码中,setScroll,setSearchType的相关代码干掉,可以使用,但是出现问题,全量同步也只能同步10条,设置了size,最多10000条.为什么?经过分析,是searchType的 ‘dfs_query_then_fetch’ 先查询再同步 这个配置优先级更高,正常情况下是先查数量再同步的.
根源是之前用的插件,底层es api是JestClient,很久不更新了.
es8.x之后,官方力推java api…
没奈何.自己重写一下吧…用官方的api.
仔细分析和对比了github上面几个插件,确定了核心修改的部分是EsReader和EsClient.
几天折腾下来,勉强能用了.
https://github.com/ysy2025/datax-elasticsearchreader8x/tree/main
各位大佬多多点赞看下呗.