这是我使用Hive和HDFS的第一周,所以请耐心等待。
到目前为止,我看到的几乎所有合并多个 ORC 文件的方法都建议将ALTER TABLE
与CONCATENATE
命令一起使用。
但是我需要合并同一表的多个 ORC 文件,而不必ALTER
表。另一种选择是创建现有表的副本,然后对其使用 ALTER TABLE
,以便我的原始表保持不变。但是由于空间和数据冗余的原因,我也不能这样做。
我试图实现的事情(理想情况下(是:我需要将这些 ORC 作为每个表的一个文件传输到云环境中。那么,有没有办法在传输过程中随时随地将 ORC 合并到云中?这可以在有/没有Hive
的情况下实现吗,也许直接在HDFS
?
ALTER TABLE CONCATENATE
之外的两种可能的方法:
尝试配置合并任务,请参阅此处的详细信息:https://stackoverflow.com/a/45266244/2700344
或者,您可以强制使用单个减速器。此方法非常适用于不太大的文件。您可以使用 ORDER BY 覆盖同一个表,这将强制单个化简器进入最后一个 ORDER BY 阶段。这对于大文件的工作速度很慢,甚至会失败,因为所有数据都将通过单个化简器传递:
INSERT OVERWRITE TABLE
SELECT * FROM TABLE
ORDER BY some_col; --this will force single reducer
作为副作用,您将获得更好的打包ORC文件,并在按顺序列出的列上具有有效的索引。