Невозможно подключиться к Redis Server при использовании apache beam sdk - PullRequest
0 голосов
/ 04 мая 2018

Итак, у меня есть работа с потоком данных, выполняющая

p.apply(RedisIO.read()
    .withEndpoint(<public endpoint>, 6379)
    .withAuth(<password>)
    .withTimeout(60000)
    .withKeyPattern("UID*"))
 .apply(ParDo.of(new Format()))
 .apply(TextIO.write().to(options.getOutput()));

Конечная точка redis общедоступна с паролем без настроек брандмауэра. Когда я запускаю вышеизложенное, я получаю следующую ошибку.

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven- 
plugin:1.6.0:java (default-cli) on project word-count-beam: An 
exception occured while executing the Java class. 
org.apache.beam.sdk.util.UserCodeException: 
redis.clients.jedis.exceptions.JedisConnectionException: 
java.net.ConnectException: Connection refused -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to 
execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default- 
cli) on project word-count-beam: An exception occured while executing 
the Java class. org.apache.beam.sdk.util.UserCodeException: 
redis.clients.jedis.exceptions.JedisConnectionException: 
java.net.ConnectException: Connection refused
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: An exception 
occured while executing the Java class. 
org.apache.beam.sdk.util.UserCodeException: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused
at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:339)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 20 more
Caused by: org.apache.beam.runners.direct.repackaged.com.google.common.util.concurrent 
.UncheckedExecutionException: 
org.apache.beam.sdk.util.UserCodeException: 
redis.clients.jedis.exceptions.JedisConnectionException: 
java.net.ConnectException: Connection refused

Таким образом, соединение не устанавливается с общедоступной конечной точкой redis. Я получаю ту же ошибку при запуске через DirectRunner . Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 19 июня 2018

Существует известная ошибка в исходном коде Apache Beam для RedisIO, когда withEndpoint игнорирует входной хост и пытается вместо этого использовать localhost. Попытка подключиться к серверу redis на локальном хосте, когда его нет, выдаст ошибку, которую вы видите.

Вы можете узнать больше о проблеме здесь , а также посмотреть запрос на удаление с исправлением здесь .

До объединения этого запроса на получение разрешения вы сможете решить эту проблему, внедрив изменение самостоятельно, скопировав RedisIO.java в свой проект и изменив

.setConnectionConfiguration(connectionConfiguration().withHost(host))
.setConnectionConfiguration(connectionConfiguration().withPort(port))

до

.setConnectionConfiguration(connectionConfiguration().withHost(host).withPort(port))

Обратите внимание, что такая же ошибка возникает 3 раза в RedisIO, по одному разу для Read (строка 168), ReadAll (строка 233) и Write (строка 365).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...