Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何将Kinesis流存储到S3存储中S3存储桶中特定文件夹结构中_Amazon S3_Amazon Kinesis - Fatal编程技术网

Amazon s3 如何将Kinesis流存储到S3存储中S3存储桶中特定文件夹结构中

Amazon s3 如何将Kinesis流存储到S3存储中S3存储桶中特定文件夹结构中,amazon-s3,amazon-kinesis,Amazon S3,Amazon Kinesis,我有由Kinesis流捕获的事件。我想把所有事件放在S3的特定文件夹结构上。我想做一个带有日期戳的文件夹,比如6月15日的所有事件都应该放在这个文件夹中,6月16日以后的新文件夹应该用来挑选事件等等 作为Kinesis的新手,我刚刚阅读了文档,我发现有一个连接器框架,其中S3Emitter与配置一起用于选择需要发送数据的S3位置。但是,有人可以建议我如何维护文件夹结构,以便在日期相关的文件夹中捕获事件日期吗?该功能不幸的是,您正在查找的数据此时在for中不可用,而只是作为一个缓冲区,根据输入数据

我有由Kinesis流捕获的事件。我想把所有事件放在S3的特定文件夹结构上。我想做一个带有日期戳的文件夹,比如6月15日的所有事件都应该放在这个文件夹中,6月16日以后的新文件夹应该用来挑选事件等等


作为Kinesis的新手,我刚刚阅读了文档,我发现有一个连接器框架,其中S3Emitter与配置一起用于选择需要发送数据的S3位置。但是,有人可以建议我如何维护文件夹结构,以便在日期相关的文件夹中捕获事件日期吗?

该功能不幸的是,您正在查找的数据此时在for中不可用,而只是作为一个缓冲区,根据输入数据量刷新,请参阅resp

IEmitter的此实现用于存储来自Kinesis的文件 S3中的流。[…]当缓冲区已满时,该类的emit方法 将缓冲区的内容作为一个文件添加到S3文件名为 根据记录的第一个和最后一个序列号生成 包含在该文件中,用破折号分隔。[…][我的重点]

此外,Kinesis没有事件(响应数据记录)的第一级日期概念,只处理序列号,因此需要添加响应。应用程序级别的日期处理,请参见以下章节中的数据记录:

数据记录是存储在Amazon Kinesis流中的数据单位数据记录由一个序列号、一个分区键和一个数据blob组成,后者是一个未解释的、不可变的字节序列。Amazon Kinesis服务不会以任何方式检查、解释或更改blob中的数据。[…][我的重点]


我找到了解决这个问题的方法,并在这里发布了答案:

答案是:

通过对示例代码进行以下更改,很容易实现:

在S3sample.properties中:

createS3Bucket = true
在S3Emitter.java中:

/* Add the required imports */

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class S3Emitter implements IEmitter {

    //create date_bucket variable

    protected final String date_bucket = new SimpleDateFormat("yyyy_MM_dd_HH").format(Calendar.getInstance().getTime());

    public S3Emitter(KinesisConnectorConfiguration configuration) {
        s3Bucket = configuration.S3_BUCKET + "/" + date_bucket;
    }
}

希望这有帮助

自2014年以来,AWS提供了新的解决方案。尤其是动情消防水带,它完成了这项工作。 您只需将数据从Kinesis stream发送到Kinesis Firehose,然后点击几下即可创建Firehose