totalorderpartitioner

dgjrabp2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(591)

我试着运行亚历克斯霍姆斯书中提供的样本https://github.com/alexholmes/hadoop-book/blob/master/src/main/java/com/manning/hip/ch4/sort/total/totalsortmapreduce.java
但是,当我在制作为jar之后运行相同的程序时,我得到了一个异常:
线程“main”java.lang.arrayindexoutofboundsexception中出现异常:1位于org.apache.hadoop.mapred.lib.inputsampler.writepartitionfile(inputsampler)。java:338)在com.manning.hip.ch4.sort.total.totalsortmapreduce.runsortjob(totalsortmapreduce。java:44)在com.manning.hip.ch4.sort.total.totalsortmapreduce.main(totalsortmapreduce。java:12)
有人能帮我理解如何运行代码吗。我提供了以下论点。args[0]-->names.txt(需要排序的文件)的输入路径。它在hadoop中。
args[1]-->应生成的示例分区文件。hadoop的路径。
args[2]-->应该在其中对已排序文件进行生成的输出目录。
请指导我如何运行此代码。

5jdjgkvh

5jdjgkvh1#

出现此问题的原因可能是输入数据文件非常小,但在代码中:

InputSampler.Sampler<Text, Text> sampler =
        new InputSampler.RandomSampler<Text,Text>
            (0.1,
             10000,
             10);

你设置了 maxSplitsSampled 至10英寸 RandomSampler<Text,Text> (double freq, int numSamples, int maxSplitsSampled) 您可以通过将该参数设置为1来解决问题,或者只需确保它不大于输入文件的拆分数。

sr4lhrrt

sr4lhrrt2#

所以,我知道这篇文章已经有5年多的历史了,但是我今天遇到了同样的问题,迈克的答案对我来说并不适用(我认为现在hadoop内部还可以确保不超过可用拆分的数量)。
然而,我发现了是什么原因导致了这个问题,所以我发了这个帖子,希望它能帮助那些通过google搜索找到这个真正古老的hadoop线程的人。
在我的例子中,问题是我指定的输入文件太少,采样频率太低。在这种情况下,它可能发生(不是每次,提醒你,只是有时真的让你发疯),你产生的样本数量比你指定的减少。每次发生这种情况时,我的系统都会崩溃,并显示以下错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 9
        at org.apache.hadoop.mapreduce.lib.partition.InputSampler.writePartitionFile(InputSampler.java:336)
        at ...

例如,在本例中,只生成了9个样本,我尝试使用9个以上的还原剂。

相关问题