Q задание не выполнено mahout ssvd

Я пытаюсь запустить ssvd на некоторых tfidf-векторах в mahout. Когда я запускаю его в коде Java следующим образом (с jar-файлами mahout 0.6), он работает нормально:

public static void main(String[] args){
    runSSVDOnSparseVectors(vectorOutputPath
     + "/tfidf-vectors/part-r-00000", ssvdOutputPath, 1, 0, 30000, 1);
}

private static void runSSVDOnSparseVectors(String inputPath, String outputPath, 
                    int rank, int oversampling, int blocks,
                    int reduceTasks) throws IOException {
    Configuration conf = new Configuration();
    // get number of reduce tasks from config?
    SSVDSolver solver = new SSVDSolver(conf, new Path[] { new Path(
            inputPath) }, new Path(outputPath), blocks, rank, oversampling,
            reduceTasks);
    solver.setcUHalfSigma(true);
    solver.setcVHalfSigma(true);
    solver.run();
}

Я решил, что хочу преобразовать его в сценарий bash и просто использовать вместо этого команду cli, но когда я это делаю, я получаю следующую ошибку (пробовал это на версиях 0.5 и 0.7, ни одна из них не работала. Я мог попробовать 0.6, но я не т думаю, что это вещь версии):

[username@hostname lsa]$  $MAHOUT/mahout ssvd -i $H/test_lsa/v_out/tfidf-vectors -o $H/test_lsa/svd_out -k 1 -p 0 -r 30000 -t 1
Running on hadoop, using /usr/bin/hadoop and HADOOP_CONF_DIR=
MAHOUT-JOB: /usr/lib/mahout-distribution-0.7/mahout-examples-0.7-job.jar
12/07/23 15:00:47 INFO common.AbstractJob: Command line arguments: {--abtBlockHeight=[200000], --blockHeight=[30000], --broadcast=[true], --computeU=[true], --computeV=[true], --endPhase=[2147483647], --input=[/path/to/folder/test_lsa/v_out/tfidf-vectors], --minSplitSize=[-1], --outerProdBlockHeight=[30000], --output=[/path/to/folder/test_lsa/svd_out], --oversampling=[0], --pca=[false], --powerIter=[0], --rank=[1], --reduceTasks=[100], --startPhase=[0], --tempDir=[temp], --uHalfSigma=[false], --vHalfSigma=[false]}
12/07/23 15:00:49 INFO input.FileInputFormat: Total input paths to process : 100
Exception in thread "main" java.io.IOException: Q job unsuccessful.
    at org.apache.mahout.math.hadoop.stochasticsvd.QJob.run(QJob.java:230)
    at org.apache.mahout.math.hadoop.stochasticsvd.SSVDSolver.run(SSVDSolver.java:377)
    at org.apache.mahout.math.hadoop.stochasticsvd.SSVDCli.run(SSVDCli.java:141)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
    at org.apache.mahout.math.hadoop.stochasticsvd.SSVDCli.main(SSVDCli.java:171)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
    at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
    at org.apache.mahout.driver.MahoutDriver.main(MahoutDriver.java:195)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:197)

Я запускаю это в распределенном режиме на кластере. Я читал, что сбой задания Q может иметь какое-то отношение к размеру блока, но мой больше, чем p+k. Я также понимаю, что использую смехотворно маленький ввод (4 вектора), но, как я уже сказал, он работает в коде Java. Я больше всего озадачен тем, почему это будет работать в Java, но не в CLI. Я почти уверен, что у меня есть все те же аргументы для функции. Я всегда могу просто упаковать java-код в банку и поместить его в сценарий bash, но это было бы довольно хакерски...

В журнале работы написано:

2012-07-23 15:00:55,413 INFO org.apache.hadoop.util.ProcessTree: setsid exited with exit code 0
2012-07-23 15:00:55,417 INFO org.apache.hadoop.mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@6ce53220
2012-07-23 15:00:55,638 INFO org.apache.hadoop.io.compress.zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
2012-07-23 15:00:55,697 ERROR org.apache.mahout.common.IOUtils: new m can't be less than n
java.lang.IllegalArgumentException: new m can't be less than n
    at     org.apache.mahout.math.hadoop.stochasticsvd.qr.GivensThinSolver.adjust(GivensThinSolver.java:109)
    at org.apache.mahout.math.hadoop.stochasticsvd.qr.QRFirstStep.cleanup(QRFirstStep.java:233)
    at org.apache.mahout.math.hadoop.stochasticsvd.qr.QRFirstStep.close(QRFirstStep.java:89)
    at org.apache.mahout.common.IOUtils.close(IOUtils.java:128)
    at org.apache.mahout.math.hadoop.stochasticsvd.QJob$QMapper.cleanup(QJob.java:158)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:647)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.    apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157)
    at org.apache.hadoop.mapred.Child.main(Child.java:264)
2012-07-23 15:00:55,731 INFO org.apache.hadoop.mapred.TaskLogsTruncater: Initializing logs' truncater with mapRetainSize=-1 and reduceRetainSize=-1
2012-07-23 15:00:55,733 WARN org.apache.hadoop.mapred.Child: Error running child
java.lang.IllegalArgumentException: new m can't be less than n
    at org.apache.mahout.math.hadoop.stochasticsvd.qr.GivensThinSolver.adjust(GivensThinSolver.java:109)
    at org.apache.mahout.math.hadoop.stochasticsvd.qr.QRFirstStep.cleanup(QRFirstStep.java:233)
    at org.apache.mahout.math.hadoop.stochasticsvd.qr.QRFirstStep.close(QRFirstStep.java:89)
    at org.apache.mahout.common.IOUtils.close(IOUtils.java:128)
    at org.apache.mahout.math.hadoop.stochasticsvd.QJob$QMapper.cleanup(QJob.java:158)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:647)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157)
    at org.apache.hadoop.mapred.Child.main(Child.java:264)
2012-07-23 15:00:55,736 INFO org.apache.hadoop.mapred.Task: Runnning cleanup for the task

Спасибо за помощь заранее.


person Matthew Saltz    schedule 09.07.2012    source источник
comment
Это недостаточно информации. Эта трассировка — это просто сообщение клиента о том, что задание не выполнено. Нужно выкладывать ошибки из воркеров.   -  person Sean Owen    schedule 09.07.2012
comment
В файлах журналов для задачи не было никаких выходных данных. Это то, что ты имеешь в виду?   -  person Matthew Saltz    schedule 09.07.2012
comment
Обязательно будут журналы любого задания Hadoop, по крайней мере, с его собственным выводом.   -  person Sean Owen    schedule 09.07.2012
comment
Я ошибался раньше. Я добавил информацию из журналов в вопрос. Спасибо.   -  person Matthew Saltz    schedule 23.07.2012


Ответы (1)


Я на самом деле думаю, что это произошло из-за того, что некоторые файлы последовательности в tfidf-векторах были пустыми, потому что я использовал слишком много редукторов. Это кажется мне ошибкой.

person Matthew Saltz    schedule 23.07.2012