maxmind geoIP の使用方法は次のとおりです。
ファイルをGeoIPCity.dat
クラウドに配置し、プロセスを起動するときにクラウドの場所を引数として使用します。ファイルを取得しGeoIPCity.data
て新しいファイルを作成するコードLookupService
は次のとおりです。
if (DistributedCache.getLocalCacheFiles(context.getConfiguration()) != null) {
List<Path> localFiles = Utility.arrayToList(DistributedCache.getLocalCacheFiles(context.getConfiguration()));
for (Path localFile : localFiles) {
if ((localFile.getName() != null) && (localFile.getName().equalsIgnoreCase("GeoIPCity.dat"))) {
m_geoipLookupService = new LookupService(new File(localFile.toUri().getPath()));
}
}
}
これは、プロセスを実行するために使用するコマンドの短縮版です。
$HADOOP_HOME/bin/hadoop jar /usr/lib/COMPANY/analytics/libjars/MyJar.jar -files hdfs://PDHadoop1.corp.COMPANY.com:54310/data/geoip/GeoIPCity.dat -libjars /usr/lib/COMPANY/analytics/libjars/geoiplookup.jar
MindMax コンポーネントを実行するための重要なコンポーネントは、-files
と-libjars
です。これらはGenericOptionsParserの一般的なオプションです。
-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
GenericOptionsParser
プロジェクトのどこにも参照が見つからないため、Hadoop は を使用していると想定しています。:)
GeoIPCity.dat
could に を配置し、-files
引数を使用して指定すると、ローカル キャッシュに配置され、マッパーがsetup
関数で取得できるようになります。必須ではありませんが、setup
マッパーごとに 1 回だけ実行する必要があるため、配置するのに最適な場所です。次に、-libjars
引数を使用して geoiplookup.jar (または自分で呼び出したもの) を指定すると、それを使用できるようになります。geoiplookup.jar はクラウドに配置しません。Hadoop が必要に応じて jar を配布するという前提で進めています。
すべてが理にかなっていることを願っています。私は hadoop/mapreduce にかなり慣れてきましたが、プロジェクトで maxmind geoip コンポーネントを使用する部分を書いていませんでした。そのため、ここにある説明を行うのに十分なほどよく理解するために、少し掘り下げる必要がありました。
編集:-files
およびの追加説明-libjars
-files files 引数は、Hadoop 分散キャッシュを介してファイルを配布するために使用されます。上記の例では、Hadoop 分散キャッシュを介して Max Mind geo-ip データ ファイルを配布しています。ユーザーの IP アドレスを適切な国、地域、都市、タイムゾーンにマップするには、Max Mind geo-ip データ ファイルにアクセスする必要があります。API では、データ ファイルがローカルに存在する必要がありますが、これは分散処理環境では実現できません (クラスター内のどのノードがデータを処理するかは保証されません)。適切なデータを処理ノードに分散するために、Hadoop Distributed Cache インフラストラクチャを使用します。GenericOptionsParser と ToolRunner は、–file 引数を使用して自動的にこれを容易にします。配布するファイルは、クラウド (HDFS) で利用できる必要があることに注意してください。-libjars –libjars は、map-reduce ジョブに必要な追加の依存関係を配布するために使用されます。データ ファイルと同様に、依存ライブラリも、ジョブが実行されるクラスター内のノードにコピーする必要があります。GenericOptionsParser と ToolRunner は、–libjars 引数を使用してこれを自動的に促進します。