Pipes APIを使用して2つのMapReduceをチェーンする方法を知っている人はいますか?以前のプロジェクトでJAVAを使用して2つのMapReduceをチェーンしましたが、今日はC++を使用する必要があります。残念ながら、C++での例は見たことがありません。
誰かがすでにそれをしましたか?それは不可能ですか?
Oozieワークフローを使用します。これにより、通常のMapReduceジョブと一緒にパイプを使用できます。
私はついにHadoopパイプを機能させることができました。ここでは、単語数の例をsrc / examples / pipes /impl/で利用できるようにするためのいくつかの手順を示します。
ドキュメントに記載されている手順に従って構成された、動作中のHadoop1.0.4クラスターがあります。
Pipesジョブを作成するには、最初のパッケージに既にコンパイルされているパイプライブラリを含める必要がありました。これは、32ビットアーキテクチャと64ビットアーキテクチャの両方のC++フォルダにあります。ただし、再コンパイルする必要がありました。これは、次の手順に従って実行できます。
# cd /src/c++/utils
# ./configure
# make install
# cd /src/c++/pipes
# ./configure
# make install
これらの2つのコマンドは、アーキテクチャ用にライブラリをコンパイルし、コンパイルされたファイルを含む「install」ディレクトリを/ src /c++に作成します。
さらに、プログラムをコンパイルするためにフラグを追加−lssl
してリンクする必要がありました。−lcrypto
それらがないと、実行時に認証例外が発生しました。これらのステップのおかげで、src / examples / pipes /impl/ディレクトリにあるwordcount-simpleを実行することができました。
ただし、より複雑な例のwordcount-nopipeを実行するには、他のいくつかのポイントを実行する必要がありました。レコードリーダーとレコードライターの実装により、ローカルファイルシステムから直接読み取りまたは書き込みを行っています。そのため、file://で入力パスと出力パスを指定する必要があります。さらに、専用のInputFormatコンポーネントを使用する必要があります。したがって、このジョブを起動するには、次のコマンドを使用する必要がありました。
# bin/hadoop pipes −D hadoop.pipes.java.recordreader=false −D hadoop.pipes.java.recordwriter=false −libjars hadoop−1.0.4/build/hadoop−test−1.0.4.jar −inputformat org.apache.hadoop.mapred.pipes.WordCountInputFormat −input file:///input/file −output file:///tmp/output −program wordcount−nopipe
さらに、1.0.4バージョンのorg.apache.hadoop.mapred.pipes.Submitter.javaを見ると、InputFormatオプションを使用すると、現在の実装ではJava以外のレコードリーダーを指定できなくなります。setIsJavaRecordReader(job,true);
したがって、この変更を考慮に入れるために、行にコメントを付けてコアソースを再コンパイルする必要があります( http://web.archiveorange.com/archive/v/RNVYmvP08OiqufSh0cjR)。
if(results.hasOption("−inputformat")) {
setIsJavaRecordReader(job, true);
job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class));
}