我能想到的三個選項:
- 使用
-files
選項並命名在HDFS文件(最好爲任務跟蹤器將下載的文件,一旦該節點上運行的所有作業)
- 使用DistributedCache(與上面類似的邏輯),但是通過一些API調用而不是通過命令行配置文件
- 直接從HDFS加載文件(當您拉動文件在HDFS爲每個任務)
至於一些代碼,把負載邏輯到你的映射器的setup(...)
或配置(..)方法(具體取決於是否是使用新的或舊的API),如下所示:
protected void setup(Context context) {
// the -files option makes the named file available in the local directory
File file = new File("filename.dat");
// open file and load contents ...
// load the file directly from HDFS
FileSystem fs = FileSystem.get(context.getConfiguration());
InputStream hdfsInputStream = fs.open("/path/to/file/in/hdfs/filename.dat");
// load file contents from stream...
}
DistributedCache具有在Javadocs
一些示例代碼