Все, кроме толстой банки, терпит неудачу в докеризованном кластере flink - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть кластеризованный кластер Flink с автономным JobManager и 2 менеджерами задач.Все работает нормально, когда я отправляю толстый jar с только необходимыми мне коннекторами и моим кодом, но jar только с моим кодом не удастся - даже если я добавил jar коннектора в / opt / flink / lib и процессы контейнера показываютих нужно добавить в путь к классам.Тот же сбой происходит, когда я пытаюсь сделать удаленное соединение с моей IDE;Само собой разумеется, что необходимость каждый раз собирать толстую банку приносит несчастный опыт развития.

Что мне нужно сделать, чтобы flink понял, что дополнительные jar, которые я помещаю в / opt / flink / lib, должны использоваться со всеми новыми заданиями?

Исключение загрузчика классов:

org.apache.flink.streaming.runtime.tasks.StreamTaskException: не удается загрузить класс пользователя: org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer

Flink Dockerfile:

FROM flink:1.7.2

ADD http://central.maven.org/maven2/org/apache/flink/flink-connector-kafka_2.12/1.7.2/flink-connector-kafka_2.12-1.7.2.jar /opt/flink/lib/
ADD http://central.maven.org/maven2/org/apache/flink/flink-avro-confluent-registry/1.7.2/flink-avro-confluent-registry-1.7.2.jar /opt/flink/lib/
ADD http://central.maven.org/maven2/org/apache/flink/flink-connector-elasticsearch6_2.12/1.7.2/flink-connector-elasticsearch6_2.12-1.7.2.jar /opt/flink/lib/

Контейнер диспетчера заданий:

root@2406b722dae1:/tmp# ps ax | more
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl    1:01 /docker-java-home/jre/bin/java -Xms1024m -Xmx1024m -Dlog4j.configuration=file:/opt/flink/conf/log4j-console.properties -Dlogback.configurationFil
e=file:/opt/flink/conf/logback-console.xml -classpath /opt/flink/lib/flink-avro-confluent-registry-1.7.2.jar:/opt/flink/lib/flink-connector-elasticsearch6_2.12-1.7.2.jar:/o
pt/flink/lib/flink-connector-kafka_2.12-1.7.2.jar:/opt/flink/lib/flink-python_2.12-1.7.2.jar:/opt/flink/lib/log4j-1.2.17.jar:/opt/flink/lib/slf4j-log4j12-1.7.15.jar:/opt/fl
ink/lib/flink-dist_2.12-1.7.2.jar::: org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint --configDir /opt/flink/conf --executionMode cluster

Контейнер диспетчера задач:

root@bd1aa6e35b5a:/tmp# ps ax | more
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl    0:28 /docker-java-home/jre/bin/java -XX:+UseG1GC -Xms922M -Xmx922M -XX:MaxDirectMemorySize=8388607T -Dlog4j.configuration=file:/opt/flink/conf/log4j-c
onsole.properties -Dlogback.configurationFile=file:/opt/flink/conf/logback-console.xml -classpath /opt/flink/lib/flink-avro-confluent-registry-1.7.2.jar:/opt/flink/lib/flin
k-connector-elasticsearch6_2.12-1.7.2.jar:/opt/flink/lib/flink-connector-kafka_2.12-1.7.2.jar:/opt/flink/lib/flink-python_2.12-1.7.2.jar:/opt/flink/lib/log4j-1.2.17.jar:/op
t/flink/lib/slf4j-log4j12-1.7.15.jar:/opt/flink/lib/flink-dist_2.12-1.7.2.jar::: org.apache.flink.runtime.taskexecutor.TaskManagerRunner --configDir /opt/flink/conf

/ opt / flink / lib как на работающем JobManager, так и TaskManager:

root@bd1aa6e35b5a:/opt/flink/lib# ls -lh
total 84M
-rw------- 1 root  root  2.7M Feb 11 16:25 flink-avro-confluent-registry-1.7.2.jar
-rw------- 1 root  root   30K Feb 11 16:21 flink-connector-elasticsearch6_2.12-1.7.2.jar
-rw------- 1 root  root   67K Feb 11 16:24 flink-connector-kafka_2.12-1.7.2.jar
-rw-r--r-- 1 flink flink  81M Feb 11 14:50 flink-dist_2.12-1.7.2.jar
-rw-r--r-- 1 flink flink 139K Feb 11 14:49 flink-python_2.12-1.7.2.jar
-rw-rw-r-- 1 flink flink 479K Feb 11 14:32 log4j-1.2.17.jar
-rw-rw-r-- 1 flink flink 9.7K Feb 11 14:32 slf4j-log4j12-1.7.15.jar

На всякий случай возникли сомнения - класс находится в ожидаемой банке:

root@bd1aa6e35b5a:/opt/flink/lib# unzip -l flink-connector-kafka_2.12-1.7.2.jar | grep FlinkKafkaConsumer
    14272  2019-02-12 00:24   org/apache/flink/streaming/connectors/kafka/FlinkKafkaConsumer.class

1 Ответ

0 голосов
/ 13 апреля 2019

Я понял это.Моя первая проблема заключалась в том, что flink работал под пользователем flink, и, как видно из списка, файлы, которые я добавил в Dockerfile, принадлежат пользователю root.Проблема, с которой я столкнулся после этого, состояла в том, что sbt-assembly связывает все переходные зависимости для вас, что вы должны сделать вручную в Dockerfile (несоответствие между размером файла fat jar и файлами, которые я добавил, должно было это устранить).

Я исправил Dockerfile для проблемы владения и транзитивных зависимостей коннектора Kafka (у эластичного поиска, вероятно, все еще есть много отсутствующих зависимостей):

FROM flink:1.7.2

ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/flink/flink-connector-kafka_2.12/1.7.2/flink-connector-kafka_2.12-1.7.2.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/flink/flink-connector-kafka-base_2.12/1.7.2/flink-connector-kafka-base_2.12-1.7.2.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/flink/flink-avro/1.7.2/flink-avro-1.7.2.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/flink/flink-json/1.7.2/flink-json-1.7.2.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/avro/avro/1.8.2/avro-1.8.2.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/kafka/kafka-clients/0.10.2.1/kafka-clients-0.10.2.1.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/net/jpountz/lz4/lz4/1.3.0/lz4-1.3.0.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/xerial/snappy/snappy-java/1.1.2.6/snappy-java-1.1.2.6.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/flink/flink-avro-confluent-registry/1.7.2/flink-avro-confluent-registry-1.7.2.jar /opt/flink/lib/
ADD --chown=flink:flink http://central.maven.org/maven2/org/apache/flink/flink-connector-elasticsearch6_2.12/1.7.2/flink-connector-elasticsearch6_2.12-1.7.2.jar /opt/flink/lib/
...