我在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++程序。)在此先感謝
「...跳過不兼容」 - 當您試圖鏈接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
我使用的是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
但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