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.
术语说明:您没有使用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)
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |