當啓動,您可以指定應提供外部文件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());
}
}
}
這一切,但複製和直接從工作中我們映射器的多個代碼粘貼。
我不知道你的問題的第二部分。希望第一部分的答案能讓你開始。 :)
除了-files
有-libjars
包括額外的罐子;我在這裏有一些信息 - If I have a constructor that requires a path to a file, how can I "fake" that if it is packaged into a jar?