6
我有一个C++程序,我试图在hadoop(它只有映射器,没有reducer)上作为流作业运行。一个简单的C++程序正常工作。与许多共享库链接的另一个C++程序不适用于网格。这个C++程序LDD显示以下内容:(它使用很多像OpenCV的和boost_serialization第三方库)流C++程序和共享库
/usr/local/lib/libboost_serialization.so.1.48.0 /usr/local/lib/libfftw3f.so.3 /usr/local/lib/libconfig++.so.9 /usr/local/lib/liblog4cpp.so.4 /usr/local/lib/libopencv_core.so.2.3 /usr/local/lib/libopencv_contrib.so.2.3
我想是因为这些共享库没有数据节点,其失败安装。我试图将这些库放在tarball中,并使用-archives选项(分布式缓存)将其指定为流式作业。这也不起作用(我不知道tarball的内容是否安装在数据节点的相应目录中)。
任何想法如何去做这件事?
解决了这个问题。 – sunillp 2012-01-29 15:46:37
为谷歌今后的人,请与我们分享您的解决方案! – 2012-01-31 06:17:21
其实一切都很好。我将我的应用程序使用的所有第三方库作为tarball捆绑在一起,并使用-archive streaming选项使其可用于所有数据节点。问题在于hadoop/MR创建两个映射器,而我只提供一个文件作为输入。所以生成了两个输出文件,一个文件大小为零,另一个文件具有预期的数据。我通过查看日志来了解这一点。然后我做了一个gzip的单个输入文件,并用它来进行流式传输。在这之后,事情很好。有单个输出文件。 – sunillp 2012-02-06 10:57:30