presto 是否需要 Hive Metastore 才能从 S3 读取镶木地板文件?

Dan*_*lar 5 hive amazon-s3 presto apache-spark parquet

我正在尝试使用 spark 在 S3 文件中生成镶木地板文件,其目标是稍后可以使用 presto 从镶木地板进行查询。基本上,它看起来像,

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

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

如果是这样的话,有人可以帮我找到一个例子来说明它是如何完成的。更重要的是,我的数据模式正在发生变化,因此为了处理它,我在 spark 作业中创建了一个编程模式,并在创建镶木地板文件时应用它。而且,如果我在 hive Metastore 中创建架构,则需要考虑到这一点。

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

Pio*_*sen 3

您将 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');
Run Code Online (Sandbox Code Playgroud)

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

从技术上讲,应该可以创建一个从 Parquet 标头推断表架构的连接器,但我不知道现有的连接器。