直接从Dataproc Spark Job访问GCS Bucket时,这是一个严重的警告吗?

时间:2018-08-08 15:55:09

标签: google-cloud-storage google-cloud-dataproc

我正在Dataproc上运行Spark 2.2作业,我需要访问GCP存储桶中的一堆avro文件。具体来说,我需要直接从存储桶中访问文件(即,首先不要将它们复制/粘贴到主计算机上,这既因为它们可能很大,又出于合规性原因)。

基于此文档中的建议,我正在使用gs://XXX表示法引用Spark代码中的存储桶: https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage

一切似乎都可行。但是,我反复看到以下警告:

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.

这是一个严重的警告吗?它将对实际性能(速度)产生任何实质性影响,特别是在涉及大量文件的情况下?如果是这样,应该如何解决?还是应该忽略它?

****更新:

这是在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));
        }

    }
}

目前,这只是一个愚蠢的设置,用于测试直接从GCS Bucket加载大量Avro文件的功能。

还要澄清一下:这是Dataproc Image版本1.2和Spark版本2.2.1

1 个答案:

答案 0 :(得分:1)

This warning表示代码已经关闭var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "CodigoInteligente", "Articulos.xml"); var archivo = new FileInfo(path); 。这是无害的警告消息,但它可能表示在读取文件时代码中对输入流的处理不一致。

您是否可以提供简化的工作版本来重现此警告(越简洁越好)?有了您的这份复制品,我将能够检查这是GCS连接器还是Hadoop / Spark Avro输入格式的问题。

更新: 此警告消息在GCS连接器1.9.10中为removed