elasticsearch Flink异步io不';t在emr群集上使用elasticsearch,elasticsearch,apache-flink,flink-streaming,elasticsearch,Apache Flink,Flink Streaming" /> elasticsearch Flink异步io不';t在emr群集上使用elasticsearch,elasticsearch,apache-flink,flink-streaming,elasticsearch,Apache Flink,Flink Streaming" />

elasticsearch Flink异步io不';t在emr群集上使用elasticsearch

elasticsearch Flink异步io不';t在emr群集上使用elasticsearch,elasticsearch,apache-flink,flink-streaming,elasticsearch,Apache Flink,Flink Streaming,我有一个flink作业,它有以下操作员序列 自定义源(动态)->异步等待操作符->过滤器->映射->接收器(ES) 在异步等待操作符中,我查询elasticsearch并丰富从kinesis接收的事件。 在AsyncFunction中,我将在open方法中获得一个TransportClient,并在asyncInvoke方法中使用搜索API 此设置在本地群集上运行良好。但当我尝试在EMR上运行它时,作业被正确提交。当事件来自Kinesis时,它无法用以下错误丰富事件。错误的原因可能是什么。如何调

我有一个flink作业,它有以下操作员序列

自定义源(动态)->异步等待操作符->过滤器->映射->接收器(ES)

在异步等待操作符中,我查询elasticsearch并丰富从kinesis接收的事件。 在AsyncFunction中,我将在open方法中获得一个TransportClient,并在asyncInvoke方法中使用搜索API

此设置在本地群集上运行良好。但当我尝试在EMR上运行它时,作业被正确提交。当事件来自Kinesis时,它无法用以下错误丰富事件。错误的原因可能是什么。如何调试它

Caused by: NoNodeAvailableException[None of the configured nodes are available: []]
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207)
    at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55)
    at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:288)
    at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:359)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:86)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:56)
    at com.a.p.flink.AsyncESRequest.asyncInvoke(AsyncESRequest.java:54)
    at com.a.p.flink.AsyncESRequest.asyncInvoke(AsyncESRequest.java:23)
    at org.apache.flink.streaming.api.operators.async.AsyncWaitOperator.processElement(AsyncWaitOperator.java:230)
    at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator(OperatorChain.java:528)
    at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:503)
    at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:483)
    at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:891)
    at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:869)
    at org.apache.flink.streaming.api.operators.StreamSourceContexts$NonTimestampContext.collect(StreamSourceContexts.java:103)
    at org.apache.flink.streaming.api.operators.StreamSourceContexts$NonTimestampContext.collectWithTimestamp(StreamSourceContexts.java:110)
    at org.apache.flink.streaming.connectors.kinesis.internals.KinesisDataFetcher.emitRecordAndUpdateState(KinesisDataFetcher.java:486)
    at org.apache.flink.streaming.connectors.kinesis.internals.ShardConsumer.deserializeRecordForCollectionAndUpdateState(ShardConsumer.java:263)
    at org.apache.flink.streaming.connectors.kinesis.internals.ShardConsumer.run(ShardConsumer.java:209)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

另一个问题是,当我在EMR集群中运行作业时,在哪里可以看到运行作业的日志?它们似乎没有被记录在主日志中。我正在使用每个作业群集

我认为,默认情况下,EMR将网络锁定得非常紧密。也许这是一个安全/防火墙问题?谢谢@alpinegzmo。我已经验证了我可以从那台机器远程登录elasticsearch主机。同样在提交到集群的客户端中,我运行了一个简单的搜索,并验证了我是否得到了结果。这样就不会出现安全/防火墙问题。这是一个代理问题。客户端程序似乎能够连接到ES,因为我已经在客户端程序中手动设置了代理。由于该程序在任务管理器上运行,因此没有代理设置。我将代理系统变量添加到env.java.opts中,现在ES客户端可以连接了。我相信默认情况下,EMR会非常紧密地锁定网络。也许这是一个安全/防火墙问题?谢谢@alpinegzmo。我已经验证了我可以从那台机器远程登录elasticsearch主机。同样在提交到集群的客户端中,我运行了一个简单的搜索,并验证了我是否得到了结果。这样就不会出现安全/防火墙问题。这是一个代理问题。客户端程序似乎能够连接到ES,因为我已经在客户端程序中手动设置了代理。由于该程序在任务管理器上运行,因此没有代理设置。我将代理系统变量添加到env.java.opts中,现在ES客户端可以连接了。