簡體   English   中英

在Amazon S3存儲桶中創建Avro文件

[英]Creating an Avro file in Amazon S3 bucket

如何在s3存儲桶中創建Avro文件,然后將avro記錄附加到其中。

我有Byte數組形式的所有avro記錄,並成功傳輸到avro文件中。 但他的文件(我知道)不是一個完整的avro文件。 由於完整的avro文件是架構+數據。

以下是在S3中傳輸文件中的字節記錄的代碼。

任何人都知道如何創建基於avro架構的文件,然后將這些字節傳輸到同一個文件。

public void sendByteData(byte [] b, Schema schema){
        try{
            AWSCredentials credentials = new BasicAWSCredentials("XXXXX", "XXXXXX");

            AmazonS3 s3Client = new AmazonS3Client(credentials);

            //createFolder("encounterdatasample", "avrofiles", s3Client);


            ObjectMetadata meta = new ObjectMetadata();
             meta.setContentLength(b.length);
            InputStream stream = new ByteArrayInputStream(b);

        /*  File file = new File("/home/abhishek/sample.avro");
            DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(schema);
            DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(writer);
            dataFileWriter.create(schema, file); 
            s3Client.putObject("encounterdatasample", dataFileWriter.create(schema, file), stream, meta); 
         */

            s3Client.putObject("encounterdatasample", "sample.avro", stream,meta);
            System.out.println("Done writing the data");
        }catch(Exception e){
            e.printStackTrace();
        }

    }

注釋中的代碼不起作用。 只是試着玩弄它。 對此有任何幫助。

謝謝。

我相信你的斷言是正確的,你不能編碼字節數組中的數據和模式。 您需要使用一些容器(通常是文件)對兩者進行編碼。

通過一些修復,您注釋掉的代碼應該可以正常工作。 我剛從用Java編寫的Lambda中做了類似的事情。 我使用DataFileWriter將文件寫入本地磁盤( /tmp ),然后使用您的語法將該文件放入S3而沒有問題。

兩個建議:

  • 完成寫入文件后調用dataFileWriter.close()
  • 直接在s3Client.putObject調用中使用file對象,例如s3Client.putObject(bucket,key,file)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM