С раннего утра (12 марта) все задания потока данных (как запускаемые локально, так и из шаблона) завершаются с ошибкой на этапе, который ищет текущие задания потока данных с заданным именем задания. Код ошибки:
try:
logging.info("Looking for job_id on Dataflow.")
service_name = 'dataflow'
dataflow_api_version = 'v1b3'
credentials = GoogleCredentials.get_application_default()
dataflow = build(serviceName=service_name,
version=dataflow_api_version,
credentials=credentials)
result = dataflow.projects().locations().jobs().list(
projectId=project,
location=region,
).execute()
pipeline_job_id = 'none'
for job in result['jobs']:
if job['name'] == job_name:
if job['currentState'] == 'JOB_STATE_RUNNING':
pipeline_job_id = job['id']
break
if pipeline_job_id == 'none':
msg = "Could not find currently running job with the " \
f"name: {job_name}."
logging.error(msg)
raise LookupError(msg)
except Exception as e:
logging.error("Error retrieving Job ID")
raise LookupError(e)
Поднятый LookupError
:
LookupError: 'Http' object has no attribute 'redirect_codes'
Я нашел этот коммит в репо google-api-python-client
, который был Вчера, 11 марта, появились следующие новые строки:
http = httplib2.Http(timeout=http_timeout)
# 308's are used by several Google APIs (Drive, YouTube)
# for Resumable Uploads rather than Permanent Redirects.
# This asks httplib2 to exclude 308s from the status codes
# it treats as redirects
http.redirect_codes = http.redirect_codes - {308}
Я обновил свою среду локально, чтобы использовать версию google-api-python-client
версии 1.7.12, которая и представляет эту ошибку.
* ОБНОВЛЕНИЕ *
После добавления этой зависимости в файл setup.py
:
'httplib2>=0.17.0,<1dev'
заданию удалось успешно пройти через это шаг без сбоев, который указывает на возможную ошибку в потоке данных, которая не собирает самые последние зависимости для запуска задания.
Однако в конечном итоге задание не выполнено на шаге записи в BigQuery с эта ошибка:
BrokenPipeError: [Errno 32] Broken pipe