1

我遇到了两种使用 Hadoop 管道为 Hadoop 1.2.0 编译 c++ 程序的方法,但其中任何一种都没有运气。

方法一:

我遇到了以下链接:

http://cs.smith.edu/dftwiki/index.php/Hadoop_Tutorial_2.2_--_Running_C%2B%2B_Programs_on_Hadoop

并制作了以下Makefile

CC = g++
HADOOP_INSTALL = /home/hduser/hadoop
PLATFORM = Linux-amd64-64
CPPFLAGS = -m64 -I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include
wordcount: wordcount.cpp
        $(CC) $(CPPFLAGS) $< -Wall -L$(HADOOP_INSTALL)/c++/$(PLATFORM)/lib -lhadooppipes -lhadooputils -lpthread -g -O2 -o $@

然后我得到一大堆未定义的引用

/home/hduser/hadoop/c++/Linux-amd64-64/lib/libhadooppipes.a(HadoopPipes.o): In function `HadoopPipes::BinaryProtocol::createDigest(std::string&, std::string&)':
HadoopPipes.cc:(.text._ZN11HadoopPipes14BinaryProtocol12createDigestERSsS1_[_ZN11HadoopPipes14BinaryProtocol12createDigestERSsS1_]+0x31): undefined reference to `EVP_sha1'
HadoopPipes.cc:(.text._ZN11HadoopPipes14BinaryProtocol12createDigestERSsS1_[_ZN11HadoopPipes14BinaryProtocol12createDigestERSsS1_]+0x6d): undefined reference to `HMAC_Init'
HadoopPipes.cc:(.text._ZN11HadoopPipes14BinaryProtocol12createDigestERSsS1_[_ZN11HadoopPipes14BinaryProtocol12createDigestERSsS1_]+0xa6): undefined reference to `HMAC_Update'

方法二:

我遇到了这个教程

http://wiki.apache.org/hadoop/C%2B%2BWordCount

我运行了以下命令

ant -Dcompile.c++=yes examples

并得到以下错误

Buildfile: build.xml does not exist!
Build failed

我不知道在哪里可以得到这个 build.xml 文件。我在hadoop的安装文件夹中找到了一个,但我认为那不是正确的。

如果有人对这些方法中的任何一种有任何运气,您的意见将不胜感激。

4

2 回答 2

0

我曾经有同样的问题。一种解决方案是链接加密库。例如,您可以添加-lcrypto到编译命令。

HTH舒敏

于 2014-03-03T23:33:21.600 回答
0

我只能帮助你的第二种方法:

您应该执行的构建文件是您的 hadoop 分发根目录中的 build.xml,以及 LICENSE 和 README 文本文件。导航到您的 hadoop-xyz 目录并按照说明输入命令。

这仅在您下载源分发而不是二进制分发时才有效,它不包含示例源代码。c++ 示例源代码位于 src/examples/pipes/impl

于 2013-05-21T04:09:56.517 回答