启动 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
我有一些关于这里的信息 -如果我有一个需要文件路径的构造函数,如果它被打包到一个 jar 中,我怎么能“伪造”它?