presto需要一个hive元存储来从s3读取Parquet文件吗?

yzxexxkh  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(752)

我正在尝试使用spark在s3文件中生成parquet文件,目的是以后可以使用presto从parquet查询。基本上是这样的, Kafka-->Spark-->Parquet<--Presto 我能够生成Parquet在s3使用Spark和它的工作良好。现在,我正在研究presto,我想我发现的是它需要Hive元存储来从parquet查询。即使parquet保存了模式,我也不能让presto读取我的parquet文件。那么,这是否意味着在创建Parquet文件时,spark作业还必须在hive meta store中存储元数据?
如果是这样的话,有人能帮我找一个例子来说明这是怎么做的吗。为了解决这个问题,我的数据模式正在改变,所以为了解决这个问题,我在spark job中创建了一个编程模式,并在创建parquet文件时应用它。而且,如果我在hivemetastore中创建模式,则需要考虑到这一点。
或者如果有更好的替代方法,你能解释一下吗?

dbf7pr2w

dbf7pr2w1#

你把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');

(根据配置单元元存储版本及其配置,您可能需要使用 s3a 而不是 s3 .)
从技术上讲,应该可以创建一个连接器,从Parquet头推断出表的模式,但我不知道现有的连接器。

相关问题