有没有一种方法可以在不使用ALTER TABLE CONCATENATE命令的情况下在HDFS中合并ORC文件?

时间:2019-06-14 07:10:58

标签: hive hdfs orc

这是我使用Hive和HDFS的第一周,所以请多多包涵。

到目前为止,我看到的几乎所有合并多个ORC文件的方式都建议将ALTER TABLECONCATENATE命令一起使用。

但是我需要合并同一表的多个ORC文件,而不必ALTER表。另一种选择是创建现有表的副本,然后在其上使用ALTER TABLE,以使原始表保持不变。但是由于空间和数据冗余的原因,我也无法做到这一点。

我想要实现的目标(理想情况下)是:我需要将这些ORC作为每个表的一个文件传输到云环境中。那么,有没有一种方法可以在传输过程中将移动的ORC合并到云中?是否可以在有/没有Hive的情况下(也许直接在HDFS中实现)?

1 个答案:

答案 0 :(得分:1)

ALTER TABLE CONCATENATE以外的两种可能的方法:

  1. 尝试配置合并任务,请在此处查看详细信息:https://stackoverflow.com/a/45266244/2700344

  2. 或者,您可以强制使用单个减速器。此方法非常适用于不太大的文件。您可以使用ORDER BY覆盖同一表,这将在最后一个ORDER BY阶段强制使用单个化简器。对于大文件,这将工作缓慢甚至失败,因为所有数据都将通过单个reducer传递:

    INSERT OVERWRITE TABLE
    SELECT * FROM TABLE
      ORDER BY some_col; --this will force single reducer

作为副作用,您将获得打包更好的ORC文件,并在按by列出的列上具有高效索引。