Не удалось разрешить замену значению: $ {akka.stream.materializer} в AWS Lambda

У меня есть приложение Java, в котором я использую Flink Api. Таким образом, в основном, что я пытаюсь сделать с кодом, заключается в создании двух наборов данных с несколькими записями, а затем их регистрации в виде двух таблиц вместе с необходимыми полями.

 DataSet<Company> comp = env.fromElements(
                new Company("Aux", 1),
                new Company("Comp2", 2),
                new Company("Comp3", 3));

        DataSet<Employee> emp = env.fromElements(
                new Employee("Kula", 1),
                new Employee("Ish", 1),
                new Employee("Kula", 3));


        tEnv.registerDataSet("Employee", emp, "name, empId");
        tEnv.registerDataSet("Company", comp, "cName, empId");

И затем я пытаюсь присоединиться к этим двум таблицам с помощью Table API:

Table anotherJoin = tEnv.sql("SELECT Employee.name, Employee.empId, Company.cName FROM " +
                "Employee RIGHT JOIN Company on Employee.empId = Company.empId");

И я просто распечатываю результаты на консоли. Это прекрасно работает на моей машине. Я создал fat-jar, используя maven-shade-plugin с зависимостями, и я пытаюсь выполнить его в AWS Lambda.

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

reference.conf @file: /var/task/reference.conf: 804: Не удалось разрешить замену значению: $ {akka.stream.materializer}: com.typesafe.config.ConfigException $ UnresolvedSubstitution com.typesafe.config.ConfigException $ UnresolvedSubstitution: reference.conf @file: /var/task/reference.conf: 804: Не удалось разрешить замену на значение: $ {akka.stream.materializer} в com.typesafe.config.impl.ConfigReference.resolveSubstitutions(ConfigReference.java: 111) at com.typesafe.config.impl.ResolveContext.realResolve(ResolveContext.java:179) в com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:142)

Я достал банку перед тем, как выполнить ее в Lambda, и увидел, что все зависимости там. Я не могу понять, где это происходит?

Любая помощь может быть оценена.

Ответы

Ответ 1

Был в состоянии, наконец, понять это, и это были некоторые серьезные проблемы с версией в моем пом. Затем я понизил все зависимости до Flink 1.3.2 а также добавил <relocations> в плагин shade. Он работает сейчас. Я привязываю весь жом, чтобы кто-то когда-нибудь помог:

<build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>


       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.ink.FlinkLambdaTest.FlinkToLambda</mainClass>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>reference.conf</resource>
                </transformer>
              </transformers>
              <relocations>
                <relocation>
                  <pattern>org.codehaus.plexus.util</pattern>
                  <shadedPattern>org.shaded.plexus.util</shadedPattern>
                  <excludes>
                    <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
                    <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
                  </excludes>
                </relocation>
              </relocations>
            </configuration>
          </execution>
        </executions>
      </plugin>  
    </plugins>
  </build>

<dependencies>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-table_2.10</artifactId>
      <version>1.3.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-java</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-streaming-java_2.10</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-clients_2.10</artifactId>
      <version>1.3.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-scala_2.10</artifactId>
      <version>1.3.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-streaming-scala_2.10</artifactId>
      <version>1.3.2</version>
    </dependency>

    </dependencies>

Обязательно измените основной класс на свой.

Ответ 2

Вы должны добавить этот код в раздел конфигурации pom → maven-shaded-plugin->:

<transformers>
    <!-- append default configs -->
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
        <resource>reference.conf</resource>
    </transformer>
</transformers>

Ответ 3

В градиенте:

buildscript {
    repositories {
        maven {
            url 'https://plugins.gradle.org/m2/'
        }
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4'
    }
}
apply plugin: 'com.github.johnrengelman.shadow'

Затем в проекте (проектах), который объединяет зависимости akka:

shadowJar {
    include 'reference.conf'
}

При этом вы должны иметь возможность строить нормально (например, путем вызова задач сборки и сборки).

Intellij IDEA также поддержал это. FTW! Он также поддержал конструкцию SBT ниже.

lazy val assemblySettings = Seq(
  assemblyJarName in assembly := name.value + ".jar",
  assemblyMergeStrategy in assembly := {
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    case _ => MergeStrategy.first
  })

Ответ 4

Это может быть немного поздно, но вот ответ с сайта Flink по этой теме.

Также исключается информация о папке META-INF, которая может вызвать проблемы с безопасностью при использовании jar.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <excludes>
                                <exclude>com.google.code.findbugs:jsr305</exclude>
                                <exclude>org.slf4j:*</exclude>
                                <exclude>log4j:*</exclude>
                            </excludes>
                        </artifactSet>
                        <filters>
                            <filter>
                                <!-- Do not copy the signatures in the META-INF folder.
                                Otherwise, this might cause SecurityExceptions when using the JAR. -->
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>my.programs.main.clazz</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Ответ 5

Для пользователей SBT это работает для меня.

assemblyMergeStrategy in assembly := {
  {
    case PathList("META-INF", [email protected]_*) => MergeStrategy.discard
    case "reference.conf" => MergeStrategy.concat
    case x => MergeStrategy.first
  }
}