Hadoop потокового grep не работает - PullRequest
6 голосов
/ 22 сентября 2010

Grep, похоже, не работает для потоковой передачи hadoop

Для: hadoop jar /usr/local/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-streaming.jar -input / user/root/tmp2/user.data -output / user / root / selected_data -mapper '/ bin / grep 1938678460' -reducer 'wc' -jobconf mapred.output.compress = false

Я получаю: Java.lang.RuntimeException: PipeMapRed.waitOutputThreads (): не удалось выполнить подпроцесс с кодом 1 в org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads (PipeMapRed.java:311) в org.apache.hadoop.streaming.PipeMapRedjmap (Map): 545) в org.apache.hadoop.streaming.PipeMapper.close (PipeMapper.java:132) в org.apache.hadoop.mapred.MapRunner.run (MapRunner.java:57) в org.apache.hadoop.streaming.PipeMapRunner.run (PipeMapRunner.java:36) в org.apache.hadoop.mapred.MapTask.runOldMapper (MapTask.java:358) в org.apache.hadoop.mapred.MapTask.run (MapTask.java:307) или.apache.hadoop.mapred.Child.main (Child.java:17

Есть идеи?

Я также попробовал:-mapper 'cat' -reducer '/ bin / grep 1938678460' (cat работает, grep не работает)

.... Я также проверил на всех машинах, что / bin / grep есть и он

Grep не работает, или я что-то упустил?

1 Ответ

17 голосов
/ 27 сентября 2010

Я сам не пробовал, но grep завершает работу с ненулевым кодом выхода, если он что-то не нашел. Если карта не содержит строку, к которой вы относитесь grep, вы получите ненулевой код выхода, и hadoop выдаст ошибку. Может быть, что-то вроде "/ bin / grep || true" работает.

...