1

私は、Hadoop 1.2.0 用の Hadoop パイプを使用して C++ プログラムをコンパイルするための 2 つの方法に出会いましたが、どちらもうまくいきませんでした。

アプローチ 1:

次のリンクに出会いました。

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'

アプローチ 2:

このチュートリアルに出会いました

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

次のコマンドを実行しました

ant -Dcompile.c++=yes examples

そして、次のエラーを取得します

Buildfile: build.xml does not exist!
Build failed

この build.xml ファイルをどこで入手できるかわかりません。Hadoop のインストール フォルダーに 1 つ見つかりましたが、それは正しいものではないと思います。

これらのアプローチのいずれかで運が良かった人がいる場合は、コメントをいただければ幸いです。

4

2 に答える 2

0

私はあなたの2番目のアプローチだけを手伝うことができます:

実行するビルド ファイルは、hadoop ディストリビューションのルートにある build.xml と、LICENSE および README テキスト ファイルです。hadoop-xyz ディレクトリに移動し、記載されているとおりにコマンドを入力します。

これは、サンプル ソース コードが含まれていないバイナリ配布とは対照的に、ソース配布をダウンロードした場合にのみ機能します。C++ サンプル ソース コードは、src/examples/pipes/impl にあります。

于 2013-05-21T04:09:56.517 に答える
0

私は同じ問題を抱えていました。1 つの解決策は、crypto ライブラリをリンクすることです。たとえば-lcrypto、コンパイル コマンドに追加できます。

HTHシュミン

于 2014-03-03T23:33:21.600 に答える