通过vertica查询Parquet数据(vertica hadoop集成)

8ljdwjyq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(609)

所以我有一个hadoop集群,有三个节点。vertica位于集群上。hdfs上有Parquet文件(由hive分区)。我的目标是使用vertica查询这些文件。
现在我所做的是使用hdfs连接器,基本上在vertica中创建一个外部表,然后将其链接到hdfs:

CREATE EXTERNAL TABLE tableName (columns)
AS COPY FROM "hdfs://hostname/...../data" PARQUET;

因为数据量很大。这种方法不会获得良好的性能。
我做过一些研究,vertica hadoop集成
我尝试过hcatalog,但是hadoop上出现了一些配置错误,所以无法工作。
我的用例是不更改hdfs(parquet)上的数据格式,而使用vertica进行查询。有什么办法吗?
编辑:vertica表现缓慢的唯一原因是它不能使用Parquet地板的分区。使用更高版本的vertica(8+),它现在可以使用hive的元数据。所以不需要hcatalog。

cidc1ykv

cidc1ykv1#

术语说明:您没有使用hdfs连接器。这是好的,因为它在8.0.1中已经被弃用了。您使用的是reading hadoop native file formats中描述的直接接口,libhdfs++(hdfs方案)而不是webhdfs(webhdfs方案)。到目前为止还不错(您也可以使用hcatalog连接器,但是您需要进行一些额外的配置,并且它不会比外部表快。)
您的hadoop集群只有3个节点,而vertica位于它们的同一位置,因此您应该能够自动获得节点局部性的好处--vertica在规划查询时将使用在本地拥有数据的节点。
您可以通过对数据进行分区和排序来提高查询性能,以便vertica可以使用 predicate 下推,还可以通过压缩parquet文件来提高查询性能。你说你不想改变数据,所以这些建议可能不适合你;他们不是特定于眩晕,所以他们可能值得考虑无论如何(如果您正在使用其他工具与您的Parquet数据交互,它们也会从这些更改中受益。)这些技术的文档在8.0.x中得到了改进(链接到8.1,但在8.0.x中也是如此)。
8.0.1中添加了额外的分区支持。看起来您至少使用了8.0;我不知道你用的是不是8.0.1。如果是,您可以创建外部表,只关注您关心的分区,例如:

CREATE EXTERNAL TABLE t (id int, name varchar(50), 
                        created date, region varchar(50))
AS COPY FROM 'hdfs:///path/*/*/*' 
PARQUET(hive_partition_cols='created,region');

相关问题