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