Untuk detail tentang konstruksi lingkungan Hadoop, silakan lihat artikel ini //www.vevb.com/article/33649.htm.
Kita sudah tahu bahwa Hadoop dapat dipanggil melalui baris perintah melalui bentuk Hadoop Jar ***. Output input JAR, jadi bagaimana Anda merangkumnya menjadi layanan dan membiarkan Java/Web memanggilnya? Ini memungkinkan pengguna untuk mengunggah file ke Hadoop dengan cara yang nyaman dan memprosesnya untuk mendapatkan hasil. Pertama, ***. Jar adalah enkapsulasi kelas tugas Hadoop. Kita dapat menjalankan metode utama kelas tanpa toples dan meneruskan parameter yang diperlukan untuk itu. Input dan Output Masukkan file yang diunggah oleh pengguna ke dalam sistem file Hadoop menggunakan javaapi Hadoop. Kemudian gunakan API Java Hadoop untuk mendapatkan file hasil dari sistem file.
Bangun proyek Javaweb. Artikel ini menggunakan kerangka kerja Spring, SpringMVC, dan Mybatis. Tentu saja, ini bukan intinya, dan dapat dicapai bahkan tanpa menggunakan kerangka kerja apa pun.
Kerangka kerja proyek adalah sebagai berikut:
Paket toples yang digunakan dalam proyek ini adalah sebagai berikut:
Di file konfigurasi Spring, tambahkan
<bean id = "multipartresolver"> <name properti = "DefaultEncoding" value = "UTF-8" /> <name properti = "MAXUPLOADSIZE" Value = "10485760000" /> <nama properti = "MAXInMemorySize" Value = "40960" /< /bean>
Buat unggahan file dukungan proyek.
Buat login.jsp baru klik untuk masuk dan masukkan pengguna/login
Proses Login di Pengguna/Login. Setelah masuk dengan sukses, [buat folder pengguna di sistem file hadoop], dan kemudian melompat ke console.jsp
paket com.chenjie.controller; impor java.io.ioException; impor javax.annotation.Resource; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor org.apache.hadoop.conf.configuration; impor org.apache.hadoop.fs.filesystem; impor org.apache.hadoop.fs.path; impor org.springframework.stereotype.controller; impor org.springframework.web.bind.annotation.requestmapping; impor com.chenjie.pojo.jsonresult; impor com.chenjie.pojo.user; impor com.chenjie.service.userservice; impor com.chenjie.util.appconfig; impor com.google.gson.gson; /** * Pengontrol Permintaan Pengguna * * @Author Chen * */@Controller // Deklarasikan kelas saat ini sebagai pengontrol @RequestMapping ("/user") // Deklarasikan jalur kelas publik saat ini Usercontroller {@Resource (name = "UserService") Userservice UserServerservice UserService; // Suntikan User * Pengguna * @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 (pengguna); // Panggil metode login dari UserService request.getSession (). SetAttribute ("User", hasilnya); if (result! = null) {createHadoopFsFolder (hasil); mengembalikan "konsol"; } return "Login"; } public void createHadoopFsFolder (pengguna pengguna) melempar ioException {configuration conf = new configuration (); conf.addresource (jalur baru ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (jalur baru ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Filesystem filesystem = filesystem.get (conf); System.out.println (fileSySyStem.geturi ()); Path file = path baru ("/user/" + user.getu_username ()); if (fileSystem.exists (file)) {System.out.println ("Haddop HDFS pengguna foler ada."); filesystem.delete (file, true); System.out.println ("Pengguna HDFS HDFS menghapus kesuksesan."); } fileSystem.mkdirs (file); System.out.println ("Pengguna HDFS HDFS membuat kesuksesan."); }}Console.jsp untuk mengunggah file dan mengirimkan tugas,
Unggah file dan kiriman tugas:
paket com.chenjie.controller; impor java.io.file; impor java.io.ioException; impor java.net.inetsocketaddress; impor java.net.uri; impor java.util.arraylist; impor java.util.iterator; impor java.util.list; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor org.apache.hadoop.conf.configuration; impor org.apache.hadoop.fs.fsDatainputStream; impor org.apache.hadoop.fs.filesystem; impor org.apache.hadoop.mapred.jobclient; impor org.apache.hadoop.mapred.jobconf; impor org.apache.hadoop.mapred.jobid; impor org.apache.hadoop.mapred.jobstatus; impor org.apache.hadoop.mapred.runningjob; impor org.springframework.steretype.controller; impor org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.multipart.multipartfile; impor org.springframework.web.multipart.multipartttpservletRequest; impor org.springframework.web.multipart.commons.Commonsmultipartresolver; impor com.chenjie.pojo.user; impor com.chenjie.util.utils; @Controller // Declare the current class as the controller @RequestMapping("/hadoop") // Declare the path of the current class public class HadoopController { @RequestMapping("/upload") // Declare the path of the current method // File upload public String upload(HttpServletRequest request, HttpServletResponse response) throws IOException { List<String> FileList = (Daftar <String>) request.getSession () .getAttribute ("FileList"); // Dapatkan daftar file yang diunggah oleh pengguna jika (fileList == null) filelist = new ArrayList <String> (); // Jika daftar file kosong, buat pengguna baru = (User) request.getSesesi (). if (user == null) mengembalikan "login"; // Jika pengguna tidak masuk, lompat ke halaman login commonsmultipartresolver multipartresolver = new commonsmultipartresolver (request.getSession (). GetServletContext ()); // Dapatkan file unggahan yang disuntikkan ke dalam komponen yang disuntikkan ke dalam komponen yang disuntikkan ke dalam musim semi. {// Jika permintaan adalah permintaan file multiparthtttpservletrequest multirequest = (multiparthttpservletRequest) permintaan; Iterator <string> iter = multirequest.getFileNames (); // Dapatkan nama file iterator sementara (iter.hasnext ()) {multipartFile file = multirequest.getFile ((string) iter.next ()); if (file! = null) {string fileName = file.getoriginalFileName (); File folder = file baru ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (! folder.exists ()) {folder.mkdir (); // Jika file tidak ada, buat secara lokal di server} string path = "/home/chenjie/cjhadooponline/" + user.getu_username () + "/" + filename; File localfile = file baru (path); file.transferto (localfile); // salin file yang diunggah ke direktori lokal server // filelist.add (path); } handleuploadfiles (pengguna, filelist); // menangani file unggah}} request.getSession (). setAttribute ("FileList", FileList); // Simpan daftar file yang diunggah di konsol pengembalian sesi "; // return console.jsp untuk melanjutkan mengunggah file} @requestmapping (" // WordCount (permintaan httpservletRequest, respons httpservletResponse) {system.out.println ("Masukkan WordCount controller"); Pengguna pengguna = (user) request.getSession (). GetAttribute ("user"); System.out.println (pengguna); // if (user == null) // return "Login"; Wordcount c = wordcount baru (); // statistik kata baru string username = user.getu_username (); String input = "hdfs://chenjie-virtual-machine:9000/user/" + username + "/wordcountinput";//Specify the input folder of the Hadoop file system String output = "hdfs://chenjie-virtual-machine:9000/user/" + username + "/wordcountoutput";//Specify the output folder of the Hadoop file system String reslt = output + "/part-r-00000"; // file output default coba {thread.sleep (3*1000); c.main (string baru [] {input, output}); // panggil konfigurasi tugas statistik kata conf = konfigurasi baru (); // Buat konfigurasi hadoop baru conf.addresource (jalur baru ("/opt/hadoop-1.2.1/conv/core-site.xml")); // Tambahkan konfigurasi hadoop dan temukan hadoop Deploy. Path ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); // konfigurasi hadoop dan temukan sistem file filesystem fileSystem = fileSystem.get (conf); // Anda harus menekan file sistem urie = reslt); file.touri (); // dapatkan output file path system.out.println (uri); Data string = null; while ((data = instream.readline ())! = null) {//system.out.println(data); response.getoutputStream (). println (data); // tulis file hasil kembali ke halaman web pengguna} // inputStream in = filesystem.open (file); // outputStream out = new fileoutputStream ("result.txt"); // ioutils.copybytes (in, out, 4096, true); instream.close (); } catch (Exception e) {System.err.println (e.getMessage ()); }} @RequestMapping ("/MapReduceStates") // Dapatkan status MapReduce public void MapReduce (permintaan httpservletRequest, respons httpservletResponse) {float [] progress = new float [2]; coba {configuration conf1 = configuration new (); conf1.set ("mapred.job.tracker", utils.jobtracker); Jobstatus jobstatus = utils.getjobstatus (conf1); // while (! jobstatus.isjobcomplete ()) {// progress = utils.getMapreduceproges (jobstatus); // response.getoutputStream (). println ("peta:" + progress [0] + "kurangi:" + progress [1]); // thread.sleep (1000); //} jobconf jc = new jobconf (conf1); Jobclient jobclient = new jobclient (jc); Jobstatus [] jobsstatus = jobclient.getalljobs (); // Dengan cara ini Anda mendapatkan array JobStatus, dan Anda bisa mengeluarkan elemen dan menamainya jobstatus jobstatus = jobsstatus [0]; JobId jobId = jobstatus.getjobid (); // Dapatkan JobID melalui JobStatus RunningJob RunningJob = jobclient.getjob (jobID); // Dapatkan objek RunningJob runningjob.getjobstate () melalui jobid; // Anda bisa mendapatkan status pekerjaan, ada lima negara bagian, yaitu jobstatus.failed, jobstatus. runningjob.getjobname (); // Anda bisa mendapatkan nama pekerjaan. jobstatus.getStarttime (); // Anda bisa mendapatkan waktu awal pekerjaan, yang merupakan jumlah milidetik UTC. float map = runningjob.mapprogress (); // Anda bisa mendapatkan rasio tahap peta yang sudah selesai, 0 ~ 1, system.out.println ("peta =" + peta); float reduce = runningjob.reduceprogress (); // Anda bisa mendapatkan rasio tahap pengurangan selesai. System.out.println ("reduksi ="+redukir); runningjob.getFailureInfo (); // bisa mendapatkan informasi kegagalan. RunningJob.getCountters (); // Anda bisa mendapatkan penghitung terkait pekerjaan. Konten penghitung sama dengan nilai penghitung yang terlihat di halaman pemantauan pekerjaan. } catch (ioException e) {progress [0] = 0; Kemajuan [1] = 0; } request.getSession (). setAttribute ("peta", progress [0]); request.getSession (). setattribute ("redukir", kemajuan [1]); } // Proses file unggah public void handleuploadFiles (pengguna pengguna, daftar <string> fileList) {file folder = file baru ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (! folder.exists ()) kembali; if (folder.isDirectory ()) {file [] file = folder.listFiles (); untuk (file file: file) {system.out.println (file.getName ()); Coba {putfiletohadoopFsFolder (pengguna, file, fileList); // unggah satu file ke sistem file hadoop} catch (ioException e) {system.err.println (e.getMessage ()); }}}} // Unggah satu file ke sistem file hadoop pribadi void putfiletohadoopfsfolder (pengguna pengguna, file file, daftar <string> fileList) melempar ioException {configuration conf = new configuration (); conf.addresource (jalur baru ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (jalur baru ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Filesystem filesystem = filesystem.get (conf); System.out.println (fileSySyStem.geturi ()); Path localfile = path baru (file.getAbsolutePath ()); Path foler = path baru ("/user/" + user.getu_username () + "/wordcountInput"); if (! FileSyStem.exists (foler)) {fileSystem.mkdirs (foler); } Path hadoopFile = path baru ("/user/" + user.getu_username () + "/wordcountInput/" + file.getName ()); // if (fileSystem.exists (HadoopFile)) {// System.out.println ("File ada."); //} else {// Filesystem.mkdirs (HadoopFile); //} fileSystem.copyFromLocalSal (true, true, localfile, hadoopfile); filelist.add (hadoopfile.touri (). tostring ()); }}Mulai Hadoop:
Hasil Menjalankan:
Anda dapat masuk ke alamat proyek, mengunggah file, dan mendapatkan hasil di bawah platform apa pun.
Jalankan dengan sukses.
Kode Sumber: https://github.com/tudougaisimalingshu/cjhadooponline
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.