Hadoop プロセスを起動するときに、使用可能にする外部ファイルを指定できます。これは、-files
引数を使用して行われます。
$HADOOP_HOME/bin/hadoop jar /usr/lib/COMPANY/analytics/libjars/MyJar.jar -files hdfs://PDHadoop1.corp.COMPANY.com:54310/data/geoip/GeoIPCity.dat
ファイルが HDFS 上にある必要があるかどうかはわかりませんが、頻繁に実行されるジョブであれば、そこに置くのも悪くないでしょう。
コードから、次のようなことができます
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"))) {
Path path = new File(localFile.toUri().getPath());
}
}
}
これは、複数のマッパー内の作業コードから直接コピーして貼り付けただけです。
あなたの質問の2番目の部分についてはわかりません。うまくいけば、最初の部分への答えがあなたの出発点になるでしょう。:)
さらに、追加のjarを含めるためのもの-files
があります。-libjars
ここについて少し情報があります-ファイルへのパスを必要とするコンストラクターがある場合、それがjarにパッケージ化されている場合、どうすればそれを「偽造」できますか?