在 MinIO (MacOS) 中不能 PUT/GET 个对象

Cannot PUT/GET objects in MinIO (MacOS)

感谢阅读!

我们 运行 Presto 和 Minio 使用 docker-compose:

  minio:
    image: minio/minio:RELEASE.2021-08-31T05-46-54Z
    container_name: minio
    ports:
      - 9094:9000
      - 9001:9001
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
      MINIO_REGION: us-east-1
    command: server /data --console-address ":9001"
    mem_limit: 512m

  presto:
    image: ahanaio/prestodb-sandbox:0.250
    container_name: presto
    ports:
      - 9095:8080
    volumes: 
      - ./presto/minio.properties:/opt/presto-server/etc/catalog/minio.properties
      - ./presto/create-table.sql:/opt/create-table.sql
      - ./presto/sync-partitions.sql:/opt/sync-partitions.sql
    mem_limit: 1024m

我们上传一堆数据到minio,然后创建子目录如下PrestoSQL:

use minio.default;

CREATE TABLE orders ( 
  "name" array(varchar)
  "year" int, 
  "month" tinyint, 
  "day" tinyint) 
WITH (
  format='JSON', 
  external_location='s3a://orders-local/json/',
  partitioned_by=ARRAY['year', 'month', 'day']
  );

执行 SQL 语句后,我们团队的开发人员在 orders-local 存储桶中看到不一致的结果。在某些情况下,存在 json 目录。在其他情况下,它不存在。

我们都是运行相同的docker容器。到目前为止,我们只在 一些 MacOS 实例上看到了问题,但并非全部。我们还排除了 OS 版本,因为我们在大苏尔和卡塔琳娜看到了成功和失败。

有没有人遇到过这种不一致的情况?

我们的环境变量正在被 ~/.aws

中的值覆盖

我们无法解决环境变量未被接受的原因,但我们知道这一行是罪魁祸首:

config.WithDefaultRegion(os.Getenv("STORAGE_REGION"))

我们通过 os.Getenv() 调用成功获得了正确的区域,但是配置仍然从我们的 $HOME/.aws/config 文件中提取值。

所以似乎 .aws/config 文件的存在优先于环境变量。