Weitere Informationen zur Hadoop -Umweltkonstruktion finden Sie in diesem Artikel //www.vevb.com/article/33649.htm.
Wir wissen bereits, dass Hadoop durch die Befehlszeile durch die Form von Hadoop Jar ***. JAR -Eingabemittel ausgerufen werden kann. Auf diese Weise können Benutzer Dateien auf bequeme Weise auf Hadoop hochladen und sie verarbeiten, um Ergebnisse zu erzielen. Erstens ist ***. Jar ist eine Verkapselung der Hadoop -Task -Klasse. Wir können die Hauptmethode der Klasse ohne Glas ausführen und die erforderlichen Parameter darüber übergeben. Eingabe und Ausgabe geben die vom Benutzer hochgeladene Datei mithilfe von Hadoops Javaapi in das Hadoop -Dateisystem. Verwenden Sie dann die Java -API von Hadoop, um die Ergebnisdatei aus dem Dateisystem zu erhalten.
Erstellen Sie ein Javaweb -Projekt. In diesem Artikel werden Spring, SpringMVC und MyBatis Frameworks verwendet. Dies ist natürlich nicht der Punkt und kann auch ohne ein Rahmen erreicht werden.
Das Projektrahmen lautet wie folgt:
Die im Projekt verwendeten JAR -Pakete sind wie folgt:
In der Konfigurationsdatei von Spring hinzufügen
<bean id = "multipartresolver"> <Eigenschaft name = "defaultCoding" value = "utf-8" /> <Eigenschaft name = "maxUploadSize" value = "10485760000" /> <Eigenschaft name = "MaxinMemorySize" value = "40960" /> < /lean>
Führen Sie die Projektunterstützungsdatei hoch.
Erstellen Sie eine neue login.jsp. Klicken Sie Klicken, um sich anzumelden und Benutzer/Anmeldung einzugeben
Verarbeiten Sie die Anmeldung in Benutzer/Anmeldung. Nach erfolgreichem Anmelden [Benutzerordner im Hadoop -Dateisystem erstellen] und dann zu Console.jsp springen
Paket com.chenjie.controller; importieren java.io.ioException; import Javax.annotation.Resource; importieren javax.servlet.http.httpServletRequest; importieren 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.stereotype.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; /** * User request controller* * @author Chen * */ @Controller // Declare the current class as controller @RequestMapping("/user") // Declare the path of the current class public class UserController { @Resource(name = "userService") private UserService userService;// Inject a UserService instance from the Spring container/** * Login* * @param user * Benutzer * @param request * @param response * @throws ioException */@RequestMapping ("/login") // den Pfad der aktuellen Methode öffentliche String -Anmeldung (Benutzerbenutzer, httpServletRequest -Anforderung, httpServletRespectRect), verurteilt IOException. UserService.login (Benutzer); // Rufen Sie die Anmeldemethode von UserService Request.getSession (). setAttribute ("Benutzer", Ergebnis) auf; if (result! = null) {createHadoopfsFolder (Ergebnis); Rückgabe "Konsole"; } return "login"; } public void createHadoopfsFolder (Benutzerbenutzer) löscht IOException {configuration conf = new configuration (); conf.adDresource (neuer Pfad ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.adDresource (neuer Pfad ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Dateisystem Dateisystem = Dateisystem.get (conf); System.out.println (Dateisystem.geturi ()); Path -Datei = new path ("/user/" + user.getu_username ()); if (Dateisystem.Exists (Datei)) {System.out.println ("Haddop HDFS -Benutzer Foler existiert"); Dateisystem.Delete (Datei, true); System.out.println ("Haddop HDFS -Benutzer Foler löschen Erfolg."); } filesystem.mkdirs (Datei); System.out.println ("Haddop HDFS -Benutzer Folerer Erfolg"); }}Console.jsp zum Hochladen von Dateien und Übermittlung von Aufgaben.
Datei -Upload- und Aufgabenübermittlung:
Paket com.chenjie.controller; Import Java.io.file; importieren java.io.ioException; importieren java.net.inetsocketaddress; importieren java.net.uri; Import Java.util.ArrayList; Import Java.util.iterator; importieren java.util.list; importieren javax.servlet.http.httpServletRequest; importieren 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.multipart.multipartFile; import org.springframework.web.multipart.multiparthttpServletRequest; import org.springframework.web.multipart.commons.commonsmultipartresolver; Import com.chenjie.pojo.user; import com.chenjie.util.utils; @Controller // Die aktuelle Klasse als Controller @RequestMapping ("/Hadoop") // den Pfad der aktuellen Klasse der öffentlichen Klasse Hadoopcontroller {@RequestMapPing ("/Upload") // DECLARE den Pfad der aktuellen Methode // Datei hochladen öffentliche String -Upload ("/Upload" -Load "-Load -Aufforderungsanforderung, httpVlet -reaktion) deklarieren. filelist = (list <string>) request.getSession () .getAttribute ("filelist"); // Erhalten Sie die Liste der vom Benutzer hochgeladenen Dateien, wenn (filelist == null) filelist = new ArrayList <string> (); // Wenn die Dateiliste leer ist, erstellen Sie einen neuen Benutzer = (Benutzer). if (user == null) return "login"; // Wenn der Benutzer nicht angemeldet ist, springen Sie zur Login -Seite CommonsMultipartresolver multipartresolver = new commonsMultipArtresolver (Anfrage.GetSesionSession (). {// Wenn es sich bei der Anforderung um eine Dateianforderung multiparthttpServletRequest multirequest = (multiparthttpServletRequest) handelt; Iterator <string> iter = multirequest.getFileNames (); // Holen Sie den Dateinamen iterator while (iter.hasnext ()) {MultiPartFile -Datei = multirequest.getFile ((String) iter.next ()); if (Datei! Dateiordner = neue Datei ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (! order.exists ()) {order.mkdir (); // Wenn die Datei nicht vorhanden ist, erstellen Sie lokal auf dem Server} String path = "/home/chenjie/cjhadooponline/" + user.getu_username () + "/" + fileName; Datei localFile = new Datei (Pfad); file.transferto (localFile); // die hochgeladene Datei in das lokale Verzeichnis des Servers kopieren // filelist.add (Pfad); } handleUploadFiles (Benutzer, Filelist); // Die Upload -Datei}}} request.getSession (). WordCount (httpServletRequest -Anforderung, httpServletResponse -Antwort) {System.out.println ("Controller WordCount eingeben"); User user = (user) request.getSession (). GetAtTribute ("user"); System.out.println (Benutzer); // if (user == null) // zurück "login" zurückgeben; WordCount c = new WordCount (); // Neue Word -Statistik -Task String username = user.getu_username (); String Input = "HDFS: // Chenjie-Virtual-Machine: 9000/Benutzer/" + Benutzername + "/WordCountInput"; // Geben Sie den Eingangsordner des Hadoop-Dateisystems String Output = "HDFS: // Chenjie-Virtual-Machine: 9000/Benutzer-Datei-Datei-Datei-Datei-Datei-Datei-Datei-Datei und Wordcountput"; = Ausgabe + "/part-r-00000"; // Standardausgabedatei try {Thread.sleep (3*1000); C.Main (new String [] {Eingabe, Ausgabe}); // Rufen Sie die Word-Statistik-Aufgabe-Konfiguration conf = new configuration (); // Erstellen Sie eine neue Hadoop-Konfiguration Conf.Addresource (neuer Pfad ("/opt/hadoop-1.2.1/conf/core-site.xml"); // Hadoop-Konfiguration hinzufügen und Hadoop-Hadoop-Hadoop-Hadoop-Finding-Finding-Informationen zum Finden von Hadoop-Kerninformationen finden und findungsgezogenen Informationen finden (neue Hadoop-Finding-Kerninformationen. Path ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); // Hadoop-Konfiguration und finden Sie das Dateisystem-System-System-System-System. file.touri (); // das Ausgabedatei Path System.out.println (URI) abrufen; String data = null; while ((data = instream.readline ())! = null) {//system.out.println(data); response.getOutputStream (). println (Daten); // Schreiben Sie die Ergebnisdatei zurück auf die Webseite des Benutzers} // InputStream in = Dateisystem.open (Datei); // outputStream out = new FileOutputStream ("result.txt"); // ioutils.copyBytes (in, out, 4096, true); instream.close (); } catch (Ausnahme e) {System.err.println (e.getMessage ()); }} @RequestMapping ("/MapRecestates") // den Status von MapReduce public void MapReduce (httpServletRequest -Anforderung, httpServletResponse -Antwort) {float [] progress = new float [2] erhalten; try {configuration conf1 = new configuration (); conf1.set ("mapred.job.tracker", utils.jobtracker); JobStatus jobstatus = utils.getjobstatus (conf1); // while (! JobStatus.isjobComplete ()) {// progress = utils.getMapReduceProges (JobStatus); // response.getOutputStream (). println ("map:" + progress [0] + "record:" + progress [1]); // Thread.sleep (1000); //} JobConf jc = new Jobconf (conf1); JobClient JobClient = New JobClient (JC); JobStatus [] JobStatus = JobClient.getalljobs (); // Auf diese Weise erhalten Sie ein Jobstatus -Array, und Sie können einfach ein Element herausnehmen und IT JobStatus jobstatus = JobStatus [0] benennen. JobID JobID = JobStatus.getjobid (); // JobID über JobStatus RunningJob runningjob = JobClient.getJob (JobID) erhalten; // Erhalten Sie das RunningJob -Objekt Runningjob.getjobState () über JobID; // Sie können den Jobstatus erhalten, es gibt fünf Staaten, nämlich Jobstatus.Failed, jobstatus.killes, jobstatus.prep, jobstatus.running, jobstatus. runningjob.getjobname (); // Sie können den Jobnamen erhalten. JobStatus.getStartTime (); // Sie können die Startzeit des Jobs erhalten, nämlich die Anzahl der UTC -Millisekunden. float map = runningJob.mapproGrogress (); // Sie können das Verhältnis der abgeschlossenen Kartenstufe, 0 ~ 1, system.out.println ("map =" + map); float record = runningjob.redceProgress (); // Sie können das Verhältnis der abgeschlossenen Reduzierung des Stadiums erhalten. System.out.println ("recly ="+record); RunningJob.GetFailureInfo (); // kann die Fehlerinformationen erhalten. runningJob.getCounters (); // Sie können die berufsbezogenen Zähler erhalten. Der Inhalt des Zählers entspricht dem Wert des Zählers auf der Seite der Jobüberwachung. } catch (ioException e) {progress [0] = 0; Fortschritt [1] = 0; } request.getSession (). setAttribute ("map", progress [0]); Request.GetSession (). setAttribute ("reduzieren", Fortschritt [1]); } // Datei verarbeiten öffentliche void handleUploadFiles (Benutzerbenutzer, Liste <string> filelist) {Dateiordner = new Datei ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (! order.exists ()) return; if (order.isdirectory ()) {file [] file = order.listfiles (); für (Dateidatei: Dateien) {System.out.println (Datei.getName ()); Versuchen Sie {putfiletohadoopfsFolder (Benutzer, Datei, FileList); // Laden Sie eine einzelne Datei in das Hadoop -Dateisystem} catch (ioException e) {System.err.println (e.getMessage ()); }}}} // Laden Sie eine einzelne Datei in das Hadoop -Dateisystem Private void putfiletohadoopfsFolder (Benutzerbenutzer, Dateidatei, List <string> filelist) aus iOException {configuration conf = new configuration (); conf.adDresource (neuer Pfad ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.adDresource (neuer Pfad ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Dateisystem Dateisystem = Dateisystem.get (conf); System.out.println (Dateisystem.geturi ()); Path localFile = new path (Datei.getabsolutepath ()); Path foler = new path ("/user/" + user.getu_username () + "/wortCountInput"); if (! filesystem.exists (foler)) {filesystem.mkdirs (foler); } PathoopFile = new path ("/user/" + user.getu_username () + "/WordCountInput/" + file.getName ()); // if (DateiSystem.exists (HadoopFile)) {// system.out.println ("Datei existiert"); //} else {// Filesystem.mkdirs (HadoopFile); //} filesystem.copyfromLocalFile (true, true, localfile, hadoopFile); filelist.add (HadoopFile.touri (). toString ()); }}Starten Sie Hadoop:
Auslaufergebnisse:
Sie können sich bei der Projektadresse anmelden, Dateien hochladen und Ergebnisse unter jeder Plattform erzielen.
Erfolgreich rennen.
Quellcode: https://github.com/tudoupaisimalingshu/cjhadooponline
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.