elasticsearch,google-cloud-dataflow,apache-beam,Java,elasticsearch,Google Cloud Dataflow,Apache Beam" /> elasticsearch,google-cloud-dataflow,apache-beam,Java,elasticsearch,Google Cloud Dataflow,Apache Beam" />

Java 从ElasticsearchIO等待[10000]毫秒后获取侦听器超时

Java 从ElasticsearchIO等待[10000]毫秒后获取侦听器超时,java,elasticsearch,google-cloud-dataflow,apache-beam,Java,elasticsearch,Google Cloud Dataflow,Apache Beam,我试图测试一个简单的Apache Beam代码,源代码为Elasticsearch。我从中找到了ElasticsearchIO源类 我修改了Beam的MinimalWordCount示例,将源代码作为Elasticsearch而不是TextIO。以下是要点, String[] hosts = new String[1]; hosts[0]="http://localhost:9200"; PipelineOptions options = PipelineOptionsFactory.creat

我试图测试一个简单的Apache Beam代码,源代码为Elasticsearch。我从中找到了ElasticsearchIO源类

我修改了Beam的MinimalWordCount示例,将源代码作为Elasticsearch而不是TextIO。以下是要点,

String[] hosts = new String[1];
hosts[0]="http://localhost:9200";
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline p = Pipeline.create(options);
p.apply(
      ElasticsearchIO.read().withConnectionConfiguration(
        ElasticsearchIO.ConnectionConfiguration.create(hosts, "test_index", "users").withUsername("esuser").withPassword("password")
      )
 )
.apply("ExtractWords", ParDo.of(new DoFn<String, String>() {
      @ProcessElement
      public void processElement(ProcessContext c) {
         for (String word : c.element().split("[^a-zA-Z']+")) { 
           if (!word.isEmpty()) {
             c.output(word);
           }
         }
      }
}));
p.run().waitUntilFinish();
我犯了一个错误

执行Java类时发生异常。无效的: InvocationTargetException:java.io.IOException:侦听器超时 等待[10000]毫秒

我进行了调试,可以看到一切正常,Elasicsearch客户端已经构建&代码正在检索索引中的数据。但读取转换后的ParDo函数根本不会执行。Elasticsearch客户端一直在等待,最后出现超时错误

我知道用于Beam的Elasicsearch连接器仍在开发中。但是有人能帮我找出我做错了什么吗


PS:我正在本地运行Elasticsearch 5.2.1。

您能否运行mvn-X以获得详细说明? 我在弹性论坛上找到了这个


您可能应该通过超时进行更多的调查

问题在于代码执行删除滚动。如果我在ElasticsearchIO.java中对代码进行注释,管道运行良好

restClient.performRequest(
             "DELETE",
             "/_search/scroll",
             Collections.<String, String>emptyMap(),
             entity,
             new BasicHeader("", ""));
restClient.performRequest(
“删除”,
“/\u搜索/滚动”,
Collections.emptyMap(),
实体,
新BasicHeader(“,”);

当前版本的ElasticsearchIO(beam-0.6.0 2017/03)尚不支持版本5的Elasticsearch。超时问题确实是由于当前Elasticsearch IO与ES v5.x不兼容造成的。但不清除滚动在ES端有一个代价:段合并过程(从较小的段中创建较大的段并删除较小的段)被搁置,因为ES无法在滚动上下文使用旧段时删除旧段


此外,还有一件事:IO.read以Json的形式返回文档,因此split ParDo可能也会根据字段名而不仅仅是字段值进行拆分。

直接涉及接收到的异常的问题,标题为“”,最近以消息“通过添加ES 5.x支持()”结束

这个错误现在是否仍然表现出来

restClient.performRequest(
             "DELETE",
             "/_search/scroll",
             Collections.<String, String>emptyMap(),
             entity,
             new BasicHeader("", ""));