Hadoop 提高配置单元中ORC文件的写入速度

Hadoop 提高配置单元中ORC文件的写入速度,hadoop,hive,hadoop2,beeline,Hadoop,Hive,Hadoop2,Beeline,当前,插入覆盖表T1从T2中选择*在我的群集中大约需要100分钟表T1为ORC格式,T2为文本格式。我正在从T2读取60 GB的文本数据,并将其插入ORC表T1(插入后为10 GB)。如果我对两个表都使用文本格式,插入大约需要50分钟。在这两种情况下,我们可以做些什么来提高写入速度(我有大表)或其他建议???这可能是从文本到文本写入数据时的正常行为-它只是将数据从一个文件逐行写入另一个文件。向兽人发送文本将做更多的工作。与文本到文本操作相比,文本到orc导入将对您的数据执行额外的bucket分区

当前,
插入覆盖表T1从T2中选择*在我的群集中大约需要100分钟<代码>表T1为ORC格式,
T2为文本格式。我正在从T2读取60 GB的文本数据,并将其插入ORC表T1(插入后为10 GB)。如果我对两个表都使用文本格式,插入大约需要50分钟。在这两种情况下,我们可以做些什么来提高写入速度(我有大表)或其他建议???

这可能是从文本到文本写入数据时的正常行为-它只是将数据从一个文件逐行写入另一个文件。向兽人发送文本将做更多的工作。与文本到文本操作相比,文本到orc导入将对您的数据执行额外的bucket分区操作和压缩操作。这就是你的时间影响。ORC格式在文本格式上有两个主要优点:

  • 由于压缩而节省空间
  • 缩短使用数据的访问时间
通常,插入操作是一次操作,而访问操作将非常频繁。因此,在开始导入数据时花费更多的时间通常是有意义的,因为优化了数据和数据的存储,这样可以节省大量空间
在优化数据访问时间方面

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

在将文件插入文本表之前

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

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

插入到文本表中

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

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

插入到orc表中

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

  • @卑鄙的我

    谢谢Alex。。但我正在研究如何加快插入覆盖,因为我们在处理时间上有严格的SLA,并且有大小为250 GB的数据(文本数据)。。。因此,我们希望优化现有流程(现有流程是使用增量数据更新表并删除重复数据,如“插入t1从增量表t2选择*”,然后使用秩查询筛选重复项并插入覆盖到t1)。因此,任何可以利用的参数和方法???@skipableme我不确定我是否完全掌握了压倒一切的想法,但也许你可以为此应用四步策略。我们曾经采用这种方法进行增量数据更新,并重新确认重复数据。您仍然需要一个包含所有记录的基本ORC表,但是您可以通过减少数据量来优化增量更新。看到没。。谢谢对于simplyfi,是否有任何参数或方法(比如某种并行性)可以应用,以使insert OVERWRITE更快(不是查询优化,而是简单的数据写入速度)。。。。再次感谢您的快速响应。@S您可以尝试在插入覆盖操作中使用动态分区。我不知道它是否适用于您,此外,它还取决于您的配置和集群中的节点数。但是为分区配置单元指定正确的列应该在运行时自动标识分区的数量。导入作业将根据集群中所有节点上基于分区的任务数进行拆分。但请小心,因为分区过多会降低性能。对当然……我会试试。。。非常感谢。