Flink: Как использовать тонкую банку вместо толстой? - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время мы развертываем наши приложения Flink в виде «толстой банки» с использованием maven-shade-plugin.Проблема заключается в том, что каждая фляга приложения занимает примерно 130-140 МБ, что каждый раз создает и развертывает.Есть ли способ исключить зависимости и просто развернуть тонкий кластер в кластере размером около 50 КБ?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вот как мы это делаем с Gradle!

У нас есть два подпроекта:

  • job: для потоковой работы , которую мы хотимдля запуска
  • runtime: для дополнительных зависимостей времени выполнения (например, пользовательская FileSystem реализация)

Мы создаем новую конфигурацию Gradle для зависимостей, которые предоставлены во время выполнения:

configurations {
  provided,
  compile.extendsFrom provided
}

, а затем пометьте предоставленные зависимости как:

provided("org.apache.flink:flink-java:1.6.0")  // flink java v1.6.0

Тогда,мы модифицируем задачу jar для создания jar без каких-либо provided зависимостей :

jar {
  dependsOn configurations.runtime
  from {
    (configurations.runtime - configurations.provided).collect {
      it.isDirectory()? it : zipTree(it)
    }
  } {
    exclude 'META-INF/*.RSA'
    exclude 'META-INF/*.SF'
    exclude 'META-INF/*.DSA'
  }
  manifest {
    attributes 'Main-Class': 'com.example.Entrypoint'
  }
}

В результате получается jar с обязательными зависимостями (compile) в комплекте, который мы затем развертываем с помощью веб-интерфейса.

Что касается пользовательских зависимостей времени выполнения , мы создаем собственный образ Docker и отправляем встроенный артефакт (runtime.jar, встроенныйиспользуя ту же конфигурацию, что и выше) в каталог libs/ во Flink.Вы также можете сделать это вручную, если не используете Docker.

И, наконец, в нашем конкретном случае прямая зависимость не определена между нашей работой и зависимостью времени выполнения (которая обнаружена)используя отражение).

0 голосов
/ 03 октября 2018

Можно заранее поместить зависимые JAR-файлы в кластер в файле Flink lib (см. Избегать динамической загрузки классов ) и просто загружать тонкий JAR-файл при каждой отправке задания.

...