Hadoop Streamingでカウンタの実装を間違えた話
手が滑って大嘘を書いていました...
Hadoop Streamingでカウンタ - なぜか数学者にはワイン好きが多い
results_count_yes = 0 STDIN.each_line do |line| results_count_yes += 1 STDERR.puts "reporter:counter:ResultsCount,YES,#{results_count_yes}" endHDFSに置いてある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する感じで!