2 votos

¿Se trata de una advertencia grave al acceder a GCS Bucket directamente desde Dataproc Spark Job?

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X