如何将非jar文件分发到纱线节点?

时间:2017-03-21 07:19:44

标签: hadoop mapreduce yarn hadoop2

我正在尝试将*.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");

1 个答案:

答案 0 :(得分:0)

我不认为你依靠容器位置做正确的事。对于次要集合,我建议您使用distributed cache在所有任务节点上使资源可用。它会自动将文件上传到所有容器节点,并使其可用于所有映射器 - 减速器。

但是如果你的文件足够大,这应该是一个很大的空间命中,因为数据将被复制到将执行实际任务的每个节点。为了改善这一点,您可以将文件直接放入文件系统中,使用更大的复制因子,例如10(取决于群集中的节点数),以提高其可用性。然后在您的任务中,您将能够直接下载它,与分布式缓存方法相比,这将显着节省您的空间,但成本将是非本地读取的带宽。您可以使用它来查找最佳复制数。