Hive 使用Presto+;蜂箱

Hive 使用Presto+;蜂箱,hive,bigdata,presto,partition,Hive,Bigdata,Presto,Partition,我们有一个AmazonEMR集群(v5.19.0),其中我们在Hive(v2.3.2)上使用Presto(v0.212)来处理数据。当主题是数据读取和写入时,它是一个怪物,而且做任何事情都非常快 另一方面,我对数据排除选项非常失望。在互联网上有很多关于数据访问和写入的帖子,但几乎没有关于数据删除的基本用例。以下是我尝试使用的一些方法: ,这似乎是随机失败的。它对小表很有效,但它开始对其他表引发随机异常(其中大多数是关于它正在删除的丢失文件)。我们计划很快更新EMR版本,看看这个问题是否会停止,

我们有一个AmazonEMR集群(v5.19.0),其中我们在Hive(v2.3.2)上使用Presto(v0.212)来处理数据。当主题是数据读取和写入时,它是一个怪物,而且做任何事情都非常快

另一方面,我对数据排除选项非常失望。在互联网上有很多关于数据访问和写入的帖子,但几乎没有关于数据删除的基本用例。以下是我尝试使用的一些方法:

  • ,这似乎是随机失败的。它对小表很有效,但它开始对其他表引发随机异常(其中大多数是关于它正在删除的丢失文件)。我们计划很快更新EMR版本,看看这个问题是否会停止,但暂时它不可靠(或者我们配置了错误的东西)

  • 配置单元删除分区语句。这个速度惊人地慢。对于较大的表(超过4000个分区),删除引用空/已删除文件夹的分区需要几分钟。我真不明白这个命令怎么会这么慢

  • amazons3/hdfsrmdir命令。实际上我们正在使用这个,它可以在不到一秒钟内删除分区

当我们使用Presto查询来访问数据时,最后一种方法似乎工作得很好。但是,我们注意到分区仍然存在于配置单元元存储上,这使得配置单元在尝试执行任何查询时引发异常,并增加了其中的分区数量。由于配置单元删除分区的速度非常慢,所以我们不知道如何保持元存储的干净和快速处理

在配置单元文档中有一个关于的部分,其中包括删除缺少的分区的选项。遗憾的是,当我尝试使用“DROP PARTITIONS”参数在终端上运行它时,它显示了一条错误消息“FAILED:ParseException line 1:34在“TABLENAME”附近的“DROP”处缺少EOF”。所以我认为我的蜂巢版本不兼容或者有一个bug


那么,您知道一种使用像mine这样的配置删除真实系统上分区的好方法吗?请告诉我你如何删除大数据管道上的数据,看看我是否能找到解决我问题的灵感。另外,如果您知道从配置单元中仅删除分区引用或列出其数据已删除的所有分区的方法,请告诉我。谢谢

Try
altertable\u name恢复分区而不是
MSCK修复表
命令。它在AWS上应该可以正常工作。

正如您所观察到的,如果您在S3或HDFS上删除分区数据(文件和目录),则仍然需要从配置单元元存储中注销分区

将存储的状态与metastore的状态同步的配置单元方式是
MSCK REPAIR TABLE


将存储的状态与metastore的状态同步的Presto方法是。

这里包括我如何解决此问题的更多详细信息。请注意,如果可能,请避免使用此解决方案,并使用数据处理工具中的删除功能

  • 首先,如果可能,尝试使用Hive
    altertable\u name DROP PARTITION(…
    语句
  • 如果速度太慢,请使用分区键字段,使用类似于
    aws s3 rm
    hadoop fs-rm
    的命令删除分区文件夹
  • 最后,在配置单元上,将表转换为外部表只是为了更快地清理其元数据,因为在上一步中,您已经删除了其数据:

如果您正在使用更新的Presto,请检查此答案,以查看删除分区的好方法。

感谢您的回答,我尝试使用此命令,但出现以下错误,我的配置单元似乎无法识别:配置单元>更改表默认值。操作恢复分区;失败:ParseException行1:28无法识别alter table语句中“恢复”分区“”附近的输入"谢谢Piotr,我将接受这个答案,因为这是在我的情况下执行的理想命令。但是,我的Presto版本不支持它。我将写一篇评论,详细说明我现在正在做什么,以及我计划在更新集群后如何使用您的过程。Waldecir,在升级集群时,您可能会发现
#疑难解答很有帮助Presto community Slack()的通道。对于升级时通常会出现的典型瞬态配置问题,这样做会更好。
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='TRUE');
ALTER TABLE tablename DROP PARTITION(...
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');