2 votes

NoSuchMethodError lors de la lecture de google cloud storage à partir de Dataproc en utilisant java

Voici ma méthode pour lire le fichier de stockage dans le nuage.

public static String getStringObject(String bucketName, String fileName) throws Exception{
        BlobId blobId = BlobId.of(bucketName, fileName);
        byte[] content = storage.readAllBytes(blobId);
        String contentString = new String(content, UTF_8);
        return contentString;
    }

Lorsque j'appelle cette méthode depuis mon environnement de développement pour lire un fichier depuis le seau, cela fonctionne bien. Mais lorsque j'appelle cette méthode depuis le cluster Dataproc en exécutant un job spark, l'erreur suivante se produit.

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
    at com.google.api.gax.retrying.BasicRetryingFuture.<init>(BasicRetryingFuture.java:77)
    at com.google.api.gax.retrying.DirectRetryingExecutor.createFuture(DirectRetryingExecutor.java:75)
    at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:53)
    at com.google.cloud.storage.StorageImpl.readAllBytes(StorageImpl.java:460)`

Voici des parties de mon pom.xml maven

<dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-storage</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>19.0</version>
</dependency>
<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.22.0</version>
</dependency>

Qu'est-ce que je fais de mal ici ?

2voto

Angus Davis Points 2171

Lors de l'exécution sur Dataproc, vous trouverez souvent des bibliothèques Hadoop sur les classpaths des applications clientes. Cela permet l'interaction avec HDFS et GCS, mais signifie également que la version Hadoop de guava est présente.

Vous trouverez une méthode pour contourner ce problème en utilisant l'ombrage dans ce document. Réponse SO

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X