通过Vertica(Vertica Hadoop集成)查询Parquet数据

5
我有一个由三个节点组成的Hadoop集群。Vertica与集群同步安装。HDFS上有由Hive分区的Parquet文件。我的目标是使用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。

1个回答

7
术语说明:您没有使用HDFS Connector。这很好,因为从8.0.1开始已经被弃用。您正在使用Reading Hadoop Native File Formats中描述的直接接口,使用libhdfs++(hdfs方案)而不是WebHDFS(webhdfs方案)。到目前为止都很好。(您也可以使用HCatalog Connector,但需要进行一些额外的配置,并且它不会比外部表更快。)
您的Hadoop集群只有3个节点,并且Vertica与它们共存,因此您应该自动获得节点本地性的好处——在计划查询时,Vertica将使用具有本地数据的节点。
您可以通过对数据进行分区和排序来提高查询性能,以便Vertica可以使用谓词下推,并通过压缩Parquet文件来实现。您说您不想更改数据,所以也许这些建议对您没有用;它们不是特定于Vertica的,因此仍然值得考虑。(如果您使用其他工具与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');

你好 Monica!你救了我的命!是的,我的 Parquet 数据是通过 Impala(月份、日期)进行分区的。但是我的 Vertica 版本是 7.2.3。我需要升级 Vertica,这样它才能使用你编写的查询吗? - Jesse
@Jesse,hive_partition_cols参数适用于PARQUET(和ORC),该参数在8.0.1中添加。(抱歉,我以为您可能已经在使用8.0,因为我不记得之前支持hdfs URI方案,但我想我错了。) - Monica Cellio
1
是的,HDFS URI 受支持,但 hive_partition_cols 不受支持。我正在升级我的 Vertica。非常感谢! - Jesse
@Jesse 顺便说一下,8.1版本已经发布了,所以如果你正在升级,你可能想考虑跳到最新版本。 - Monica Cellio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接