1
votes

Le cluster Flink ne démarre pas en raison d'une erreur de classe principale introuvable ou de chargement

J'essaie de configurer flink et d'exécuter un cluster, bien que j'obtienne la sortie suivante qui semble que le cluster a démarré:

Error: Could not find or load main class org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint

Quand je vais à localhost: 8081 la connexion est refusée, j'ai donc vérifié les journaux de flink et dans les journaux de taskexecutor, je vois l'erreur suivante:

Error: Could not find or load main class org.apache.flink.runtime.taskexecutor.TaskManagerRunner

et dans les journaux autonomes, j'obtiens ceci:

$ ./bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host LAPTOP-HRAHBL24.
Starting taskexecutor daemon on host LAPTOP-HRAHBL24.

J'ai cherché sur Internet et je n'ai rien trouvé. Mon java env et mes variables système sont corrects car je peux voir la sortie de java -version et javac -version. J'utilise java 8 , en particulier jdk1.8.0_251 . J'ai essayé ce qui précède avec Flink 1.10.1 et 1.5.0 , les deux me donnent la même erreur. Une idée sur la façon de résoudre ce problème?


0 commentaires

3 Réponses :


0
votes

Cela peut être lié au fichier pom.xml. Voici l'exemple d'exemple:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>flink_examples</groupId>
    <artifactId>kafkaExample</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Flink Quickstart Job</name>
    <url>http://www.myorganization.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <flink.version>1.9.1</flink.version>
        <java.version>1.8</java.version>
        <scala.binary.version>2.11</scala.binary.version>
        <jackson.version>2.9.0</jackson.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>

    <repositories>
        <repository>
            <id>apache.snapshots</id>
            <name>Apache Development Snapshot Repository</name>
            <url>https://repository.apache.org/content/repositories/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <!-- Apache Flink dependencies -->
        <!-- These dependencies are provided, because they should not be packaged into the JAR file. -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>${flink.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Add connector dependencies here. They must be in the default scope (compile). -->

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>


        <!-- Add logging framework, to produce console output when running in the IDE. -->
        <!-- These dependencies are excluded from the application JAR by default. -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
<!--            <scope>runtime</scope>-->
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
<!--            <scope>runtime</scope>-->
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.7-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <!-- Java Compiler -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <!-- We use the maven-shade plugin to create a fat jar that contains all necessary dependencies. -->
            <!-- Change the value of <mainClass>...</mainClass> if your program entry point changes. -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <!-- Run shade goal on package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <artifactSet>
                                <excludes>
                                    <exclude>org.apache.flink:force-shading</exclude>
                                    <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>flink_examples.StreamingJob</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>

                <!-- This improves the out-of-the-box experience in Eclipse by resolving some warnings. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-shade-plugin</artifactId>
                                        <versionRange>[3.0.0,)</versionRange>
                                        <goals>
                                            <goal>shade</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore/>
                                    </action>
                                </pluginExecution>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-compiler-plugin</artifactId>
                                        <versionRange>[3.1,)</versionRange>
                                        <goals>
                                            <goal>testCompile</goal>
                                            <goal>compile</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore/>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <!-- This profile helps to make things run out of the box in IntelliJ -->
    <!-- Its adds Flink's core classes to the runtime class path. -->
    <!-- Otherwise they are missing in IntelliJ, because the dependency is 'provided' -->
    <profiles>
        <profile>
            <id>add-dependencies-for-IDEA</id>

            <activation>
                <property>
                    <name>idea.version</name>
                </property>
            </activation>

            <dependencies>
                <dependency>
                    <groupId>org.apache.flink</groupId>
                    <artifactId>flink-java</artifactId>
                    <version>${flink.version}</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.flink</groupId>
                    <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
                    <version>${flink.version}</version>
                    <scope>compile</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>

</project>


0 commentaires

0
votes

J'ai eu le même problème et je viens de le résoudre.

Si vous imprimez les commandes java que le script Flink essaie d'exécuter au lieu de les exécuter, vous obtiendrez quelque chose comme java -classpath ::: .

En invoquant ces commandes directement sur le shell, vous obtiendrez le même résultat, mais maintenant vous pouvez modifier les commandes à votre guise pour reproduire un comportement mauvais / souhaité. Il y a deux problèmes avec les commandes java.

Le premier problème est le ::: à la fin du chemin de classe, supprimez-le!
Le deuxième problème est le drapeau log4j.configurationFile , il a un chemin que git bash + windows ne peut pas interpréter, j'ai dû remplacer -Dlog4j.configurationFile = file: / c / Users / eduardo / dev / flink-1.11.2 / conf / log4j.properties avec -Dlog4j.configurationFile = "\\ Users \\ eduardo \\ dev \\ flink-1.11.2 \\ conf \\ log4j.properties "

Cela a fait l'affaire pour moi, essayez-le et dites-moi comment cela s'est passé!


0 commentaires

0
votes

J'ai eu le même problème, mais pour moi, il s'est écrasé juste après l'impression Démarrage du démon standalonesession sur l'hôte ...

Je pense que j'ai également réussi à résoudre ce problème, edu m'a beaucoup aidé. J'utilise cette version maintenant: Apache Flink 1.11.2 pour Scala 2.11 , il est donc possible que cette solution de contournement ne soit pas bonne pour les autres versions.

Je me suis donc déconnecté de où ce ::: arrive à la fin du chemin de classe, et il semble qu'il provienne de flink-daemon.sh . Dans ce fichier à la 127ème ligne, il y a une commande à la VM JAVA, pour exécuter du code, cela ressemble à ceci:

Cannot install HadoopSecurityContext because Hadoop cannot be found in the Classpath.

La partie importante de cette ligne est le suivant:

Hadoop is not in the classpath/dependencies. The extended set of supported File Systems via Hadoop is not available.

Les 3 deux points viennent d'ici, où le premier est explicitement là, et les deuxième et troisième sont la valeur de cette variable.

Supprimez simplement cette partie de la ligne, puis enregistrez le fichier et recommencez à exécuter start-cluster.sh , cette fois cela devrait fonctionner.

C'est possible qu'il enregistrera certaines erreurs liées à Hadoop, mais il ne plantera pas et fonctionnera correctement. Par exemple, j'ai vu ceci:

:$INTERNAL_HADOOP_CLASSPATHS

ou ceci:

$JAVA_RUN $JVM_ARGS ${FLINK_ENV_JAVA_OPTS} "${log_setting[@]}" -classpath "`manglePathList "$FLINK_TM_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" ${CLASS_TO_RUN} "${ARGS[@]}" > "$out"

Mais ça semble ok, tout fonctionne. Btw installer Hadoop peut également résoudre ce problème, mais si cela fonctionne, je ne le modifierai pas. Je peux ouvrir localhost: 8081, où le tableau de bord est exécuté.


0 commentaires