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");