Maison >développement back-end >Problème PHP >PHP peut-il utiliser Hadoop ?
Hadoop est une infrastructure système distribuée développée par la Fondation Apache. Les utilisateurs peuvent développer des programmes distribués sans connaître les détails sous-jacents de la distribution. Exploitez pleinement la puissance des clusters pour le calcul et le stockage à haut débit.
Bien que Hadoop soit écrit en Java, Hadoop fournit le flux Hadoop. Il fournit une API qui permet aux utilisateurs d'écrire des fonctions de carte et de réduire l'utilisation de n'importe quelle fonction de langage. (Apprentissage recommandé : Tutoriel vidéo PHP)
La clé du flux Hadoop est qu'il utilise le flux standard UNIX comme interface entre le programme et Hadoop. Par conséquent, tant que n'importe quel programme peut lire les données du flux d'entrée standard et écrire des données dans le flux de sortie standard, la fonction map et la fonction de réduction du programme MapReduce peuvent être écrites dans n'importe quel langage via le flux Hadoop.
Par exemple :
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
Le package introduit par le streaming Hadoop : hadoop-streaming-0.20.203.0.jar Il n'y a pas de hadoop-streaming.jar dans le répertoire racine de Hadoop car le streaming est un. contrib Il faut donc le trouver sous contrib, en prenant comme exemple hadoop-0.20.2, il est ici :
-input : Spécifiez le chemin du fichier hdfs d'entrée
-output. : Spécifiez le chemin du fichier hdfs de sortie
-mapper : Spécifiez la fonction map
-reducer : Spécifiez la fonction de réduction
fonction mapper
fichier mapper.php, écrivez Entrez le code suivant :
#!/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; } ?>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!