ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Hadoop円周率サンプルのバグ

2012-03-10 01:49:20 | PG(分散処理)

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のバグだろーなー。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする