Hadoop Streamingでカウンタの実装を間違えた話

手が滑って大嘘を書いていました...
Hadoop Streamingでカウンタ - なぜか数学者にはワイン好きが多い

スクリプトRubyで書きました.

results_count_yes = 0
STDIN.each_line do |line|

  results_count_yes += 1
  STDERR.puts "reporter:counter:ResultsCount,YES,#{results_count_yes}"

end

HDFSに置いてあるsample.logを読んで実行.カウンターが出力された感じです.

$ hadoop jar $HADOOP_HOME/tools/lib/hadoop-streaming-2.0.0-cdh4.4.0.jar -input log/sample.log -output output -mapper mapper.rb -file mapper.rb
(大量の出力)
        ResultsCount
                YES=19201351

YES=19201351って,カウンタのバカでかさで早く気付けってやつですね.
ワードカウントと同じで,マッパー自体でカウンタの値を保持している必要は無いです.

# results_count_yes = 0
STDIN.each_line do |line|

  # results_count_yes += 1
  # STDERR.puts "reporter:counter:ResultsCount,YES,#{results_count_yes}"
  STDERR.puts "reporter:counter:ResultsCount,YES,1"

end

1をemitする感じで!