Pour plus de détails sur la construction de l'environnement Hadoop, veuillez consulter cet article //www.vevb.com/article/33649.htm.
Nous savons déjà que Hadoop peut être appelé via la ligne de commande via la forme de la sortie d'entrée du pot Hadoop. Cela permet aux utilisateurs de télécharger des fichiers à Hadoop de manière pratique et de les traiter pour obtenir des résultats. Premièrement, ***. Jar est une encapsulation de la classe de tâches Hadoop. Nous pouvons exécuter la méthode principale de la classe sans pot et y transmettre les paramètres nécessaires. Entrée et sortie Mettez le fichier téléchargé par l'utilisateur dans le système de fichiers Hadoop à l'aide de Javaapi de Hadoop. Utilisez ensuite l'API Java de Hadoop pour obtenir le fichier de résultat du système de fichiers.
Construisez un projet Javaweb. Cet article utilise des cadres Spring, SpringMVC et MyBatis. Bien sûr, ce n'est pas le point, et il peut être réalisé même sans utiliser de cadre.
Le cadre du projet est le suivant:
Les forfaits JAR utilisés dans le projet sont les suivants:
Dans le fichier de configuration de Spring, ajouter
<bean id = "multipartreSolver"> <propriété name = "defayencoding" value = "utf-8" /> <propriété name = "maxuploadSize" value = "10485760000" /> <propriété name = "maxinMemorySize" value = "40960" /> </ean>
Faites le téléchargement du fichier de support du projet.
Créez un nouveau connexion.jsp Cliquez pour vous connecter et entrez l'utilisateur / connexion
Traitez la connexion dans l'utilisateur / la connexion. Après avoir enregistré avec succès, [Créer un dossier utilisateur dans le système de fichiers Hadoop], puis sauter sur console.jsp
Package Com.chenjie.Controller; Importer java.io.ioException; import javax.annotation.resource; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.Filesystem; import org.apache.hadoop.fs.path; import org.springframework.sterreotype.Controller; import org.springframework.web.bind.annotation.requestmapping; import com.chenjie.pojo.jsonresult; import com.chenjie.pojo.user; import com.chenjie.service.userservice; import com.chenjie.util.appconfig; import com.google.gson.gson; / ** * Contrôleur de demande utilisateur * * @Author Chen * * / @Controller // Déclarez la classe actuelle en tant que contrôleur @RequestMapping ("/ user") // Déclare le chemin de la classe actuelle de classe publique UserController {@Resource (name = "UserService") UserService Privateservice Userservice; // injecter une intervention utilisateur à partir de l'utilisateur de Spring / ** * * * Login * @Param UserService from the Spring Contain @param request * @param response * @throws IOException */ @RequestMapping("/login") // Declare the path of the current method public String login(User user, HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("application/json");// Set the format of the response content to json User result = userService.login (utilisateur); // Appelez la méthode de connexion de l'utilisateur request.getSession (). setAttribute ("utilisateur", résultat); if (result! = null) {createHadoopfSfolder (résultat); retourner "console"; } return "connexion"; } public void createhadoopfsfolder (utilisateur utilisateur) lève ioException {configuration conf = new Configuration (); conf.AddreSource (nouveau chemin ("/ opt / hadoop-1.2.1 / conf / core-site.xml")); conf.AddreSource (nouveau chemin ("/ opt / hadoop-1.2.1 / conf / hdfs-site.xml")); FileSystem FileSystem = FileSystem.get (conf); System.out.println (FileSystem.geturi ()); Path File = new Path ("/ user /" + user.getu_username ()); if (filesystem.exists (fichier)) {System.out.println ("Haddop HDFS User Folher existe."); FileSystem.Delete (fichier, true); System.out.println ("Haddop HDFS User Folher Delete Success."); } fileSystem.mkDirs (fichier); System.out.println ("Haddop HDFS User Folher Creat Success."); }}Console.jsp pour télécharger des fichiers et soumettre des tâches,
Téléchargement de fichiers et soumission de tâche:
Package Com.chenjie.Controller; Importer java.io.file; Importer java.io.ioException; Importer java.net.inetsocketAddress; importer java.net.uri; import java.util.arraylist; Importer java.util.iterator; Importer java.util.list; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.fsdatainputStream; import org.apache.hadoop.fs.Filesystem; import org.apache.hadoop.mapred.jobclient; import org.apache.hadoop.mapred.jobconf; import org.apache.hadoop.mapred.jobid; import org.apache.hadoop.mapred.jobstatus; import org.apache.hadoop.mapred.runningjob; import org.springframework.stereType.Controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.multupar.MultiPartFile; import org.springframework.web.multupar.MultiparthTTPServletRequest; import org.springframework.web.multupar.commons.commonsMultipartreSolver; import com.chenjie.pojo.user; import com.chenjie.util.utils; @Controller // Déclarez la classe actuelle en tant que contrôleur @RequestMapping ("/ Hadoop") // Déclare le chemin de la classe actuelle de classe publique HadoopController {@RequestMapping ("/ upload") // Déclare le chemin de la méthode actuelle // Fichier Upload Public String Upload (httpServLeter> request, httpServletReSpERSPERSE Aponse) FileList = (list <string>) request.getSession () .getAttribute ("FileList"); // Obtenez la liste des fichiers téléchargés par l'utilisateur if (fileList == null) fileList = new ArrayList <string> (); // si la liste de fichiers est vide, créez un nouvel utilisateur = (utilisateur) request.getSession (). GetAttribute ("User"); if (user == null) renvoie "connexion"; // si l'utilisateur n'est pas connecté, passez à la page de connexion CommonsMultipartResolver MultipartResolver = new CommonsMultipartreSolver (request.getSession (). getServletContext ()); // obtient le composant de fichiers injecté dans le fichier de configuration de printemps if (multipartreSolver.ismult) La demande est une demande de fichier MultipartHTTPServLetRequest MultiRequest = (MultipartHTTPServLetRequest) demande; Iterator <string> iter = multirequest.getFileNames (); // Obtenez le nom de fichier Iterator while (iter.hasnext ()) {multipartFile file = MultiRequest.getFile ((string) iter.next ()); if (file! = null) {string filename = file.getoriginalFileName (); Fichier de fichiers = nouveau fichier ("/ home / chenjie / cjhadooponline /" + user.getu_username ()); if (! Folder.exists ()) {dossier.mkdir (); // Si le fichier n'existe pas, créez localement sur le serveur} String path = "/ home / chenjie / cjhadooponline /" + user.getu_username () + "/" + filename; Fichier localfile = nouveau fichier (chemin); file.transferto (localfile); // Copiez le fichier téléchargé dans le répertoire local du serveur // fileList.add (chemin); } handleUploadFiles (utilisateur, fileList); // great toload file}} request.getSession (). SetAttribute ("FileList", FileList); // Enregistrez la liste de fichiers téléchargée dans la session RETOUR "Console"; // Return Console.jsp pour continuer à télécharger le fichier} @requestmapping ("/ wordCount") // Call Hadoop pour MapRedUS WordCount (HttpServLetRequest Request, HttpServletResponse Response) {System.out.println ("Entrez le contrôleur WordCount"); User user = (user) request.getSession (). GetAttribute ("utilisateur"); System.out.println (utilisateur); // if (user == null) // return "connexion"; WordCount c = new WordCount (); // new Word Statistics Task String username = user.getu_username (); String input = "hdfs: // Chenjie-Virtual-Machine: 9000 / User /" + Username + "/ wordCountInput"; // Spécifiez le dossier d'entrée du système de fichiers Hadoop String output = "hdfs: // CHENJIE-Virtual-Machine: 9000 / User /" + Usernom + "/ wordCountoutput = sortie + "/ partie-r-00000"; // Fichier de sortie par défaut try {Thread.Sleep (3 * 1000); C.Main (new String [] {Input, Output}); // Appelez la configuration de la tâche des statistiques du mot conf = new Configuration (); // Créer une nouvelle configuration Hadoop Conf.AddreSource (New Path ("/ Opt / Hadoop-1.2.1 / conf / Core-Site.xml")); // Ajouter Hadoop Configuration et Find Hadoop Deathage Informations Conf.AddDreSource (Nouveau Hadoop Configuration et Find Hadoop Deathage Information Conf.AdddreSource (Nouveau Hadoop Configuration and Find Hadoop Deployment Conf.AdddreSource (Nouveau Hadoop Configuration et Find Hadoop Informations Conf.AdddreSource (Nouveau Hadoop Configuration et Find Hadoop Informations Conf.AdddreSource (Nouvelle Path ("/ opt / hadoop-1.2.1 / conf / hdfs-site.xml")); // configuration hadoop et trouver le système de fichier fileSystem FileSystem = fileSystem.get (conf); // vous devez appuyer sur le système de fichier Path Fichier = FileSystem. file.touri (); // obtient le chemin de sortie System.out.println (URI); String data = null; while ((data = instream.readline ())! = null) {//system.out.println(data); réponse.getOutputStream (). println (data); // réécrivez le fichier de résultat à la page Web de l'utilisateur} // inputStream dans = fileSystem.open (fichier); // outputStream out = new FileOutputStream ("result.txt"); // ioutils.copyBytes (in, out, 4096, true); instream.close (); } catch (exception e) {System.err.println (e.getMessage ()); }} @RequestMapping ("/ MapreDucEstates") // Obtenez l'état de MapReduce public void MapReduce (HttpServleRequest Request, HttpservletResponse Response) {float [] Progress = new float [2]; essayez {configuration conf1 = new Configuration (); conf1.set ("mapred.job.tracker", utils.jobtracker); JobStatus JobStatus = utils.getJobStatus (conf1); // while (! jobStatus.isJobComplete ()) {// progress = utils.getMapReduceProges (jobStatus); // réponse.getOutputStream (). println ("map:" + progress [0] + "réduction:" + progress [1]); // thread.sleep (1000); //} jobConf jc = new JobConf (conf1); JobClient JobClient = new JobClient (JC); JobStatus [] jobsstatus = jobClient.getAllJobs (); // De cette façon, vous obtenez un tableau JobStatus, et vous pouvez simplement éliminer un élément et le nommer JobStatus JobStatus = JobsStatus [0]; Jobid jobid = jobStatus.getJobid (); // Obtenez JobId via JobStatus RunningJob RunningJob = JobClient.getJob (JobId); // Obtenez l'objet RunningJob runningjob.getJobState () via JobId; // Vous pouvez obtenir le statut d'emploi, il y a cinq états, à savoir JobStatus.failed, Jobstatus.kild, JobStatus.prep, jobsatus.running runningjob.getJobName (); // Vous pouvez obtenir le nom du travail. jobStatus.getStartTime (); // Vous pouvez obtenir l'heure de début du travail, qui est le nombre de millisecondes UTC. float map = runningjob.mapprogress (); // Vous pouvez obtenir le rapport de l'étape de carte terminée, 0 ~ 1, System.out.println ("map =" + map); float réduction = runningjob.reduceprogress (); // Vous pouvez obtenir le rapport de la réduction terminée. System.out.println ("réduction =" + réduction); runningjob.getFaileureInfo (); // peut obtenir les informations de défaillance. runningjob.getCounters (); // Vous pouvez obtenir les compteurs liés à l'emploi. Le contenu du compteur est le même que la valeur du compteur vu sur la page de surveillance de l'emploi. } catch (ioException e) {progress [0] = 0; Progress [1] = 0; } request.getSession (). setAttribute ("map", progress [0]); request.getSession (). SetAttribute ("Réduire", Progress [1]); } // Process File Téléchargez public void handleUpLoadFiles (utilisateur utilisateur, liste <string> fileList) {Fichier Folder = new File ("/ Home / Chenjie / Cjhadooponline /" + User.getu_Username ()); if (! Folder.exists ()) retourner; if (dosder.isDirectory ()) {file [] files = dosder.listFiles (); pour (fichier file: fichiers) {System.out.println (file.getName ()); essayez {putFileToHadoopFsFolder (utilisateur, fichier, fileList); // téléchargez un seul fichier sur le système de fichiers hadoop} catch (ioException e) {System.err.println (e.getMessage ()); }}}} // Téléchargez un seul fichier dans le système de fichiers Hadoop private void putFileToHadoopfsfolder (utilisateur utilisateur, fichier de fichier, liste <string> fileList) lève ioException {Configuration conf = new Configuration (); conf.AddreSource (nouveau chemin ("/ opt / hadoop-1.2.1 / conf / core-site.xml")); conf.AddreSource (nouveau chemin ("/ opt / hadoop-1.2.1 / conf / hdfs-site.xml")); FileSystem FileSystem = FileSystem.get (conf); System.out.println (FileSystem.geturi ()); Path localfile = new Path (file.getAbsolutepath ()); Path Foler = new Path ("/ user /" + user.getu_username () + "/ wordCountInput"); if (! FileSystem.exists (Folher)) {FileSystem.mkDirs (Folher); } Path hadoopfile = new Path ("/ user /" + user.getu_username () + "/ wordCountInput /" + file.getName ()); // if (filesystem.exists (hadoopfile)) {// System.out.println ("Le fichier existe."); //} else {// fileSystem.mkDirs (hadoopfile); //} fileSystem.copyFromLocalFile (true, true, localfile, hadoopfile); fileList.add (hadoopfile.touri (). toString ()); }}Commencez Hadoop:
Résultats en cours:
Vous pouvez vous connecter à l'adresse du projet, télécharger des fichiers et obtenir des résultats sous n'importe quelle plate-forme.
Courir avec succès.
Code source: https://github.com/tuoupaisimalingshu/cjhadooponline
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.