java apache-spark google-cloud-storage service-accounts google-hadoop

java - No se puede conectar el archivo de almacenamiento de Google con el conector GSC de Spark



apache-spark google-cloud-storage (1)

He escrito un trabajo de chispa en mi máquina local, que lee el archivo del almacenamiento en la nube de Google utilizando el conector de Google hadoop, como gs: //storage.googleapis.com/ como se menciona en https://cloud.google.com/dataproc/docs/ conectores / almacenamiento en la nube

Configuré una cuenta de servicio con motor de cómputo y permisos de almacenamiento. Mi configuración y código de chispa es

SparkConf conf = new SparkConf(); conf.setAppName("SparkAPp").setMaster("local"); conf.set("google.cloud.auth.service.account.enable", "true"); conf.set("google.cloud.auth.service.account.email", "[email protected]"); conf.set("google.cloud.auth.service.account.keyfile", "/root/Documents/xxx-compute-e71ddbafd13e.p12"); conf.set("fs.gs.project.id", "xxx-990711"); conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"); conf.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"); SparkContext sparkContext = new SparkContext(conf); JavaRDD<String> data = sparkContext.textFile("gs://storage.googleapis.com/xxx/xxx.txt", 0).toJavaRDD(); data.foreach(line -> System.out.println(line));

Configuré una variable de entorno también llamada GOOGLE_APPLICATION_CREDENTIALS que apunta al archivo de clave. He intentado usar ambos archivos de teclas, es decir, json y P12 . Pero no puede acceder al archivo. El error que obtengo es

java.net.UnknownHostException: metadata java.io.IOException: Error getting access token from metadata server at: http://metadata/computeMetadata/v1/instance/service-accounts/default/token at com.google.cloud.hadoop.util.CredentialFactory.getCredentialFromMetadataServiceAccount(CredentialFactory.java:208) at com.google.cloud.hadoop.util.CredentialConfiguration.getCredential(CredentialConfiguration.java:70)

Estoy ejecutando mi trabajo desde eclipse con dependencias java 8, spark 2.2.0 y conector gcs 1.6.1.hadoop2 . Necesito conectarme solo con la cuenta de servicio y no con el mecanismo de OAuth.

Gracias por adelantado


¿Lo estás intentando localmente? En caso afirmativo, debe establecer la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en key.json o configurarlo en HadoopConfiguration lugar de configurarlo en SparkConf como:

Configuration hadoopConfiguration = sparkContext.hadoopConfiguration(); hadoopConfiguration.set("google.cloud.auth.service.account.enable", true); hadoopConfiguration.set("google.cloud.auth.service.account.email", "[email protected]"); hadoopConfiguration.set("google.cloud.auth.service.account.keyfile", "/root/Documents/xxx-compute-e71ddbafd13e.p12");