Apache Flink: регистрационное имя конфликтует.KvState с именем *** уже зарегистрирован другим оператором - PullRequest
0 голосов
/ 24 апреля 2018

Я столкнулся с проблемой, пока выполняю задание Flink.

Registration name clash. KvState with name 'XXXX' has already been registered by another operator (fab4c54085fa3ee85a6e1bb1062c20af).

Исключение:

org.apache.flink.runtime.execution.SuppressRestartsException: Unrecoverable failure. This suppresses job restarts. Please check the stack trace for the root cause.
    at org.apache.flink.runtime.query.KvStateLocationRegistry.notifyKvStateRegistered(KvStateLocationRegistry.java:120)
    at org.apache.flink.runtime.jobmanager.JobManager.org$apache$flink$runtime$jobmanager$JobManager$$handleKvStateMessage(JobManager.scala:1517)
    at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1.applyOrElse(JobManager.scala:740)
    at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
    at org.apache.flink.runtime.LeaderSessionMessageFilter$$anonfun$receive$1.applyOrElse(LeaderSessionMessageFilter.scala:49)
    at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
    at org.apache.flink.runtime.LogMessages$$anon$1.apply(LogMessages.scala:33)
    at org.apache.flink.runtime.LogMessages$$anon$1.apply(LogMessages.scala:28)
    at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
    at org.apache.flink.runtime.LogMessages$$anon$1.applyOrElse(LogMessages.scala:28)
    at akka.actor.Actor$class.aroundReceive(Actor.scala:502)
    at org.apache.flink.runtime.jobmanager.JobManager.aroundReceive(JobManager.scala:122)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
    at akka.actor.ActorCell.invoke(ActorCell.scala:495)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
    at akka.dispatch.Mailbox.run(Mailbox.scala:224)
    at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.IllegalStateException: Registration name clash. KvState with name 'XXXX' has already been registered by another operator (fab4c54085fa3ee85a6e1bb1062c20af).
    at org.apache.flink.runtime.query.KvStateLocationRegistry.notifyKvStateRegistered(KvStateLocationRegistry.java:116)
    ... 20 more

Когда я запускаю задание из IDE IntelliJ, оно работает хорошо, но когда я запускаю задание с помощью следующей команды, я сталкиваюсь с этой проблемой.

bin / flink run -c com.xxx.XXXJob

В чем должна быть причина этой ошибки? Я перезапустил Flink и перезапустил работу, но я все еще получаю эту ошибку.

1 Ответ

0 голосов
/ 27 апреля 2018

Я настроил одно и то же имя запрашиваемого состояния в двух функциях процесса.

    @Override
    public void open(Configuration parameters) {
        ValueStateDescriptor<? super Output> descriptor = new ValueStateDescriptor(queryableStateName, Xyz.class);
        descriptor.setQueryable("downloads");
        state = getRuntimeContext().getState(descriptor);
    }

В приведенном выше коде descriptor.setQueryable("downloads");, где я дал downloads в нескольких функциях процесса.

Что касается моего удивления о том, почему он запускается с IDE, а не с помощью команды bin/flink run.

Итак, причина в 'flink-queryable-state-runtime_2.11-1.4.2.jar'

Когда я запускаю из IDE, IDE не может найти этот jar из пути к классам. Так что запрашиваемая функция отключена и из-за этой работы никогда не жалуется. Итак, задание выполняется успешно.

Но когда я использую bin/flink run, он обнаруживается из библиотеки Флинка.

Таким образом, выдает ошибку из-за того же имени, и задание не выполняется.

...