我正在尝试运行亚历克斯·霍姆斯的书“https://github.com/alexholmes/hadoop-book/blob/master/src/main/java/com/manning/hip/ch4/sort/total/TotalSortMapReduce.java”中提供的示例。
然而,当我在创建一个jar之后运行相同的程序时,我得到了一个异常:
线程"main“中的异常:1在org.apache.hadoop.mapred.lib.InputSampler.writePartitionFile(InputSampler.java:338) at com.manning.hip.ch4.sort.total.TotalSortMapReduce.runSortJob(TotalSortMapReduce.java:44) at com.manning.hip.ch4.sort.total.TotalSortMapReduce.main(TotalSortMapReduce.java:12)
有人能帮我理解如何运行代码吗?我提出了以下论点。Names.txt的输入路径(需要排序的文件)。在hadoop。
>应该生成的样例分区文件。哈多普之路。
args2 2->输出目录,其中排序的文件应该被分类。
请指导我运行这段代码的方法。
发布于 2015-05-15 07:47:52
造成此问题的原因可能是输入数据文件非常小,但在代码中:
InputSampler.Sampler<Text, Text> sampler =
new InputSampler.RandomSampler<Text,Text>
(0.1,
10000,
10); 在maxSplitsSampled中将RandomSampler<Text,Text> (double freq, int numSamples, int maxSplitsSampled)设置为10,可以通过将该参数设置为1来解决问题,或者只需确保它不大于输入文件的拆分数。
发布于 2020-12-04 14:33:17
所以,我知道这条线已经有5年多了,但是今天我遇到了同样的问题,迈克的回答对我来说不管用。(我认为,到目前为止,hadoop内部还确保不超过可用的拆分数)。
然而,我发现是什么引起了我的问题,所以我发布了这篇文章,希望它能帮助那些谷歌搜索把他们带到这个真正古老的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个以上的减速器。
https://stackoverflow.com/questions/23685734
复制相似问题