所以我正在开发一个hadoop项目,该项目广泛使用了一些依赖于小型本地文件可用性的第三方库。其中很多都是配置文件,尽管其中一个是34MB的字典文件。本质上,我试图包装库以在更大的输入和输出上运行。相关的特定库是s-match和WordNet JWNL。
确保这些较小的文件在运行时本地可用于mapper和reducer节点的正确方法是什么?
另一种方法是广泛改变第三方库,我显然宁愿避免使用它们。当然必须有一种方法来将这些文件打包并传播到本地文件系统,从而避免了MR作业只能从HDFS和/或特殊对象中读取。
答案 0 :(得分:0)
最标准的方法是将这些文件添加到Hadoop的distributed cache。关于分布式缓存如何工作的Here's an article。基本上,如果您使用vanilla hadoop API,则可以通过JobConf将文件添加到分布式缓存中。
JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("myfile.txt"),job);
如果您正在使用uberjar来运行您的工作,您也可以将它们运送到uberjar的类路径中,但这有点脏,会炸掉jar文件的大小。