目前insert overwrite table T1 select * from T2;
在我的集群中大约需要 100 分钟。Table T1 is ORC
格式化和T2 is text
格式化。我正在从 T2 读取 60 GB 的文本数据并插入 ORC 表 T1(插入后为 10 GB)。如果我对两个表格都使用文本格式,则插入大约需要 50 分钟。在这两种情况下,我们可以做些什么来提高写入速度(我有大表进来)或任何其他建议?
问问题
2229 次
2 回答
2
我最近推导出了一种方法,将源文件拆分为多个分区,对于 100GB 数据,从文本表到 hive 中的 orc 表大约需要 6 分钟。下面的方法
在将文件插入文本表之前
1.使用 split 命令将文件拆分为 unix 位置的小分区
2.然后从路径中删除原始文件并保持文件拆分。
插入文本表
3.现在将数据加载到文本表中
4.加载需要几分钟,你可以看到分区数量与你在 unix 级别所做的相同
插入兽人表
- 例如:您已将实际文件拆分为 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 回答