2015-05-04 3 views
0

У меня есть поток AWS Kinesis, и я создал внешнюю таблицу в Hive, указывающую на нее. Затем я создаю таблицу DynamoDB для контрольно-пропускных пунктов и в моем улом запросе я установить следующие свойства, как описан here:AWS Hive + Kinesis на EMR = Понимание контрольной отметки

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?
  • Всегда ли это начинается с начала сценария (старейшая запись Кинесиса должна быть выселена)?
  • Представьте, что я настроил cron, чтобы запланировать выполнение скрипта, как мне получить «следующий» номер итерации?
  • Чтобы повторно выполнить сценарий по тем же данным, достаточно ли повторного запуска запроса с тем же номером выполнения?
  • Если я заработаю select * from kinesis_ext_table limit 100 с iteration.no=0 снова и снова, я получу разные/странные результаты, как только первые записи Kinesis начнут выселяться?

Учитывая DynamoDB запись контрольной точки:

{"startSeqNo":"1234", 
"endSeqNo":"5678", 
"closed":false} 
  • Что смысл closed поля?
  • Являются ли порядковый номер инкрементальным и существует ли отношение между началом и концом (EG: end-start = количество прочитанных записей)?
  • Я заметил, что иногда есть только endSeqNum (no startSeqNum), как мне это интерпретировать?

Я знаю, что вопросов много, но я не мог найти эти ответы в документации.

ответ

3

Отъезд Kinesis documentation и Kinesis Storage Handler Readme, который содержит ответы на многие из ваших вопросов.

Должен ли я всегда начинать с итерации.

Да, если вы не делаете какую-то расширенную логику, которая требует от вас, чтобы пропустить известную или уже обработанную часть потока

ли это всегда начинается с начала сценария (старейший Kinesis рекорд собирается выселить)?

Да

Imagine Я настроил хроны запланировать выполнение сценария, как я получить «следующий» номер итерации?

Это обрабатывается улья сценария, так как он запрашивает все данные в потоке KINESIS при каждом запуске

Чтобы повторно выполнить скрипт на одних и тех же данных, это достаточно, чтобы повторно запустить запрос с тем же номером выполнения?

В данных Kinesis это окно времени 24 часа, данные есть (возможно) изменился с момента последнего запроса, так что вы, вероятно, хотите, чтобы запросить все записи снова в работе улей

Если Я выполняю выбор * from kinesis_ext_table limit 100 с iteration.no = 0 снова и снова, получаю ли я разные/странные результаты после того, как первые записи Kinesis начнут вытесняться?

Да, можно было бы ожидать, что результаты изменится поток меняет

Учитывая запись DynamoDB контрольной точки: Что смысл замкнутого поля?

Хотя это внутренняя деталь Kinesis Storage Хэндлер, я считаю, что это указывает на то, осколок является ли родитель осколок, который указывает на то, является ли его открытым и принимать новые данные или закрыты, а не принимать новые данные в осколок , Если вы масштабировали ваш поток вверх или вниз, родительские осколки существуют в течение 24 часов и содержат все данные с момента масштабирования, однако новые данные не будут вставлены в эти осколки.

Является ли порядковый номер инкрементным и существует ли отношение между началом и концом (EG: end-start = количество записей)?

Новые порядковые номера, как правило, возрастают с течением времени, это единственное руководство, которое Amazon предоставляет на этом.

Я заметил, что иногда есть только endSeqNum (no startSeqNum), как мне это интерпретировать?

Это означает, что черепок открыто и по-прежнему принимать новые данные (не родитель осколок)