【问题标题】:Airflow mysql to google cloud storage, byte-like object required errorAirflow mysql to google cloud storage, byte-like object required 错误
【发布时间】:2018-06-14 00:04:49
【问题描述】:

我正在开发一个查询 MySQL 数据库、提取数据并将其加载到 Google Cloud Storage 的 DAG。

我要导出的表包括 text、int、float、varchar(20) 和 varchar(32) 数据。

我正在使用气流 v1.8.0。

default_args = {
    'owner' : 'tia',
    'start_date' : datetime(2018, 1, 4),
    'depends_on_past' : False,
    'retries' : 1,
    'retry_delay':timedelta(minutes=5),
}

dag = DAG('mysql_to_gcs', default_args=default_args)

export_waybills = MySqlToGoogleCloudStorageOperator(
   task_id='extract_waybills',
   mysql_conn_id = 'podiotestmySQL',
   sql = 'SELECT * FROM podiodb.logistics_waybills',
   bucket='podio-reader-storage',
   filename= 'podio-data/waybills{}.json',
   schema_filename='podio-data/schema/waybills.json',
   dag=dag)

我发现了以下错误,似乎与Airflow mysql to gcp Dag error类似

[2018-01-04 11:12:23,372] {models.py:1342} INFO - 执行于 2018-01-04 00:00:00

[2018-01-04 11:12:23,400] {base_hook.py:67} 信息 - 使用连接到:35.189.207.140

[2018-01-04 11:12:24,903] {models.py:1417} 错误 - 需要类似字节的对象,而不是“str”

Traceback(最近一次通话最后一次):

文件“/home/hyperli/.local/lib/python3.5/site-packages/airflow/models.py”,第 1374 行,运行中

结果 = task_copy.execute(context=context)

文件“/home/hyperli/.local/lib/python3.5/site-packages/airflow/contrib/operators/mysql_to_gcs.py”,第 91 行,在执行中

files_to_upload = self._write_local_data_files(光标)

文件“/home/hyperli/.local/lib/python3.5/site-packages/airflow/contrib/operators/mysql_to_gcs.py”,第 136 行,在 _write_local_data_files 中

json.dump(row_dict, tmp_file_handle)

文件“/usr/lib/python3.5/json/init.py”,第 179 行,转储中 fp.write(块)

文件“/usr/lib/python3.5/tempfile.py”,第 622 行,在 func_wrapper 中 返回函数(*args, **kwargs)

TypeError: 需要一个类似字节的对象,而不是 'str'

[2018-01-04 11:12:24,907] {models.py:1433} INFO - 将任务标记为 UP_FOR_RETRY

[2018-01-04 11:12:25,037] {models.py:1462} 错误 - 需要类似字节的对象,而不是“str”

有谁知道为什么会抛出异常?

【问题讨论】:

  • 您可以发布您的 MySQL 架构或您要导出的行的示例吗?
  • 另外请提供气流版本。
  • airflow 的版本是 1.8.0,我要导出的 mySQL 表包含 int(11)、float、text、date、varchar(20) 和 varchar(32) 数据。
  • 你用的是哪个版本的python?查看我发布的答案。

标签: python mysql google-cloud-platform google-cloud-storage airflow


【解决方案1】:

您使用的是 python 3 吗?因为它接缝最新版本(1.90)的mysql_to_gcs 不兼容python 它接缝。

这个操作符似乎被更改了here 以使 mysql_to_gcs py3 兼容。但是latest version(1.90) 不包括this change

【讨论】:

  • 是的,我正在使用 python3。使用 python3 和 python2 运行 .py 文件时,我没有收到任何错误。但是,当我测试 dag 时,它使用 python3。
  • 正如您在this commit 中看到的那样,他们只引入了对 python 3 的专门 mysql_to_gcs 的支持。但是这个提交不包含在任何当前存在的版本中。所以可以预料 mysql_to_gcs 不适用于 python 3。
  • 看来我系统的python版本是2.7.12,pip python是3.5。你知道如何降级 pip python 版本吗?
  • 您可以使用 virtualenv 来避免此类问题,请参阅:virtualenv.pypa.io/en/stable
猜你喜欢
  • 2022-10-31
  • 1970-01-01
  • 2022-08-15
  • 2020-02-08
  • 2017-09-30
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多