我正在分发 *.tar.gz
文件到应用程序级可见性下的节点。
在我的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条答案
按热度按时间bcs8qyzn1#
我认为你靠集装箱的位置做的事情不对。对于较小的集合,我建议您使用分布式缓存使所有任务节点上的资源都可用。它将自动将文件上载到所有容器节点,并使其可用于所有Map还原程序。
但如果文件足够大,这将是一个巨大的空间冲击,因为数据将被复制到执行实际任务的每个节点。为了改进这一点,您可以使用更大的复制因子(例如10,取决于集群中的节点数)将文件直接放入文件系统,以提高其可用性。然后在您的任务中,您将能够直接下载它,这将大大节省您的空间相比,分布式缓存方法,但成本将是您的带宽在非本地读取。您可以使用它来找到最佳的复制次数。