Hadoopのクラスターを作ったら、まず円周率算出のサンプルを実行して動作確認するんだけど。
MapTaskの個数を9にしたら例外が発生するんだよなー。
$ hadoop jar /usr/lib/hadoop/hadoop-examples.jar pi 9 1000
~
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1603)
at org.apache.hadoop.examples.PiEstimator.estimate(PiEstimator.java:313)
ソースを追うと単純にBigDecimal#divide()メソッドを呼び出しているだけなので、ちょっと試してみたら、9とか7とか3で割ったときに例外が発生する。BigDecimal r = BigDecimal.valueOf(10).divide(BigDecimal.valueOf(9));
これはBigDecimalのバグか?と思ったが、Javadocを見ると、除算結果の小数部が無限になる場合は例外が発生するとある。
つまり、こういう例外が出ることに対処していないhadoop-exampleのバグだろーなー。