0

Ubuntu 12.04 で mahout をビルドしようとしていますが、Windows 7 ホスト マシンで実行されている仮想マシン上で実行しています。Maven はこれを好まないようで、問題を解決する方法がよくわかりません。これは、長期間のビルド テストの結果です。

結果 :

失敗したテスト:

SearchSanityTest.testRemoval:166->Assert.assertEquals:494->Assert.failNotEquals:743->Assert.fail:88 Previous second neighbor should be first expected:<0.0> but was:<15.74860724515773>

Tests run: 834, Failures: 1, Errors: 0, Skipped: 0


[INFO] Reactor Summary:

[INFO] 

[INFO] Apache Mahout ..................................... SUCCESS [3.106s]

[INFO] Mahout Build Tools ................................ SUCCESS [2.997s]

[INFO] Mahout Math ....................................... SUCCESS [4:59.221s]

[INFO] Mahout Core ....................................... FAILURE [48:17.299s]

[INFO] Mahout Integration ................................ SKIPPED

[INFO] Mahout Examples ................................... SKIPPED

[INFO] Mahout Release Package ............................ SKIPPED

[INFO] ------------------------------------------------------------------------

[INFO] BUILD FAILURE

アイデアはありますか?これについて私にできることはありますか?

私は Hadoop をインストールしました。SSH を構成し、namenode を開始/停止して、それが機能することを確認することで、正しくセットアップしたと思います。私はJDK1.7.0_25を持っています

アップデート:

さて、「 sudo 」を使用してビルドしようとしましたが、もう少し進みましたが、それでも失敗しました。

結果 :

Failed tests: 
  SequenceFilesFromMailArchivesTest.testSequential:106->Assert.assertEquals:144->Assert.assertEquals:115 expected:<TEST/subdir/[mail-messages].gz/user@example.com> but was:    <TEST/subdir/[subsubdir/mail-messages-2].gz/user@example.com>

Tests run: 106, Failures: 1, Errors: 0, Skipped: 0

多くの人が毎日 maven 経由で mahout をインストールしなければならないので、私は何か間違ったことをしているに違いないと感じています。何か案は?それとも // 失敗したテストをコメントアウトするだけですか?

4

3 に答える 3

0

私はちょうど今この問題に遭遇しました。問題を解決するには、メソッド SequenceFilesFromMailArchivesTest.testSequential を次のように変更できることがわかりました。

@Test
public void testSequential() throws Exception {

File outputDir = this.getTestTempDir("mail-archives-out");

String[] args = {
  "--input", inputDir.getAbsolutePath(),
  "--output", outputDir.getAbsolutePath(),
  "--charset", "UTF-8",
  "--keyPrefix", "TEST",
  "--method", "sequential",
  "--body", "--subject", "--separator", ""
};

// run the application's main method
SequenceFilesFromMailArchives.main(args);

// app should create a single SequenceFile named "chunk-0" in the output dir
File expectedChunkFile = new File(outputDir, "chunk-0");
String expectedChunkPath = expectedChunkFile.getAbsolutePath();
Assert.assertTrue("Expected chunk file " + expectedChunkPath + " not found!", expectedChunkFile.isFile());

Configuration conf = new Configuration();
SequenceFileIterator<Text, Text> iterator = new SequenceFileIterator<Text, Text>(new Path(expectedChunkPath), true, conf);
Assert.assertTrue("First key/value pair not found!", iterator.hasNext());
Pair<Text, Text> record ;//= iterator.next();
/*
File parentFile = new File(new File(new File("TEST"), "subdir"), "mail-messages.gz");
Assert.assertEquals(new File(parentFile, testVars[0][0]).toString(), record.getFirst().toString());
Assert.assertEquals(testVars[0][1] + testVars[0][2], record.getSecond().toString());

Assert.assertTrue("Second key/value pair not found!", iterator.hasNext());

record = iterator.next();
Assert.assertEquals(new File(parentFile, testVars[1][0]).toString(), record.getFirst().toString());
Assert.assertEquals(testVars[1][1] + testVars[1][2], record.getSecond().toString());
*/
record = iterator.next();
File parentFileSubSubDir = new File(new File(new File(new File("TEST"), "subdir"), "subsubdir"), "mail-messages-2.gz");
Assert.assertEquals(new File(parentFileSubSubDir, testVars[0][0]).toString(), record.getFirst().toString());
Assert.assertEquals(testVars[0][1] + testVars[0][2], record.getSecond().toString());

Assert.assertTrue("Second key/value pair not found!", iterator.hasNext());
record = iterator.next();
Assert.assertEquals(new File(parentFileSubSubDir, testVars[1][0]).toString(), record.getFirst().toString());
Assert.assertEquals(testVars[1][1] + testVars[1][2], record.getSecond().toString());

/////////Modified By ZhouShuang/////////////
record = iterator.next();
File parentFile = new File(new File(new File("TEST"), "subdir"), "mail-messages.gz");
Assert.assertEquals(new File(parentFile, testVars[0][0]).toString(), record.getFirst().toString());
Assert.assertEquals(testVars[0][1] + testVars[0][2], record.getSecond().toString());

Assert.assertTrue("Second key/value pair not found!", iterator.hasNext());

record = iterator.next();
Assert.assertEquals(new File(parentFile, testVars[1][0]).toString(), record.getFirst().toString());
Assert.assertEquals(testVars[1][1] + testVars[1][2], record.getSecond().toString());
//////////Modified By ZhouShuang////////////

Assert.assertFalse("Only two key/value pairs expected!", iterator.hasNext());
}

この問題は、listFiles() によって返される File[] 内のファイルがランダムにソートされているために発生しました。それを確認するためのテストプログラムを作成しました。次のシーケンスになります: /home/alain/mytests/subsubdir /home/alain/mytests/mail-messages.gz そして PrefixAdditionFilter クラスの accept() メソッドに従って、ディレクトリ内のファイルを再帰的にシーケンスファイル。そのため、iterator.next を使用して SequenceFile のキー値を取得すると、最初に subsubdir/mail-messages-2.gz を取得し、次に mail-messages.gz を取得します。しかし、元の testSequential() 関数では、最初に mail-messages.gz をチェックし、次に subsubdir/mail-messages-2.gz をチェックします。なので順番が逆。注文を変更しただけで大丈夫です。注意: 2 つの SequenceFilesFromMailArchivesTest.java ファイルがあります。1 つは配布パッケージにあり、もう 1 つは統合パッケージにあります。後で変更する必要があります。私は間違いを犯しました:)

于 2013-08-08T08:05:37.847 に答える
0

ソースからビルドしていて、失敗しているテストが 1 つあります。

壊れたテストを自分で修正することも、すぐに修正されることを期待することもできます (時々 SVN から更新してください)。

待つことができず、物事が「多かれ少なかれ」思い通りに機能すると確信している場合は、壊れたテストを削除して、ビルドできるようにすることができます...これにはいくつかの副作用があるかもしれませんアプローチ...

于 2013-06-27T20:54:10.553 に答える