للحصول على تفاصيل حول بناء بيئة Hadoop ، يرجى الاطلاع على هذا المقال //www.vevb.com/article/33649.htm.
نحن نعلم بالفعل أنه يمكن استدعاء Hadoop من خلال سطر الأوامر من خلال شكل Hadoop Jar ***. إدخال إدخال الجرة ، فكيف تقوم بتغليفه في خدمة وتدع Java/Web يدعوها؟ يتيح ذلك للمستخدمين تحميل الملفات إلى Hadoop بطريقة مريحة ومعالجتها للحصول على النتائج. أولاً ، ***. جرة هي تغليف لفئة مهمة Hadoop. يمكننا تشغيل الطريقة الرئيسية للفئة بدون جرة ونمر المعلمات اللازمة لها. وضع الإدخال والإخراج الملف الذي تم تحميله بواسطة المستخدم في نظام ملفات Hadoop باستخدام Javaapi من Hadoop. ثم استخدم API Java API من Hadoop للحصول على ملف النتيجة من نظام الملفات.
بناء مشروع Javaweb. تستخدم هذه المقالة أطر SPRING و SPRINGMVC و MYBATIS. بالطبع ، ليست هذه هي النقطة ، ويمكن تحقيقها حتى بدون استخدام أي إطار.
إطار المشروع على النحو التالي:
حزم الجرة المستخدمة في المشروع هي كما يلي:
في ملف تكوين الربيع ، أضف
<bean id = "multipartresolver"> <property name = "defaultencoding" value = "utf-8" /> <property name = "maxuploadsize" value = "10485760000" /> <property name = "maxinmemorysize" value = "40960" /> < /bean>
اجعل تحميل ملف دعم المشروع.
إنشاء login.jsp جديد انقر لتسجيل الدخول وأدخل المستخدم/تسجيل الدخول
عملية تسجيل الدخول في المستخدم/تسجيل الدخول. بعد تسجيل الدخول بنجاح ، [إنشاء مجلد مستخدم في نظام ملفات Hadoop] ، ثم القفز إلى Console.jsp
حزمة com.chenjie.controller ؛ استيراد java.io.ioException ؛ استيراد javax.annotation.Resource ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.apache.hadoop.conf.configuration ؛ استيراد org.apache.hadoop.fs.filesystem ؛ استيراد org.apache.hadoop.fs.path ؛ استيراد org.springframework.stereotype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد com.chenjie.pojo.jsonresult ؛ استيراد com.chenjie.pojo.user ؛ استيراد com.chenjie.service.userservice ؛ استيراد com.chenjie.util.appconfig ؛ استيراد com.google.gson.gson ؛ /** * وحدة تحكم طلب المستخدم * * Author Chen * *//controller // إعلان الفئة الحالية كوحدة تحكم @requestmapping ("/user") request request * param response * @throws ioException */ @requestmapping ("/login") // إعلان مسار الطريقة الحالية لتسجيل الدخول إلى السلسلة العامة (مستخدم المستخدم ، httpservletrequest طلب ، httpservletponse استجابة). UsperService.login (user) ؛ // استدعاء طريقة تسجيل الدخول الخاصة بـ uSportervice request.getSession (). setAttribute ("المستخدم" ، النتيجة) ؛ if (result! = null) {createHadoopfSfolder (result) ؛ إرجاع "وحدة التحكم" ؛ } إرجاع "تسجيل الدخول" ؛ } public void createHadoopfSfolder (المستخدم المستخدم) يلقي iOexception {configuration conf = configuration () ؛ Conf.addresource (مسار جديد ("/opt/hadoop-1.2.1/conf/core-site.xml")) ؛ Conf.addresource (مسار جديد ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")) ؛ نظام ملفات الملفات = fileystem.get (conf) ؛ system.out.println (fileystem.geturi ()) ؛ ملف المسار = مسار جديد ("/user/" + user.getu_username ()) ؛ if (fileSystem.Exists (file)) {system.out.println ("Hadoop HDFS user foler موجود.") ؛ FileSystem.delete (ملف ، صحيح) ؛ System.out.println ("Hadodop HDFS User Foler Delete Success.") ؛ } fileystem.mkdirs (file) ؛ System.out.println ("Hadodop HDFS User Foler Creat Success.") ؛ }}console.jsp لتحميل الملفات وإرسال المهام ،
تحميل الملف وتقديم المهمة:
حزمة com.chenjie.controller ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.net.inetsocketaddress ؛ استيراد java.net.uri ؛ استيراد java.util.arraylist ؛ استيراد java.util.iterator ؛ استيراد java.util.list ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.apache.hadoop.conf.configuration ؛ استيراد org.apache.hadoop.fs.fsDatainputStream ؛ استيراد org.apache.hadoop.fs.filesystem ؛ استيراد org.apache.hadoop.mapred.jobclient ؛ استيراد org.apache.hadoop.mapred.jobconf ؛ استيراد org.apache.hadoop.mapred.jobid ؛ استيراد org.apache.hadoop.mapred.jobstatus ؛ استيراد org.apache.hadoop.mapred.runningjob ؛ استيراد org.springframework.steretype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.multipart.multipartfile ؛ استيراد org.springframework.web.multipart.multiparthttpservletRequest ؛ استيراد org.springframework.web.multipart.commons.CommonSmultiPartresolver ؛ استيراد com.chenjie.pojo.user ؛ استيراد com.Chenjie.Util.Utils ؛ controller // إعلان الفئة الحالية كوحدة تحكم requestmapping ("/hadoop") // إعلان مسار الفئة العامة الحالية hadoopcontroller { @requestmapping ("/expload") fileList = (list <string>) request.getSession () .getAttribute ("fileList") ؛ // احصل على قائمة الملفات التي تم تحميلها بواسطة المستخدم إذا كانت (fileList == null) fileList = new ArrayList <Tring> () ؛ // إذا كانت قائمة الملفات فارغة ، فقم بإنشاء مستخدم جديد = (المستخدم) request.getsession (). إذا كان (user == null) إرجاع "تسجيل الدخول" ؛ // إذا لم يتم تسجيل الدخول ، فقثه إلى صفحة تسجيل الدخول commonsmultipartresolver multivartresolver = new commonsmultipartresolver (request.getSession (). الطلب هو طلب ملف multiparthttpservletrequest multirequest = (multiparthttpservletrequest) ؛ iterator <string> iter = multirequest.getFilenames () ؛ // احصل على iTerator اسم الملف بينما (iter.hasNext ()) if (file! = null) {string filename = file.getoriginalfilename () ؛ File Folder = ملف جديد ("/home/chenjie/cjhadooponline/" + user.getu_username ()) ؛ if (! folder.exists ()) {folder.mkdir () ؛ // إذا لم يكن الملف موجودًا ، فقم بإنشاء محليًا على server} string path = "/home/chenjie/cjhadooponline/" + user.getu_username () + "/" + filename ؛ ملف localfile = ملف جديد (path) ؛ file.transferto (localfile) ؛ // انسخ الملف الذي تم تحميله إلى الدليل المحلي للخادم // fileList.add (path) ؛ } handleuploadfiles (المستخدم ، fileList) ؛ // التعامل مع ملف التحميل}} request.getSession (). setAttribute ("fileList" ، filelist) ؛ WordCount (طلب httpservletrequest ، httpservletresponse استجابة) {system.out.println ("أدخل وحدة التحكم wordCount") ؛ مستخدم المستخدم = (المستخدم) request.getSession (). getAttribute ("المستخدم") ؛ System.out.println (user) ؛ // if (user == null) // return "login" ؛ WordCount C = new WordCount () ؛ // Word Statistics Task String username = user.getu_username () ؛ string input = "hdfs: // chenjie-virtual-machine: 9000/user/" + username + "/wordCountInput" ؛ // حدد مجلد الإدخال من إخراج نظام ملف Hadoop = "hdfs: // chenjie-virtual-machine: 9000/user/" + username + " = الإخراج + "/part-r-00000" ؛ // ملف الإخراج الافتراضي ، حاول {thread.sleep (3*1000) ؛ c.main (سلسلة جديدة [] {input ، Output}) ؛ // استدعاء تكوين مهمة إحصائيات الكلمة conf = configuration () path ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")) file.touri () ؛ // احصل على system.out.println (uri) ؛ بيانات السلسلة = فارغة ؛ بينما ((data = instream.readline ())! = null) {//system.out.println(data) ؛ Response.getOutputStream (). println (data) ؛ // اكتب ملف النتيجة مرة أخرى إلى صفحة الويب الخاصة بالمستخدم} // inputStream in = fileystem.open (file) ؛ // outputStream Out = new FileOutputStream ("result.txt") ؛ // ioutils.copybytes (In ، Out ، 4096 ، true) ؛ instream.close () ؛ } catch (استثناء e) {system.err.println (e.getMessage ()) ؛ }} @requestmapping ("/mapreducestates") // الحصول على حالة MapReduce public void mapreduce (طلب httpservletrequest ، استجابة httpservletponse) {float [] progress = new float [2] ؛ جرب {configuration inf1 = configuration () ؛ conf1.set ("mapred.job.tracker" ، utils.jobtracker) ؛ JobStatus Jobstatus = utils.getJobStatus (conf1) ؛ // بينما (! jobstatus.isjobcomplete ()) {// progress = utils.getMapReduceProges (JobStatus) ؛ // response.getOutputStream (). println ("MAP:" + Progress [0] + "تقليل:" + Progress [1]) ؛ // thread.sleep (1000) ؛ //} JobConf JC = New JobConf (conf1) ؛ Jobclient Jobclient = New Jobclient (JC) ؛ JobStatus [] JobsStatus = JobClient.getAllJobs () ؛ // بهذه الطريقة تحصل على مجموعة من Jobstatus ، ويمكنك فقط إخراج عنصر وتسمية JobStatus JobStatus = JobsStatus [0] ؛ JobId JobId = JobStatus.getJobid () ؛ // احصل على JobId من خلال JobStatus runningjob runningjob = JobClient.getJob (JobId) ؛ // احصل على كائن RunningJob RunningJob.getJobState () من خلال JobId ؛ // يمكنك الحصول على حالة الوظيفة ، هناك خمس ولايات ، أي Jobstatus.failed ، Jobstatus.killed ، JobStatus.prep ، Jobstatus.Running ، Jobstats.sceded jobstatus.getuserm () RunningJob.getJobName () ؛ // يمكنك الحصول على اسم الوظيفة. JobStatus.getStartTime () ؛ // يمكنك الحصول على وقت بدء العمل ، وهو عدد utc milliseconds. خريطة Float = runningjob.mapprogress () ؛ // يمكنك الحصول على نسبة مرحلة الخريطة المكتملة ، 0 ~ 1 ، system.out.println ("map =" + map) ؛ تعويم تقليل = runningjob.reduceProgress () ؛ // يمكنك الحصول على نسبة انخفاض مرحلة الانتهاء. System.out.println ("" تخفيض = "+تقليل) ؛ RunningJob.getFailureInfo () ؛ // يمكن الحصول على معلومات الفشل. RunningJob.getCounters () ؛ // يمكنك الحصول على العدادات المتعلقة بالوظيفة. محتوى العداد هو نفس قيمة العداد الذي شوهد في صفحة مراقبة الوظائف. } catch (ioException e) {progress [0] = 0 ؛ التقدم [1] = 0 ؛ } request.getSession (). setAttribute ("MAP" ، Progress [0]) ؛ request.getSession (). setAttribute ("تقليل" ، التقدم [1]) ؛ }. if (! folder.exists ()) العودة ؛ if (folder.isdirectory ()) {file [] files = folder.listfiles () ؛ لـ (ملف الملف: الملفات) {system.out.println (file.getName ()) ؛ حاول {putfiletohadoopfsfolder (المستخدم ، الملف ، fileList) ؛ // تحميل ملف واحد إلى نظام ملف Hadoop} catch (ioException e) {system.err.println (e.getMessage ()) ؛ }}}} // قم بتحميل ملف واحد إلى نظام ملفات Hadoop الخاص putfiletohadoopfsfolder (مستخدم المستخدم ، ملف الملف ، القائمة <string> fileList) يلقي ioException {configuration conf = new configuration () ؛ Conf.addresource (مسار جديد ("/opt/hadoop-1.2.1/conf/core-site.xml")) ؛ Conf.addresource (مسار جديد ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")) ؛ نظام ملفات الملفات = fileystem.get (conf) ؛ system.out.println (fileystem.geturi ()) ؛ path localfile = new path (file.getabsolutepath ()) ؛ PATH FOLER = مسار جديد ("/user/" + user.getu_username () + "/wordCountInput") ؛ if (! fileSystem.exists (foler)) {fileSystem.mkdirs (foler) ؛ } path hadoopfile = مسار جديد ("/user/" + user.getu_username () + "/wordCountInput/" + file.getName ()) ؛ // if (fileystem.exists (hadoopfile)) {// system.out.println ("file arsists.") ؛ //} آخر {// fileystem.mkdirs (hadoopfile) ؛ //} fileystem.copyfromlocalfile (true ، true ، localfile ، hadoopfile) ؛ fileList.add (hadoopfile.touri (). toString ()) ؛ }}ابدأ هادوب:
نتائج التشغيل:
يمكنك تسجيل الدخول إلى عنوان المشروع ، وتحميل الملفات ، والحصول على النتائج تحت أي منصة.
تشغيل بنجاح.
رمز المصدر: https://github.com/tudoupaisimalingshu/cjhadooponline
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.