【问题标题】:How to split ORC file based on size?如何根据大小拆分 ORC 文件?
【发布时间】:2017-07-23 17:45:50
【问题描述】:

我有一个要求,我想将 5GB ORC 文件拆分为 5 个文件,每个文件大小为 1 GB。 ORC 文件是可拆分的。这是否意味着我们只能逐条分割文件条带? 但我有一个要求,我想根据大小拆分 orc 文件。 例如,将 5GB ORC 文件拆分为 5 个文件,每个文件大小为 1 GB。 如果可能,请分享示例。

【问题讨论】:

    标签: java apache hadoop orc apache-crunch


    【解决方案1】:

    一种常见的方法,考虑到您的文件大小可以是 5GB、100GB、1TB、100TB 等。您可能希望挂载一个指向该文件的 Hive 表并定义另一个指向不同目录的表,然后运行使用 Hive 提供的 insert 语句从一个表插入到另一个表。

    在脚本的开头,确保您具有以下 Hive 标志:

    set hive.merge.mapredfiles=true;
    set hive.merge.mapfiles=true;
    set hive.merge.smallfiles.avgsize=1073741824;
    set hive.merge.size.per.task=1073741824;
    

    这样,每个reducer的平均输出将是1073741824 Bytes,等于1GB

    如果您只想使用 Java 代码,请使用以下标志:

    mapred.max.split.size
    mapred.min.split.size
    

    请检查这些,它们非常有用:

    【讨论】:

    • 感谢您的回复。有什么方法可以只使用核心 java 而不是 hive 进行拆分?
    • 我需要一个完全基于 Core java api 的解决方案。不是 hadoop 或 mapreduce。无论如何,非常感谢您抽出时间回复'
    • @ShamDesale 然后从问题中删除标签。鉴于问题与 hadoop 无关,请删除 hadoop、apache-crunch 和 apache。
    • 让我重新表述我的问题 - 我正在阅读 Java 中的 ORC 文件,然后根据大小拆分此文件。例如,如果文件大小为 5GB,那么我需要创建 5 个每个大小为 1GB 的文件。我可以使用java来做到这一点。这里唯一的问题是原始文件条带大小不同,拆分文件条带大小不同。我想将原始文件条带大小设置为所有拆分文件。如何在 java 中使用 orcreader 检索文件的条带大小?请回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2018-10-07
    相关资源
    最近更新 更多