我正在尝试将*.tar.gz
文件分发到APPLICATION级别可见性下的纱线节点。
在我的hadoop节点上,以下目录是由节点管理器生成的
/tmp/hadoop-vikram/nm-local-dir/usercache/vikram/appcache/application_1490062699498_0005/container_1490062699498_0005_01_000003/
我确实在
下看到了预期的文件/tmp/hadoop-vikram/nm-local-dir/usercache/vikram/appcache/application_1490062699498_0005/filecache/10/test.tar.gz
但我想在应用程序代码中检索test.tar.gz
的路径。
我可以使用以下
找到jar文件的路径URL input = getClass().getClassLoader().getResource("jar-file-name");
答案 0 :(得分:0)
我不认为你依靠容器位置做正确的事。对于次要集合,我建议您使用distributed cache在所有任务节点上使资源可用。它会自动将文件上传到所有容器节点,并使其可用于所有映射器 - 减速器。
但是如果你的文件足够大,这应该是一个很大的空间命中,因为数据将被复制到将执行实际任务的每个节点。为了改善这一点,您可以将文件直接放入文件系统中,使用更大的复制因子,例如10(取决于群集中的节点数),以提高其可用性。然后在您的任务中,您将能够直接下载它,与分布式缓存方法相比,这将显着节省您的空间,但成本将是非本地读取的带宽。您可以使用它来查找最佳复制数。