【问题标题】:Increase write speed in hive for ORC files提高配置单元中 ORC 文件的写入速度
【发布时间】:2016-08-08 01:34:19
【问题描述】:

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

【问题讨论】:

    标签: hadoop hive hadoop2 beeline


    【解决方案1】:

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

    在将文件插入文本表之前

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

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

    插入文本表格

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

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

    插入orc表

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

    @卑鄙的我

    【讨论】:

      【解决方案2】:

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

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

      通常INSERT操作是单次操作,而访问操作会非常频繁。因此,通常在开始时花更多时间导入数据,然后由于数据的优化存储和 优化了对这些数据的访问时间

      【讨论】:

      • 谢谢 Alex.. 但我正在研究如何加快插入覆盖,因为我们对处理时间有严格的 SLA,并且数据大小为 250 GB(文本数据)......所以我们想要优化现有流程(现有流程是使用增量数据更新表并删除重复数据,例如“插入到 t1 中选择 * 从增量表 t2”,然后使用排名查询我们将过滤掉重复项并插入覆盖到 T1)。那么有什么可以利用的参数和方法呢??
      • @Despicableme 不确定我是否完全理解了总体思路,但您可能可以为此应用四步策略。我们过去常常遵循这种方法来进行增量数据更新,并对重复项进行协调。您仍然需要一个包含所有记录的基本 ORC 表,但是您将能够通过减少数据量来优化增量更新。见hortonworks.com/blog/…
      • 好的.. 谢谢... 对于 simplefi ,是否有任何参数或任何方法(如某种并行性)我们可以应用,以便插入覆盖更快(不是查询优化,而是简单的数据写入速度)..再次感谢您的快速回复..
      • @Despicableme 您可以尝试在 INSERT OVERWRITE 操作上使用动态分区。我不知道它是否适合您,此外它还取决于您的配置和集群中的节点数量。但是为 Hive 分区指定一个右列应该会在运行时自动识别分区数。您的导入作业将根据集群中所有节点的基于分区的任务数量进行拆分。但请注意这一点,因为过多的分区会降低性能。 cwiki.apache.org/confluence/display/Hive/DynamicPartitions
      • 是的..当然..会尝试...谢谢
      猜你喜欢
      • 2012-12-01
      • 2023-03-03
      • 2015-10-28
      • 2020-07-21
      • 2018-10-26
      • 2011-10-20
      • 2012-07-18
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多