如何根据文件大小拆分ORC文件?

3

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

1个回答

3
一种常见的方法,考虑到你的文件大小可能是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字节,相当于1GB

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

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

请查看以下内容,它们非常有用:

谢谢您的回复。 我能否仅使用核心Java而不是Hive来进行拆分? - Sham Desale
我需要一个完全基于Core Java API的解决方案。不需要Hadoop或MapReduce。无论如何,非常感谢您抽出时间来回复。 - Sham Desale
@ShamDesale,请从问题中删除标签。由于该问题与Hadoop无关,请删除hadoop、apache-crunch和apache标签。 - dbustosp
1
让我重新表述我的问题 - 我正在使用Java读取ORC文件,然后根据大小拆分此文件。例如,如果文件大小为5GB,则需要创建5个每个1GB大小的文件。我能够使用Java完成这个过程。唯一的问题在于原始文件条带大小不同,而拆分文件条带大小也不同。我想将原始文件的条带大小设置为所有拆分文件的大小。我如何在Java中使用ORCReader检索文件的条带大小?请回复。 - Sham Desale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接