#amazon-web-services #aws-lambda #aws-glue
#amazon-веб-сервисы #aws-lambda #aws-glue
Вопрос:
В AWS Glue job мы можем написать некоторый скрипт и выполнить скрипт через job.
В AWS Lambda мы также можем написать тот же сценарий и выполнить ту же логику, что и в предыдущем задании.
Итак, мой вопрос не в том, в чем разница между AWS Glue Job и AWS Lambda, НО я пытаюсь определить, когда AWS Glue job следует предпочесть AWS Lambda, особенно когда оба выполняют одну и ту же работу? Если оба выполняют одну и ту же работу, то в идеале я бы слепо предпочел использовать саму AWS Lambda, верно?
Пожалуйста, попытайтесь понять мой запрос..
Комментарии:
1. glue предназначен для spark, а не для python.
2. @Lamanus glue также поддерживает python / pandas / pyspark.
Ответ №1:
Дополнительные моменты:
Согласно этому источнику и Часто задаваемые вопросы по Lambda и Часто задаваемые вопросы о клеях
Lambda может использовать несколько разных языков (Node.js , Python, Go, Java и т.д.), Поскольку Glue может выполнять задания только с использованием кода Scala или Python.
Lambda может выполнять код из триггеров других сервисов (SQS, Kafka, DynamoDB, Kinesis, CloudWatch и т.д.) По сравнению с Glue, который может запускаться событиями lambda, другими заданиями Glue вручную или по расписанию.
Lambda работает намного быстрее для небольших задач по сравнению с Задания на склеивание, инициализация которых занимает больше времени из-за того, что в них используется распределенная обработка. При этом Glue использует свою параллельную обработку для выполнения больших рабочих нагрузок быстрее, чем Lambda.
Похоже, что Lambda требует большей сложности / кода для интеграции в источники данных (Redshift, RDS, S3, DBS, работающие на экземплярах ECS, DynamoDB и т.д.), В то время как Glue может легко интегрироваться с ними. Однако с добавлением функций Step несколько функций lambda могут быть написаны и упорядочены последовательно из-за снижения сложности и улучшения модульности, когда каждая функция может интегрироваться в сервис aws (Redshift, RDS, S3, DBS, работающие на экземплярах ECS, DynamoDB и т.д.).
Похоже, что у Glue есть ряд дополнительных компонентов, таких как Каталог данных, который является центральным хранилищем метаданных для просмотра ваших данных, гибкий планировщик, который обрабатывает разрешение зависимостей / мониторинг заданий / повторные попытки, AWS Glue DataBrew для очистки и нормализации данных с помощью визуального интерфейса, AWS Glue Elastic Views для объединения и репликации данных в нескольких хранилищах данных, AWS Glue Schema Registry для проверки схемы потоковых данных.
Есть и другие примеры, которых мне не хватает, поэтому не стесняйтесь комментировать, и я могу обновить.
Комментарии:
1. Хороший список. Я бы добавил функции Step в список сервисов AWS, с которыми интегрируется Lambda, поскольку это обеспечивает функциональность конечного автомата для обработки данных с использованием Lambda.
2. Ого, я и не знал, что такая интеграция существует. Довольно круто! Таким образом, это поможет снизить сложность и улучшить модульность кода, если существующие процессы заказчика уже используют функции lambda. @BillWeiner, вы бы сказали, что это помогает преодолеть разрыв между lambda и glue? Добавление чтения. документация здесь и с точки зрения функциональности ETL, похоже, так и есть ( aws.amazon.com/step-functions )
3. Безусловно. Пошаговые функции обеспечивают гибкость при общем выполнении бессерверных рабочих процессов и обеспечивают экономически эффективные процессы опроса для Lambda. Это мой предпочтительный метод для реализации рабочих процессов ETL / ELT (упорядочение перемещения данных). Несмотря на простоту настройки, Glue очень часто выходит из строя из-за неправильных типов данных и неверных ожиданий от форматов данных, а также затрудняет изменение его функциональности. Классическая проблема с сервисом AWS — легко решает 70% проблемы, но вы решаете, если ваша проблема доходит до 30%. Lambda с пошаговыми функциями легко понятен и гибок для удовлетворения всех потребностей.
4. Приятно познакомиться, Билл, спасибо, что поделился этой информацией! Таким образом, Lambda может интегрироваться с Redshift и другими базами данных, просто требуется немного больше настроек, но оно того стоит по сравнению со сложностями клея?
5. Сложности, возникающие с клеем, когда вам нужно что-то, выходящее за рамки «обычного». Да, я бы предпочел потратить некоторое ограниченное время и получить гибкое, расширяемое решение, чем начинать с простого и поздно перезагружаться.
Ответ №2:
Срок службы Lambda составляет пятнадцать минут. Его можно использовать для запуска задания на склеивание как действия, основанного на событии. То есть, например, когда файл попадает в S3, у нас может быть триггер события, который может запускать задание склеивания. Glue — это управляемый сервис для всей обработки данных.
Если данных очень мало, возможно, вы можете сделать это в lambda, но по какой-то причине процесс превышает пятнадцать минут, тогда обработка данных завершится неудачей.
Ответ №3:
Ответ на этот вопрос может включать в себя некоторые основополагающие дизайнерские решения. Что делает эта работа? С какими данными вы имеете дело? Необходимо ли принять решение о том, следует ли выполнять задачу в пакетной или событийно-ориентированной парадигме?
Пакет
Это может быть необходимо или желательно, поскольку задача:
- Выполняется над большими монолитными данными (например, двоичными).
- Зависит от контекста нескольких записей в наборе данных, так что они должны быть загружены в одно задание.
- Порядок имеет значение.
Мне кажется, что так же часто я вижу, что пакетная обработка выбирается по умолчанию, потому что «мы всегда так делали», но стоит подумать об отказе от этого подхода.
Glue создан для пакетных операций. При текущем максимальном времени выполнения 15 минут и максимальной памяти 10 ГБ Lambda также стала способна обрабатывать довольно большие наборы данных за одно выполнение. Может быть сложно провести прямое сравнение затрат без учета специфики рабочей нагрузки. Когда дело доходит до разработки, я чувствую, что у Lambda есть преимущество в том, что касается инструментов для сборки, тестирования, развертывания.
Событие
В случае, когда ваши данные состоят из набора записей, вам может потребоваться проанализировать и «передать» их в Lambda. Рассмотрим поток, подобный:
- CSV попадает в S3.
- Событие S3 запускает Lambda.
- Lambda считывает и анализирует CSV в отдельные события, отправляет в другой Lambda или публикует в SNS для последующей обработки. Для ускорения приема можно использовать одновременные экземпляры этого Lambda, где каждый экземпляр отвечает за определенные строки объекта S3.
Это переводит всю логику и обработку ошибок, а также требуемые ресурсы на уровень отдельного события / записи. Часто для исправления используются такие механизмы, как очереди с просроченными письмами. В то время как контекст данного контейнера сохраняется при вызовах — при условии, что контейнер не простаивал и не был снесен — Lambda, как правило, следует считать не имеющим состояния, так что обработка события / записи рассматривается как происходящая в его собственной области, за пределами других в наборе данных.
Комментарии:
1. отличный анализ, но также… Ввод-вывод чертовски дорогой. Мы выполняем пакетные операции не потому, что всегда делали это таким образом, а потому, что это ограничивает количество операций ввода-вывода. Если бы у меня был миллион событий для обработки, я определенно смог бы сделать это намного быстрее и намного дешевле, захватив несколько пакетов, а не вызывая миллион экземпляров lambda. Каждый внутренний вызов lambda представляет собой HTTP-запрос, и это требует времени. И что потом? Вы помещаете эти данные в базу данных? Миллион параллельных вставок просто уничтожит вашу базу данных, но хорошо управляемые пакеты будут обрабатываться очень быстро без каких-либо сбоев
2. Хорошие замечания, Камил. Несколько мыслей: — HTTP: в эпоху SOA это само по себе не является недостатком. Слабая связь приводит к неэффективности, но также и к преимуществам. — «быстрее и дешевле»: как ни странно, я вижу неоднозначное мнение в Интернете по этому поводу. Я могу запустить несколько тестов. Сообщу, если я это сделаю. — DB: это зависит от доменов данных. Если у меня есть домен для «заказов», я могу не захотеть, чтобы специальное задание на склеивание записывалось непосредственно в мою таблицу заказов. Я бы, скорее всего, отправил записи ETL’d в очередь SQS для назначенной службы / лямбды, которой принадлежит таблица, чтобы вставить их (да, необязательно в пакетном режиме из очереди и в БД).