Конвейер данных AWS: вывод данных на 3 узла s3 - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть сценарий использования, в котором я хочу взять данные из DynamoDB и выполнить некоторые преобразования данных.После этого я хочу создать 3 CSV-файла (будет 3 преобразования для одних и тех же данных) и выгрузить их в 3 разных местоположения s3.Моя архитектура будет выглядеть следующим образом: enter image description here

Возможно ли это сделать?Я не могу найти какую-либо документацию по этому поводу.Если это невозможно с помощью конвейера, есть ли другие службы, которые могли бы помочь мне в моем случае использования?

Эти дампы будут планироваться ежедневно.Мое другое соображение было использовать AWS Lamda.Но, насколько я понимаю, это событие, основанное на событиях, а не на расписании, это правильно?

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Спасибо Амит за ваш ответ.Я был занят уже довольно давно.Я немного покопался после того, как вы опубликовали свой ответ.Оказывается, мы можем выгружать данные в разные местоположения s3, используя также и активность Hive.

Именно так хотелось бы конвейеру данных в этом случае.

enter image description here

Но я считаю, что написание нескольких действий улья, когда вашим источником ввода является таблица DynamoDB, не является хорошей идеей, поскольку куст не загружает никаких данных в память.Он выполняет все вычисления на фактической таблице, что может ухудшить производительность таблицы.Даже документация предлагает экспортировать данные, если вам нужно сделать несколько запросов к одним и тем же данным. Ссылка

Введите команду Hive, которая отображает таблицу в приложении Hive на данные в DynamoDB.Эта таблица служит ссылкой на данные, хранящиеся в Amazon DynamoDB;данные не хранятся локально в Hive, и любые запросы, использующие эту таблицу, выполняются для текущих данных в DynamoDB, потребляя емкость таблицы для чтения или записи при каждом запуске команды.Если вы планируете запускать несколько команд Hive для одного и того же набора данных, сначала рассмотрите возможность его экспорта.

В моем случае мне нужно было выполнять агрегации разных типов для одних и тех же данных один раз в день.Поскольку DynamoDB не поддерживает агрегации, я обратился к конвейеру данных с помощью Hive.В итоге мы использовали AWS Aurora на базе My-SQL.

0 голосов
/ 22 февраля 2019

Да, это возможно, но не используйте HiveActivity вместо EMRActivity.Если вы посмотрите документацию конвейера данных для HiveActivity , в ней четко указано его назначение и он не подходит для вашего случая использования:

Запускает запрос Hive в кластере EMR.HiveActivity упрощает настройку активности Amazon EMR, а автоматически создает таблицы Hive на основе входных данных , поступающих из либо Amazon S3, либо Amazon RDS .Все, что вам нужно указать, это HiveQL для запуска на исходных данных.AWS Data Pipeline автоматически создает таблицы Hive с $ {input1}, $ {input2} и т. Д. На основе полей ввода в объекте HiveActivity.

Ниже показано, как работает конвейер данных.должен выглядеть так.Существует также встроенный шаблон Export DynamoDB table to S3 в пользовательском интерфейсе для AWS Data Pipeline, который создает базовую структуру для вас, а затем вы можете расширять / настраивать в соответствии с вашими требованиями.

enter image description here

К следующему вопросу, используя Lambda . Конечно, лямбда может быть настроена на запуск по событиям или по расписанию , но я бы не рекомендовал использовать AWS Lambda для любых операций ETL, поскольку они ограничены по времени , а обычные ETL длиннее лямбда-времени.

AWS предлагает специальные оптимизированные функции для ETL, AWS Data Pipeline & AWS Glue, я всегда рекомендовал бы выбирать между одним из двух.Если ваш ETL включает источники данных, не управляемые в сервисах вычислений и хранения AWS, ИЛИ какой-либо особый вариант использования, который не может быть удовлетворен указанными выше двумя вариантами, тогда AWS Batch будет моим следующим соображением.

...