ここでは、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.
私はどこでも私のプロジェクトでは、それへの参照を見つけることができませんので、私はHadoopのはGenericOptionsParser
を使用していることを仮定しています。:)
あなたは可能性があり、そのは-files
引数を使用して指定した上でGeoIPCity.dat
を置く場合、それはマッパーは、その後setup
機能で取得することができ、ローカルキャッシュに入れられます。それはsetup
にある必要はありませんが、マッパーごとに1回だけ行う必要がありますので、置くのに最適です。 次に、-libjars
引数を使用してgeoiplookup.jar(またはあなたの名前をあなたが呼んだもの)を指定します。それを使用することができます。私たちはgeoiplookup.jarをクラウドに置いていません。私はhadoopが必要に応じて瓶を配布するという前提に縛られています。
私はすべてが意味を成就することを願っています。私はhadoop/mapreduceにかなり精通していますが、プロジェクトでmaxmind geoipコンポーネントを使う部分は書いていませんでしたので、私がここにある説明をするのに十分理解できるように少し掘り下げなければなりませんでした。
EDIT:-files
および-libjars
-filesの追加の説明files引数は、Hadoop分散キャッシュを介してファイルを配布するために使用されます。上記の例では、Max Mindのgeo-ipデータファイルをHadoop分散キャッシュ経由で配布しています。ユーザーのIPアドレスを適切な国、地域、都市、タイムゾーンにマップするには、Max Mind geo-ipデータファイルにアクセスする必要があります。 APIでは、分散処理環境では実現できないデータファイルがローカルに存在する必要があります(クラスター内のどのノードがデータを処理するかは保証されません)。適切なデータを処理ノードに配布するために、Hadoop Distributed Cacheインフラストラクチャを使用します。 GenericOptionsParserとToolRunnerは、自動的に-file引き数を使用してこれを容易にします。配信するファイルは、クラウド(HDFS)で利用可能である必要があります。 -libjars -libjarsは、map-reduceジョブに必要な追加の依存関係を配布するために使用されます。データファイルと同様に、ジョブが実行されるクラスタ内のノードに依存ライブラリをコピーする必要があります。 GenericOptionsParserとToolRunnerは、自動的に-libjars引き数を使用してこれを容易にします。
が含まれていorg.foo.bar.utilあなたはパッケージを持っていると仮定すると
は、ファイルが実際に読み込まれているソースをよく見を持っています。その方法を無効にすることはできますか? –
私の目標は、クラスパス内の何かからファイルfを得ることができるようにすることです。私がそれに就くことができれば、残りの仕事をするために物事を変えることができます。 –