【问题标题】:PartitionedDataSet not found when Kedro pipeline is run in Docker在 Docker 中运行 Kedro 管道时找不到 PartitionedDataSet
【发布时间】:2021-01-08 09:03:29
【问题描述】:

我在读取和处理的 S3 存储桶中有多个文本文件。因此,我在 Kedro 数据目录中定义了 PartitionedDataSet,如下所示:

raw_data:
  type: PartitionedDataSet
  path: s3://reads/raw
  dataset: pandas.CSVDataSet
  load_args:
    sep: "\t"
    comment: "#"

此外,我实现了这个solution 以通过环境变量(包括 AWS 密钥)从凭证文件中获取所有秘密。

当我使用 kedro run 在本地运行时,一切正常,但是当我构建 Docker 映像(使用 kedro-docker)并使用 kedro docker run 在 Docker 环境中运行管道并使用 --docker-args 选项提供所有环境变量时我收到以下错误:

Traceback (most recent call last):
  File "/usr/local/bin/kedro", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/kedro/framework/cli/cli.py", line 724, in main
    cli_collection()
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/kedro/kedro_cli.py", line 230, in run
    pipeline_name=pipeline,
  File "/usr/local/lib/python3.7/site-packages/kedro/framework/context/context.py", line 767, in run
    raise exc
  File "/usr/local/lib/python3.7/site-packages/kedro/framework/context/context.py", line 759, in run
    run_result = runner.run(filtered_pipeline, catalog, run_id)
  File "/usr/local/lib/python3.7/site-packages/kedro/runner/runner.py", line 101, in run
    self._run(pipeline, catalog, run_id)
  File "/usr/local/lib/python3.7/site-packages/kedro/runner/sequential_runner.py", line 90, in _run
    run_node(node, catalog, self._is_async, run_id)
  File "/usr/local/lib/python3.7/site-packages/kedro/runner/runner.py", line 213, in run_node
    node = _run_node_sequential(node, catalog, run_id)
  File "/usr/local/lib/python3.7/site-packages/kedro/runner/runner.py", line 221, in _run_node_sequential
    inputs = {name: catalog.load(name) for name in node.inputs}
  File "/usr/local/lib/python3.7/site-packages/kedro/runner/runner.py", line 221, in <dictcomp>
    inputs = {name: catalog.load(name) for name in node.inputs}
  File "/usr/local/lib/python3.7/site-packages/kedro/io/data_catalog.py", line 392, in load
    result = func()
  File "/usr/local/lib/python3.7/site-packages/kedro/io/core.py", line 213, in load
    return self._load()
  File "/usr/local/lib/python3.7/site-packages/kedro/io/partitioned_data_set.py", line 240, in _load
    raise DataSetError("No partitions found in `{}`".format(self._path))
kedro.io.core.DataSetError: No partitions found in `s3://reads/raw`

注意:管道在 Docker 环境中工作正常,如果我将文件移动到某个本地目录,定义 PartitionedDataSet 并构建 Docker 映像并通过--docker-args提供环境变量

【问题讨论】:

  • Kedro 使用 fsspec 库从您在 S3 中指定的位置读取文件,由于某种原因,fsspec 无法在您配置的路径中找到任何数据。您能否确认以下内容:a) 路径构建正确且存储桶名称和公共密钥前缀有效,b) 该位置确实有一些文件,c) 您尚未配置 filename_suffix您在目录中的分区数据集,d) 您作为环境变量传递的密钥是否有足够的权限从您的 S3 存储桶中读取数据?
  • 另外,如果您可以发布 kedro docker 命令并在其中传递环境变量(显然键被截断),那就太好了
  • @DmitryDeryabin 感谢您的回复。 a)是的,我会说它们是因为对于目录中定义的数据集,我使用 context.io.load() 获得了带有分区 ID 的字典,这些字典位于指定的 s3 文件夹中,并且当我在 Docker 外部运行管道时,管道是在加载和处理数据的情况下正常执行。这也回答了b)(但我还是仔细检查了它并且文件在那里)并且还回答了d)。我已经在 Docker 之外完成了所有这些工作。对于 c),数据集的定义与上述问题一样,仅使用:类型、路径、数据集和这两个 load_args。
  • 这是我使用的kedro docker 命令kedro docker run --docker-args="--env AWS_ACCESS_KEY_ID=XXXXXXX --env AWS_SECRET_ACCESS_KEY=XXXXXXX --env USER=XXXXXXX --env PASSWORD=XXXXXX --env SERVERNAME=XXXXXX --env PORT=XXX --env NAME=XXXX"
  • @DmitryDeryabin 我发现了问题。 kedro docker run 命令中缺少区域 AWS_DEFAULT_REGION

标签: docker kedro


【解决方案1】:

解决方案(至少在我的情况下)是在 kedro docker run 命令中提供 AWS_DEFAULT_REGION 环境变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    相关资源
    最近更新 更多