Рубрики
Без рубрики

AWS Glue First Experience – Часть 3 – Аргументы и ведение журнала

Задача № 3: Аргументы и конфигурация практически каждое приложение требует какого -то … Tagged с помощью AWS, Python, DataScience, Serverless.

My AWS Glue Journey (5 серии части)

Задача № 3: аргументы и конфигурация

Почти каждое приложение требует какой -то конфигурации или параметров для начала с ожидаемого состояния, приложения AWS -клей ничем не отличаются.

Предполагается, что наш код будет работать в 3 разных средах (учетных записях), DEV, TEST, PROD и несколько значений конфигурации, например. Уровень журнала, тема SNS (для обновлений статуса) и еще несколько.

Документация упоминает Специальные параметры Однако это не все аргументы, которые вы можете ожидать. Мы рассмотрим это позже в этом разделе.

Во время моей работы над проектом был только один набор Defaultarguments который мог быть перезаписан до начала работы. К моменту написания этой статьи сейчас есть два набора этих Defaultarguments и Nonoverridablearguments где последний был добавлен недавно.

Некоторые из этих аргументов были представлены в виде параметров SSM, в то время как другие были представлены как Defaultarguments Анкет Это может быть очень полезно, если задание не сработает, и мы хотели бы снова запустить работу с другим уровнем журнала, например. по умолчанию Предупреждение против не деко Отладка Анкет

Чтобы добавить или изменить аргумент работы до ее запуска, вы можете либо использовать консоли

Конфигурация безопасности, библиотеки сценариев и параметры задания -> Параметры задания

AWS -клей параметры работы

Или при использовании CLI/API добавьте свой аргумент в раздел Defaultarguments Анкет

Затем внутри кода вашей работы вы можете использовать встроенный Argparse модуль или функция, предоставленная AWS-Glue-Lib getResolvedoptions ( awsglue.utils.getresolvedoptions ).

Когда я начал с моего путешествия, функция getResolvedoptions не был доступен для заданий Python Shell, и я также планировал создать объект конфигурации, который содержит необходимую конфигурацию для задания. Это было реализовано позже.

Существует разница между реализацией getResolvedoptions Между awsglue присутствует в рабочих местах pyspark и awsglue присутствует в рабочих местах Python Shell.

Код awsglue Используется в рабочих местах pyspark может быть расположена в Github Inside AWS-Glue-Lib репозиторий. Основное отличие состоит в том, что работа Pyspark обрабатывает некоторые случаи зарезервированные аргументы

Код, используемый внутри рабочих мест Python Shell, является этим.

Основная проблема этой функции заключается в том, что она делает все Defaultarguments Требуется Анкет Что довольно неуклюже, учитывая тот факт, что он также требует, чтобы вы использовали - (Double Dash) перед вашим аргументом, который обычно используется для дополнительных аргументов.

Можно повторно внедрить необязательный аргумент, обернув эту функцию, как предложено в этот ответ stackoverflow Анкет Тем не менее, это скорее обходной путь, который может сломаться, если команда AWS решит исправить это.

Также при указании Defaultarguments через консоли кажется более естественным, чтобы не включать - Поскольку пользовательский интерфейс не упоминает об этом вообще.

Отсутствующие аргументы в sys.argv

Мои первые несколько заданий использовали только Pyspark, и я обнаружил, что есть некоторые дополнительные аргументы, присутствующие в sys.argv которые используются в примерах внутри разработчиков, но не описаны. Чтобы получить описание этих аргументов, следует посетить AWS GLUE API DOCS Страница, которая немного скрыта, потому что существует только 1 прямая ссылка, указывающая на руководство разработчиков.

Вот аргументы, представленные в sys.argv Для работы Pyspark (клей 1.0).

[
  'script_2020-06-24-07-06-36.py',
  '--JOB_NAME', 'my-pyspark-job',
  '--JOB_ID', 'j_dfbe1590b8a1429eb16a4a7883c0a99f1a47470d8d32531619babc5e283dffa7',
  '--JOB_RUN_ID', 'jr_59e400f5f1e77c8d600de86c2c86cefab9e66d8d64d3ae937169d766d3edce52',
  '--job-bookmark-option', 'job-bookmark-disable',
  '--TempDir', 's3://aws-glue-temporary--us-east-1/admin'
]

Параметры НАЗВАНИЕ РАБОТЫ , Job_id , Job_run_id может быть использован для самореферентности изнутри работы без жесткого кодирования НАЗВАНИЕ РАБОТЫ в вашем коде.

Это может быть очень полезной особенностью для самоконфигурации или какого-то управления государством. Например, вы можете использовать Boto3 Клиент, чтобы получить доступ к подключениям к работе и использовать его внутри вашего кода. Без указания имени подключения в вашем коде напрямую. Или, если ваша работа была вызвана из рабочего процесса, можно было бы ссылаться на текущий рабочий процесс и его свойства.

Давайте рассмотрим sys.argv рабочих мест Python Shell

[
  '/tmp/glue-python-scripts-7pbpva1h/my_pyshell_job.py',
  '--job-bookmark-option', 'job-bookmark-disable',
  '--scriptLocation', 's3://aws-glue-scripts-133919474178-us-east-1/my_pyshell_job.py',
  '--job-language', 'python'
]

Выше мы можем увидеть эти набор аргументов, доступных в работе Python Shell.

Аргументы немного отличаются от того, что у нас есть на работе Pyspark, но главная проблема заключается в том, что аргументы НАЗВАНИЕ РАБОТЫ , Job_id , Job_run_id недоступны.

Это создает очень непоследовательный опыт разработчика и предотвращает Самопоражение изнутри работы, которая уменьшает потенциал этих параметров.

Задача № 4: регистрация

Как я уже упоминал, журналы заданий AWS отправляются в журналы AWS CloudWatch.

Есть две группы журналов для каждой работы. /aws-glue/python-jobs/output который содержит stdout и /aws-glue/python-jobs/error для Stderr . Внутренние группы журнала вы можете найти поток журнала своей работы, названной с Job_run_id например. /aws-glue/python-jobs/output/jr_3c9c24f19d1d2d5f9114061b13d4e5c97881577c26bfc45b99089f2e1abe13cc Анкет

Когда работа начинается, уже есть 2 ссылки, помогающие вам перейти к конкретному журналу.

Витрина консоли AWS.

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

При использовании журнала в вашей работе вы можете избежать регистрации в Stderr или перенаправить его на stdout Потому что Ошибка Поток журнала только Создан, когда работа заканчивается с неудачей.

Журналы заданий Pyspark Glue 1.0 очень многослойные и содержат много «беспорядка», не связанных с вашим кодом. Этот беспорядок исходит от Spark, лежащих в основе услуг. Эта проблема была решена в Glue 2.0, где воздействие журналов не связанных с ними минимально, и вы можете с комфортом сосредоточиться на своих собственных журналах. Хорошая работа AWS Team!

Работа с Python Shell не страдает от этого состояния, и вы можете ожидать, что вы получите именно то, что вы войдете.

И это все о конфигурации и ведении журнала. В следующем эпизоде мы рассмотрим упаковку и развертывание.

Код для примеров в этой статье можно найти в моем репозитории GitHub AWS-GLUE-MONOREPO-стиль

My AWS Glue Journey (5 серии части)

Оригинал: “https://dev.to/1oglop1/aws-glue-first-experience-part-3-arguments-logging-120”