3

目前insert overwrite table T1 select * from T2;在我的集群中大约需要 100 分钟。Table T1 is ORC格式化和T2 is text格式化。我正在从 T2 读取 60 GB 的文本数据并插入 ORC 表 T1(插入后为 10 GB)。如果我对两个表格都使用文本格式,则插入大约需要 50 分钟。在这两种情况下,我们可以做些什么来提高写入速度(我有大表进来)或任何其他建议?

4

2 回答 2

2

我最近推导出了一种方法,将源文件拆分为多个分区,对于 100GB 数据,从文本表到 hive 中的 orc 表大约需要 6 分钟。下面的方法

在将文件插入文本表之前

1.使用 split 命令将文件拆分为 unix 位置的小分区

2.然后从路径中删除原始文件并保持文件拆分。

插入文本表

3.现在将数据加载到文本表中

4.加载需要几分钟,你可以看到分区数量与你在 unix 级别所做的相同

插入兽人表

  1. 例如:您已将实际文件拆分为 20 个分区,然后您会看到 20 个任务/容器正在集群上运行以加载到 orc 表中,这比我遇到的其他解决方案要快得多

@卑鄙的我

于 2019-05-01T12:31:53.810 回答
1

当您将数据从文本写入文本时,这可能是一种正常行为 - 它只是将数据从一个文件逐行写入另一个文件。除此之外,Text-to-ORC 还会做更多的工作。与 text-to-text 操作相比,text-to-orc 导入将对您的数据执行额外的桶分区操作和压缩操作。这就是你的时间影响的原因。ORC 格式对文本格式有两个主要好处:

  • 由于压缩而节省空间
  • 缩短处理数据的访问时间

通常INSERT操作是单次操作,而访问操作会非常频繁。因此,在开始导入数据时通常会花费更多时间,然后由于优化了数据存储并优化了对这些数据的访问时间,从而在节省空间方面受益匪浅

于 2016-08-08T09:19:20.513 回答