所以我有一个Hadoop集群,有三个节点。维蒂卡位于集群上。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+),它现在可以使用蜂巢的元数据。所以不需要HCatalog。
发布于 2017-05-05 15:50:33
术语注意:您没有使用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');https://stackoverflow.com/questions/43808390
复制相似问题