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

Jes*_*sse 4 hadoop vertica parquet

所以我有一个有三个节点的Hadoop集群.Vertica位于群集上.HDFS上有Parquet文件(由Hive分区).我的目标是使用Vertica查询这些文件.

现在我所做的是使用HDFS Connector,基本上在Vertica中创建一个外部表,然后将其链接到HDFS:

CREATE EXTERNAL TABLE tableName (columns)
AS COPY FROM "hdfs://hostname/...../data" PARQUET;
Run Code Online (Sandbox Code Playgroud)

由于数据量很大.这种方法不会取得良好的性能.

我做了一些研究, Vertica Hadoop集成

我已经尝试过HCatalog,但我的Hadoop上有一些配置错误,所以这不起作用.

我的用例是不使用Vertica查询HDFS(Parquet)上的数据格式.有关如何做到这一点的任何想法?

编辑:Vertica性能缓慢的唯一原因是它无法使用Parquet的分区.使用更高版本的Vertica(8+),它现在可以使用配置单元的元数据.所以不需要HCatalog.

Mon*_*lio 6

术语说明:您没有使用HDFS连接器.哪个好,因为它从8.0.1开始被弃用.您正在使用阅读Hadoop本机文件格式中描述的直接接口,使用libhdfs ++(hdfs方案)而不是WebHDFS(webhdfs方案).到目前为止,这一切都很好.(您也可以使用HCatalog连接器,但是您需要进行一些额外的配置,它不会比外部表更快.)

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