所以,我有三个节点Hadoop集群。 Vertica的共同位于集群。有木地板的文件在HDFS(由蜂巢分区)。我的目标是查询中使用Vertica的这些文件。
现在我所做的是使用HDFS连接器,基本上创建Vertica的外部表,然后将其链接到HDFS:
CREATE EXTERNAL TABLE tableName (columns)
AS COPY FROM "hdfs://hostname/...../data" PARQUET;
由于数据量是很大的。这种方法不会取得良好的业绩。
我做了一些研究,Vertica Hadoop Integration
我曾尝试HCatalog但在我的Hadoop的一些配置错误,这样不工作。
我的使用情况是不是在HDFS(木地板)更改数据格式,而查询它使用Vertica的。如何做到这一点任何想法?
编辑:唯一的原因,Vertica的得到了性能下降,是因为它不能使用实木复合地板的分区。随着更高版本Vertica的(8个),它现在可以utlize蜂巢的元数据。因此,没有必要HCatalog。
你不使用HDFS连接器:术语注释。这是很好的,因为它是不赞成的8.0.1。您使用的是Reading Hadoop Native File Formats描述的直接接口,具有libhdfs ++(HDFS的方案),而不是WebHDFS(在webhdfs方案)。这是所有好为止。 (您也可以使用HCatalog连接器,但你需要做一些额外的配置,并不会比外部表更快。)
Hadoop集群只有3个节点和Vertica的共同位于他们,所以你应该得到自动节点局部性的好处 - Vertica的将使用计划查询时,有本地数据的节点。
您可以通过分区和数据排序,以便Vertica的可以使用谓词下推提高查询性能,并且还通过压缩木地板的文件。你说你不想改变数据,所以也许这些建议没有为你工作;他们不是针对Vertica的所以他们可能是值得考虑反正。 (如果你使用其他工具与您的实木复合地板的数据进行交互,他们会从这些变化中受益了。)这些技术的文档是improved in 8.0.x(链接到8.1但这是在8.0.x太)。
Additional partitioning support在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');