J'ai une application Java dans laquelle j'utilise le Flink Api
. Donc, ce que j'essaie de faire avec le code, c'est de créer deux jeux de données avec quelques enregistrements, puis de les enregistrer sous la forme de deux tables avec les champs nécessaires.
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");
Et puis j'essaie de joindre ces deux tables en utilisant le Table API
:
Table anotherJoin = tEnv.sql("SELECT Employee.name, Employee.empId, Company.cName FROM " +
"Employee RIGHT JOIN Company on Employee.empId = Company.empId");
Et j'imprime juste les résultats sur la console. Cela fonctionne parfaitement localement sur ma machine. J'ai créé un fat-jar
en utilisant le maven-shade-plugin
avec les dépendances et j'essaie de l'exécuter dans AWS Lambda
.
Donc, lorsque j'essaye de l'exécuter là-bas, je suis projeté avec l'exception suivante (je ne poste que les premières lignes):
reference.conf @ file: /var/task/reference.conf: 804: impossible de résoudre la substitution à une valeur: $ {akka.stream.materializer}: com.typesafe.config. ConfigException $ UnresolvedSubstitution Com.typesafe.config.ConfigException $ UnresolvedSubstitution: Reference.conf @ file: /var/task/reference.conf: 804: impossible de résoudre la substitution À une valeur: $ {akka.stream.materializer} à avec com.typesafe.config.impl.ConfigReference.resolveSubstitutions (ConfigReference.Java:111) à à à dans com.typesafe. config.impl.ResolveContext.realResolve (ResolveContext.Java:179) à avec.typesafe.config.impl.ResolveContext.resolve (ResolveContext.Java:142)
J'ai extrait le pot avant de l'exécuter dans Lambda, et il m'est arrivé de voir que toutes les dépendances étaient là. Je ne peux pas comprendre où ça va mal?
Toute aide pourrait être appréciée.
A finalement pu comprendre cela et il y avait quelques problèmes majeurs de version dans mon pom. J'ai ensuite rétrogradé toutes les dépendances en Flink 1.3.2
et ajouté <relocations>
au sein du plugin shade
. Ça fonctionne maintenant. Je joins le pom entier pour que cela puisse aider quelqu'un un jour:
<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>
Assurez-vous de changer la classe principale avec le vôtre .
Vous devez ajouter ce code dans la section pom -> maven-shaded-plugin -> configuration:
<transformers>
<!-- append default configs -->
<transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
</transformers>
En grade:
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'
Ensuite, dans le (s) projet (s) qui agrègent les dépendances akka:
shadowJar {
include 'reference.conf'
}
Avec cela en place, vous devriez être capable de construire normalement (par exemple, en appelant les tâches d’assemblage et de construction).
Intellij IDEA l'a également supporté. FTW! Il a également soutenu la construction SBT, ci-dessous.
lazy val assemblySettings = Seq(
assemblyJarName in Assembly := name.value + ".jar",
assemblyMergeStrategy in Assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case _ => MergeStrategy.first
})
Cela peut arriver un peu tard, mais voici la réponse du site Web flink concernant ce sujet.
De plus, les informations sur le dossier META-INF sont exclues, ce qui peut entraîner des problèmes de sécurité lors de l'utilisation du fichier 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>