presto 是否需要配置单元元存储才能从 S3 读取镶木地板文件?

Does presto require a hive metastore to read parquet files from S3?

我正在尝试使用 spark 在 S3 文件中生成镶木地板文件,目的是稍后可以使用 presto 从镶木地板查询。基本上是这样的,

Kafka-->Spark-->Parquet<--Presto

我能够使用 Spark 在 S3 中生成镶木地板,并且工作正常。现在,我正在查看 presto,我认为我发现它需要配置单元元存储才能从镶木地板查询。即使 parquet 保存了模式,我也无法让 presto 读取我的 parquet 文件。那么,这是否意味着在创建 parquet 文件时,spark 作业还必须将元数据存储在 hive 元存储中?

如果是这样的话,谁能帮我找到一个例子来说明它是如何完成的。为了增加这个问题,我的数据模式正在改变,所以为了处理它,我在 spark 作业中创建了一个编程模式并在创建镶木地板文件时应用它。而且,如果我在配置单元 Metastore 中创建模式,则需要考虑到这一点。

或者如果有更好的替代方法,您能否阐明一下?

您将 Parquet 文件保存在 S3 上。 Presto 的 S3 功能是 Hive 连接器的一个子组件。如您所说,您可以让 Spark 在 Spark 中定义表,也可以为此使用 Presto,例如

create table hive.default.xxx (<columns>) 
with (format = 'parquet', external_location = 's3://s3-bucket/path/to/table/dir');

(根据 Hive Metastore 版本及其配置,您可能需要使用 s3a 而不是 s3。)

从技术上讲,应该可以创建一个连接器来从 Parquet headers 推断表的模式,但我不知道现有的连接器。