我正在为我的公司构建一个演示,其设置为:
Trino 应使用 HMS 作为 Iceberg 目录,数据和元数据应存储在 MinIO 中。
现在,在包含使 HMS 与 MinIO 一起工作所需的所有 jar 后,我在 Iceberg 目录中创建简单模式时收到错误
Failed to create external path s3a://warehouse/ for database warehouse. This may result in access not being allowed if the StorageBasedAuthorizationProvider is enabled: null
不知道为什么HMS要访问MinIO。我不认为它访问 MinIO 有什么意义。无论如何,我尝试为其提供
hive-site.xml
和core-site.xml
。我不知道我的设置是否生效,因为当我指定了一些错误的配置时,没有错误。
<configuration>
<!-- hive-site.xml -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>s3a://warehouse/</value>
<description>Location of the default database for the warehouse</description>
</property>
</configuration>
<configuration>
<!-- core-site.xml -->
<property>
<name>fs.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
</property>
<property>
<name>fs.s3a.access.key</name>
<value>minioadmin</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>minioadmin</value>
</property>
<property>
<name>fs.s3a.endpoint</name>
<value>http://minio:9000</value>
</property>
<property>
<name>fs.s3a.path.style.access</name>
<value>true</value>
</property>
<property>
<name>fs.s3a.connection.ssl.enabled</name>
<value>false</value>
</property>
</configuration>
我在 compose 中设置 Hive 如下:
# In docker-compose.yaml
hms:
image: docker.io/apache/hive:4.0.0
ports:
- 9083:9803
environment:
SERVICE_NAME: metastore
HIVE_CUSTOM_CONF_DIR: /custom-conf
volumes:
- ./hive/:/custom-conf/
...and other jars
为了完整起见,这是我的 Trino 目录配置
connector.name=iceberg
hive.metastore.uri=thrift://hms:9083
fs.native-s3.enabled=true
s3.region=eu-north-1
s3.endpoint=http://minio:9000
s3.path-style-access=true
s3.aws-access-key=minioadmin
s3.aws-secret-key=minioadmin
我希望你能帮我弄清楚两件事:
非常感谢!
HMS需要在“hive.metastore.warehouse.dir”定义的目录下为您创建的表创建一个子目录。建议预先创建“hive.metastore.warehouse.dir”。在 Hive 中,您可以为表指定不同的目录,“create table foo(i int) location “/my-other-directory”,但我不确定您是否可以从 Trino 执行此操作。