Hadoop は、Apache Foundation によって開発された分散システム インフラストラクチャであり、ユーザーは分散の基礎となる詳細を理解していなくても分散プログラムを開発できます。高速コンピューティングとストレージのためにクラスターの力を最大限に活用します。
Hadoop は Java で書かれていますが、Hadoop は Hadoop ストリームを提供します。Hadoop ストリームは、ユーザーがマップ関数を記述し、任意の言語を使用して削減できるようにする API を提供します。 (推奨される学習: PHP ビデオ チュートリアル )
Hadoop フローの重要な点は、プログラムと Hadoop の間のインターフェイスとして UNIX 標準フローを使用することです。したがって、標準入力ストリームからデータを読み取り、標準出力ストリームにデータを書き込むことができるプログラムであれば、MapReduce プログラムのマップ関数とリデュース関数は、Hadoop ストリームを介して任意の言語で記述することができます。
例:
bin/hadoop jar contrib/streaming/hadoop-streaming-0.20.203.0.jar -mapper /usr/local/hadoop/mapper.php -reducer /usr/local/hadoop/reducer.php -input test/* -output out4
Hadoop ストリーミングによって導入されたパッケージ: hadoop-streaming-0.20.203.0.jar ストリーミングは Hadoop ルート ディレクトリにありません。 hadoop-0.20.2 を例にとると、これは次のとおりです:
-input: 入力 HDF ファイルへのパスを指定します
-output :出力hdfsファイルへのパスを指定します
-mapper:map関数を指定します
-reducer:reduce関数を指定します
mapper関数
mapper.php ファイルに次のコードを入力します:
#!/usr/local/php/bin/php <?php $word2count = array(); // input comes from STDIN (standard input) // You can this code :$stdin = fopen(“php://stdin”, “r”); while (($line = fgets(STDIN)) !== false) { // remove leading and trailing whitespace and lowercase $line = strtolower(trim($line)); // split the line into words while removing any empty string $words = preg_split('/\W/', $line, 0, PREG_SPLIT_NO_EMPTY); // increase counters foreach ($words as $word) { $word2count[$word] += 1; } } // write the results to STDOUT (standard output) // what we output here will be the input for the // Reduce step, i.e. the input for reducer.py foreach ($word2count as $word => $count) { // tab-delimited echo $word, chr(9), $count, PHP_EOL; } ?>
以上がPHPはHadoopを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。