コンテキスト: Amazon EMR で実行する Cascalog ジョブを作成しています。Cascalog は、MapReduce を実行するための clojure ベースの lib です。奇妙なクラスローディング例外が原因でジョブが失敗した場合。
この仕事では、clojure ベースの geoip ルックアップ ライブラリである geocoder というライブラリを使用しています。特に、maxmind GeoLiteCity.dat ファイルを参照するライブラリの一部を使用していました。ジョブの失敗の原因となったコードの部分は、ジオコーダー lib.** を使用する部分であることがわかりました。
最も奇妙なことは、コードのこの部分を削除するとジョブが成功する一方で、コメントアウトすると成功しないということです...何が起こっているのか誰かが知っているかどうか疑問に思っていますか?
** 私がジオコーダ lib を使用した方法
(ns utils.geoip (:use [geocoder.core]))
そして、私の仕事は上記を必要とします
(ns myjob (:require [utils.geoip :as geoip]))