2014-12-03 103 views
0

我在CentOS虛擬機中安裝了hadoop 2.5.2。我對hadoop很陌生,我試圖在hadoop 2.x上執行C++代碼,基於tutorials在Hadoop 2.x中運行C++代碼

我看到在Hadoop 2.x版本中沒有文件夾(HADOOP_INSTALL)/c++/$(PLATFORM)/。我看到有下$(HADOOP_INSTALL)/include和庫文件如hadoopipes.a包括$HADOOP_INSTALL/lib/native/libhadooppipes.a等我調整我的makefile這樣下:

CC = g++ 
    HADOOP_INSTALL = /usr/local/hadoop 
    CPPFLAGS = -m32 -I$(HADOOP_INSTALL)/include 

    wordcount: WordCount.cpp 
     $(CC) $(CPPFLAGS) $< -Wall -L$(HADOOP_INSTALL)/lib/native -lhadooppipes \ 
     -lhadooputils -lpthread -g -O2 -o [email protected] 

and changed in code (rest of code is same as in the link above) 

     #include "Pipes.hh" 
     #include "TemplateFactory.hh" 
     #include "StringUtils.hh" 

when I compile I get 
    $ make wordcount 
    g++ -m32 -I/usr/local/hadoop/include WordCount.cpp -Wall -L/usr/local/hadoop/lib/native -lhadooppipes \ 
     -lhadooputils -lpthread -g -O2 -o wordcount 
    /usr/bin/ld: skipping incompatible /usr/local/hadoop/lib/native/libhadooppipes.a when searching for -lhadooppipes 
    /usr/bin/ld: cannot find -lhadooppipes 
    collect2: ld returned 1 exit status 

誰能指點至於如何編譯C++在Hadoop 2.x的(我可以在Hadoop的1.x中,雖然執行的C++程序我所感興趣的是,如何在Hadoop的2.X使用Hadoop管道運行的C++程序。)在此先感謝

+0

「...跳過不兼容」 - 當您試圖鏈接64位系統上的32位庫時,主要是打印出來的。如果它真的是64位,請嘗試使用「-m64」而不是「-m32」。並建立與32位二進制文​​件,你必須 - 安裝sudo apt-get install gcc-multilib和sudo apt-get install ia32-libs-dev – SChepurin 2014-12-03 08:31:59

+0

我使用的是centos 32位版本(i686)。 g ++版本是32位#文件/ usr/bin/g ++ /usr/bin/g ++:ELF 32位LSB可執行文件。但Hadoop的圖書館展示#objdump的-f libhadooppipes.a 在歸檔libhadooppipes.a: HadoopPipes.cc.o:文件格式ELF64-的x86-64架構 :I386:X86-64, – Sree 2014-12-03 23:43:42

+0

但Hadoop的圖書館顯示i386:x86-64(這是否意味着它同時支持32/64位)?我嘗試了-m32和-m64。兩者都給錯誤。請教 #g ++ -m64 -I/usr/local/hadoop/include WordCount.cpp -Wall -L/usr/local/hadoop/lib/native -lhadooppipes -lhadooputils -lpthread -g -O2 -o wordcount WordCount。cpp:1:對不起,未實現:未編譯的64位模式。 – Sree 2014-12-03 23:51:39

回答

0

問題

如何將兩者聯繫起來Hadoop的歸檔(:I386:文件格式 ELF64-x86-64架構的x86-64)編譯32位二進制。請諮詢

:您需要 multilib的。如果它已經安裝在Ubuntu 14.04或Arch Linux上,則必須在64位系統上啓用32位應用程序。

例如,如本說source -

啓用 multilib的儲存庫允許用戶運行和建立在Arch Linux的64位安裝 32位應用程序。 multilib 在 /usr/lib32 /中創建一個包含32位指令集庫的目錄,這些32位二進制應用程序在執行時可能需要。

否則,您必須安裝multilib的 -

sudo apt-get install gcc-multilib 

sudo apt-get install ia32-libs-dev 

link也有幫助。 Google更多關於multilib的支持。