Estoy ejecutando un trabajo de Spark 2.2 en Dataproc y necesito acceder a un montón de archivos avro ubicados en un bucket de almacenamiento de GCP. En concreto, necesito acceder a los archivos DIRECTAMENTE desde el bucket (es decir, NO copiarlos/pegarlos primero en la máquina maestra, tanto porque podrían ser muy grandes como por motivos de cumplimiento).
Estoy utilizando el gs://XXX
para referirse al Bucket dentro del código Spark, basado en las recomendaciones de este documento: https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage
Todo parece funcionar. Sin embargo, estoy viendo las siguientes advertencias repetidamente:
18/08/08 15:42:59 WARN com.google.cloud.hadoop.gcsio.GoogleCloudStorageReadChannel: Channel for 'gs://ff_src_data/trns2.avro' is not open.
18/08/08 15:42:59 WARN com.google.cloud.hadoop.gcsio.GoogleCloudStorageReadChannel: Channel for 'gs://ff_src_data/trns1.avro' is not open.
18/08/08 15:42:59 WARN com.google.cloud.hadoop.gcsio.GoogleCloudStorageReadChannel: Channel for 'gs://ff_src_data/trns3.avro' is not open.
¿Es una advertencia seria? ¿Tendría alguna repercusión material en el rendimiento (velocidad) en la vida real, sobre todo en caso de que se trate de archivos grandes/muchos? Si es así, ¿cómo debería solucionarlo o simplemente ignorarlo?
**** ACTUALIZACIÓN:
Aquí está el código más básico para producir esto en JAVA:
public static void main(String args[]) throws Exception
{
SparkConf spConf = new SparkConf().setAppName("AVRO-TEST-" + UUID.randomUUID().toString());
Master1 master = new Master1(spConf);
master.readSpark("gs://ff_src_data");
}
class Master1
{
private SparkConf m_spConf;
private JavaSparkContext m_jSPContext;
public Master1(SparkConf spConf)
{
m_spConf = spConf;
m_jSPContext = new JavaSparkContext(m_spConf);
}
public void readSpark(String srcDir)
{
SQLContext sqlContext = SQLContext.getOrCreate(JavaSparkContext.toSparkContext(m_jSPContext));
Dataset<Row> trn = sqlContext.read().format("com.databricks.spark.avro").load(srcDir);
trn.printSchema();
trn.show();
List<Row> rows = trn.collectAsList();
for(Row row : rows)
{
System.out.println("Row content [0]:\t" + row.getDouble(0));
}
}
}
Por ahora, esto es sólo una configuración tonta para probar la capacidad de cargar un montón de archivos Avro directamente desde el GCS Bucket.
Además, para aclarar: esto es Dataproc Image versión 1.2 y Spark versión 2.2.1