Comme indiqué dans le blog ci-dessous,Comment lire le fichier texte simple de Google Cloud Storage en utilisant programme local Spark-Scala
Je tentais de lire le fichier de Google Cloud Storage en utilisant Spark-scala. Pour que j'ai importé Google Cloud Storage Connector et Google Cloud Storage comme ci-dessous,
// https://mvnrepository.com/artifact/com.google.cloud/google-cloud-storage
compile group: 'com.google.cloud', name: 'google-cloud-storage', version: '0.7.0'
// https://mvnrepository.com/artifact/com.google.cloud.bigdataoss/gcs-connector
compile group: 'com.google.cloud.bigdataoss', name: 'gcs-connector', version: '1.6.0-hadoop2'
Après cela créé un simple fichier objet scala comme ci-dessous, (créé un sparkSession)
val csvData = spark.read.csv("gs://my-bucket/project-data/csv")
Mais jette ci-dessous erreur,
17/03/01 20:16:02 INFO GoogleHadoopFileSystemBase: GHFS version: 1.6.0-hadoop2
17/03/01 20:16:23 WARN HttpTransport: exception thrown while executing request
java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
at sun.net.www.http.HttpClient.New(HttpClient.java:308)
at sun.net.www.http.HttpClient.New(HttpClient.java:326)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1169)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1105)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:999)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:933)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:93)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
at com.google.cloud.hadoop.util.CredentialFactory$ComputeCredentialWithRetry.executeRefreshToken(CredentialFactory.java:158)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.cloud.hadoop.util.CredentialFactory.getCredentialFromMetadataServiceAccount(CredentialFactory.java:205)
at com.google.cloud.hadoop.util.CredentialConfiguration.getCredential(CredentialConfiguration.java:70)
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.configure(GoogleHadoopFileSystemBase.java:1816)
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.initialize(GoogleHadoopFileSystemBase.java:1003)
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.initialize(GoogleHadoopFileSystemBase.java:966)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2433)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:88)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2467)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2449)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:287)
at org.apache.spark.sql.execution.datasources.DataSource.hasMetadata(DataSource.scala:317)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:354)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:413)
at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:349)
at test$.main(test.scala:41)
at test.main(test.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
J'ai installé tous les authentifications aussi bien. Vous ne savez pas comment le délai d'attente clignote.
Modifier
Je suis en train de passer au-dessus du code à travers IntelliJ Idea (Windows). Le fichier JAR pour le même code fonctionne correctement sur Google Cloud DataProc mais donne une erreur ci-dessus lorsque je l'exécute sur le système local. J'ai installé des plugins Spark, Scala, Google Cloud dans IntelliJ.
Une chose, j'avais créé par exemple Dataproc et a essayé de se connecter à l'adresse IP externe comme indiqué dans la documentation, https://cloud.google.com/compute/docs/instances/connecting-to-instance#standardssh
Il n'a pas été en mesure de se connecter au serveur donnant erreur Délai d'attente
J'ai téléchargé le fichier de justificatif json pour une clé de compte de service et l'ai défini sur la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS car j'utilise Windows OS et j'ai essayé d'exécuter le programme mais j'ai eu la même erreur TimeOut. J'espère que j'ai pris la bonne façon de mettre en œuvre la suggestion que vous avez faite concernant google.cloud.auth.service.account.json.keyfile au chemin local d'un fichier json. Sinon, corrigez-moi s'il vous plaît. Je ne suis pas sûr où placer fs.gs.auth.service.account.json.keyfile. Si un document est disponible, veuillez suggérer toutes les configurations nécessaires pour travailler à partir de Windows OS. – Shawn
En essayant de SSH, j'ai essayé gcloud de calculer ssh comme mentionné par vous mais il m'a aussi donné l'erreur TimeOut. –
Shawn
À ma grande surprise, je peux créer un compartiment dans Google Cloud Storage à l'aide de la classe Storage. Vous ne savez pas quel est le problème avec la lecture du fichier à partir du compartiment. – Shawn