Я использую потоки Hadoop для работы.Ошибка при потоке hadoop при использовании expr в скрипте bash
Мой картограф написан в bash. Он использует job_id.
mapred_job_id=`echo "$mapred_job_id" | awk -F "_" '{print $NF}'`
Он отлично работает (lauching глупая операция wordcound картографа для целей debuggin), пока я не имел следующую строку, которые делают сбой задания:
mapred_job_id=`expr $mapred_job_id \* 2`
Ошибка является:
INFO mapreduce.Job: Task Id : attempt_1432766867252_0019_m_000007_0, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 2
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:330)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:543)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:81)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:170)
и т.д.
Любая идея, почему это не работает? Непосредственно в командной строке это делается. Я также пытался использовать другую переменную с именем dummy. Такая же ошибка.
Nb: Эта строка объясняется тем, что позднее должно быть выполнено другое задание в картографе, которое должно получить идентификатор и не может конфликтовать с идентификаторами предыдущих заданий. Я пытаюсь реализовать vowpal wabbit cluster, который работает с allreduce.
Зачем вам удваивать идентификатор задания? Я не следую тому, чего вы надеетесь достичь с этим. – ShellFish
Я думаю, что это связано с реализацией vrepalwabbit allreduce. Существует демон (spanning tree), который слушает все узлы и идентифицирует их с идентификаторами. Но так как две работы с двумя разными результатами производятся картографом, я понимаю, поэтому вам нужно это сделать. Их реализация осуществляется на github: https://github.com/JohnLangford/vowpal_wabbit/blob/master/cluster/runvw-yarn.sh – bosonfute
На самом деле это странно. Я неправильно читал раньше. Они фактически подсчитывают количество полей в mapred_job_id ... Я не понимаю, это противоречит моему пониманию. – bosonfute