aws hive+kinesis on emr=了解检查点

kfgdxczn  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(328)

我有一个aws kinesis流,我在hive中创建了一个指向它的外部表。然后为检查点创建dynamodb表,并在配置单元查询中设置以下属性,如下所述:

set kinesis.checkpoint.enabled=true;
set kinesis.checkpoint.metastore.table.name=my_dynamodb_table;
set kinesis.checkpoint.metastore.hash.key.name=HashKey;                                                               
set kinesis.checkpoint.metastore.range.key.name=RangeKey;                                                            
set kinesis.checkpoint.logical.name=my_logical_name;                                                                 
set kinesis.checkpoint.iteration.no=0;

我有以下问题:
我总是要从 iteration.no 设置为0?
这是否总是从脚本的开头开始(最旧的kinesis记录将被逐出)?
假设我设置了一个cron来调度脚本的执行,那么如何检索“下一个”迭代号呢?
要在相同的数据上重新执行脚本,使用相同的执行编号重新运行查询是否足够?
如果我执行 select * from kinesis_ext_table limit 100iteration.no=0 一次又一次,一旦第一个动觉记录开始被逐出,我会得到不同/奇怪的结果吗?
给定dynamodb检查点条目:

{"startSeqNo":"1234",
 "endSeqNo":"5678",
 "closed":false}

这是什么意思 closed 场?
序列号是递增的吗?开始和结束之间是否有关系(例如:end-start=读取的记录数)?
我注意到有时只有endseqnum(没有startseqnum),我该怎么解释呢?
我知道有很多问题,但我在文件上找不到这些答案。

xdnvmnnf

xdnvmnnf1#

查看kinesis文档和kinesis存储处理程序自述文件,其中包含许多问题的答案。
我是否总是必须从iteration.no设置为0开始?
是的,除非您正在执行一些高级逻辑,它要求您跳过流中已知或已处理的部分
这是否总是从脚本的开头开始(最旧的kinesis记录将被逐出)?

假设我设置了一个cron来调度脚本的执行,那么如何检索“下一个”迭代号呢?
这是由配置单元脚本处理的,因为它在每次运行时都查询kinesis流中的所有数据
要在相同的数据上重新执行脚本,使用相同的执行编号重新运行查询是否足够?
由于kinesis数据是一个24小时的时间窗口,因此自上次查询以来,数据(可能)已更改,因此您可能希望在配置单元作业中再次查询所有记录
如果我反复执行select*from kinesis\u ext\u table limit 100 with iteration.no=0,那么一旦第一个kinesis记录开始被逐出,我会得到不同的/奇怪的结果吗?
是的,您希望结果会随着流的变化而变化
给定dynamodb检查点条目:闭合字段的含义是什么?
尽管这是kinesis存储处理程序的一个内部细节,但我相信这表明shard是否是父shard,这表明它是打开并接受新数据还是关闭并不接受新数据进入shard。如果您已向上或向下缩放流,则父碎片将存在24小时,并包含缩放后的所有数据,但不会向这些碎片中插入新数据。
序列号是递增的吗?开始和结束之间是否有关系(例如:end-start=读取的记录数)?
新的序列号通常会随着时间的推移而增加,这是亚马逊在这方面提供的唯一指导。
我注意到有时只有endseqnum(没有startseqnum),我该怎么解释呢?
这意味着shard已打开,并且仍在接受新数据(不是父shard)

相关问题