Hadoop Environment Constructionの詳細については、この記事//www.vevb.com/article/33649.htmを参照してください。
Hadoopは、Hadoop jar ***の形式を介してコマンドラインを介して呼び出すことができることをすでに知っています。これにより、ユーザーは便利な方法でファイルをHadoopにアップロードし、それらを処理して結果を得ることができます。最初に、***。JARはHadoopタスククラスのカプセル化です。クラスの主な方法を瓶なしで実行し、必要なパラメーターを渡すことができます。入力と出力は、HadoopのJavaapiを使用して、ユーザーがHadoopファイルシステムにアップロードしました。次に、HadoopのJava APIを使用して、ファイルシステムから結果ファイルを取得します。
Javawebプロジェクトを構築します。この記事では、Spring、SpringMVC、MyBatisフレームワークを使用しています。もちろん、これはポイントではなく、フレームワークを使用しなくても達成できます。
プロジェクトフレームワークは次のとおりです。
プロジェクトで使用される瓶パッケージは次のとおりです。
Springの構成ファイルで、追加します
<bean id = "multipartresolver"> <プロパティ名= "defaultencoding" value = "utf-8" /> <プロパティ名= "value =" 10485760000 " /> <プロパティ名=" 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をインポートします。 Import org.apache.hadoop.conf.configuration; org.apache.hadoop.fs.filesystemをインポートします。 Import 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")// @param request * @param Response * @throws ioexception */@RequestMapping( "/login")// userservice.login(user); // userservice request.getsession()。setattribute( "user"、result); if(result!= null){createhadoopfsfolder(result); 「コンソール」を返します。 } "login"を返します。 } public void createhadoopfsfolder(user user)throws ioexception {configuration conf = new configuration(); conf.AddResource(new Path( "/opt/hadoop-1.2.1/conf/core-site.xml")); conf.AddResource(new Path( "/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(file)){system.out.println( "haddop hdfs user folerが存在する"); filesystem.delete(file、true); System.out.println( "Haddop HDFSユーザーフォーラー削除成功。"); } filesystem.mkdirs(file); System.out.println( "Haddop HDFSユーザーフォーラーCreate 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をインポートします。 Import org.apache.hadoop.conf.configuration; org.apache.hadoop.fs.fsdatainputStreamをインポートします。 org.apache.hadoop.fs.filesystemをインポートします。 import 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.stertype.controllerをインポートします。 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; com.chenjie.pojo.userをインポートします。 com.chenjie.util.utilsをインポートします。 @Controller //現在のクラスをコントローラーとして宣言します@RequestMapping( "/hadoop")// fileList =(list <string>)request.getSession().getAttribute( "filelist"); //ユーザーがアップロードしたファイルのリストを取得します(filelist == null)filelist = new arrayList <string>(); if(user == null) "login"; //ユーザーがログインしていない場合は、ログインページにジャンプしてください。MultiPartresolverMultipartresolver= new commonsmultipartresolver(request.getSession()。getServletContext(); {//リクエストがファイルリクエストの場合、MultiParthTTSERVLETREQUEST MultiReQuest =(MultiParthTTPSERVLETREQUEST)リクエスト。 iterator <string> iter = multirequest.getFileNames(); //ファイル名iteratorを取得hasnext()){multipartfile file = multirequest.getFile((string)iter.next()); if(file!= null){string filename = file.getoriginalFileName(); file folder = new file( "/home/chenjie/cjhadooponline/" + user.getu_username()); if(!folder.exists()){folder.mkdir(); //ファイルが存在しない場合、サーバーでローカルに作成} string path = "/home/chenjie/cjhadooponline/" + user.getu_username() + "/" + filename;ファイルlocalfile = new file(path); file.transferto(localfile); //アップロードされたファイルをサーバーのローカルディレクトリにコピー// filelist.add(path); } handleuploadfiles(user、filelist); //ハンドルアップロードファイル}} request.getSession()。 wordcount(httpservletrequest request、httpservletResponse応答){system.out.println( "Enter controller wordcount");ユーザーユーザー=(ユーザー)request.getSession()。getAttribute( "user"); System.out.println(user); // if(user == null)// "login"; wordcount c = new wordcount(); // new Word Statisticsタスク文字列username = user.getu_username(); string input = "hdfs:// chenjie-virtual-machine:9000/user/" + username + "/wordcountinput"; // hadoopファイルシステムstring output = "hdfs:// chenjie-virtual-machine:9000/username +"/usename + "/wordountoutputputs"; spitife the spitter "; username +" + username + " + username +" hdfs:// chenjie-virtual-machine: "hdfs:// reslt = output + "/part-r-00000"; //デフォルト出力ファイルtry {thread.sleep(3*1000); c.main(new String [] {input、output}); //単語統計タスク構成fonf = new Configuration(); //新しいHadoop Configuration conf.AddResource(conf/Core-site.xml ")); path( "/opt/hadoop-1.2.1/conf/hdfs-site.xml")) file.touri(); //出力ファイルパスsystem.out.println(uri)を取得します。文字列data = null; while((data = instream.readline())!= null){//system.out.println(data); Response.getOutputStream()。println(data); //結果ファイルをユーザーのWebページに戻します} // 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")// public public void mapreduce(httpservletrequest request、httpservletresponse応答)の状態を取得{float [] progress = new float [2]; 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] + "reduce:" + progress [1]); // thread.sleep(1000); //} jobconf jc = new jobconf(conf1); jobClient jobClient = new JobClient(JC); jobStatus [] jobStatus = jobclient.getalljobs(); //この方法では、JobStatusアレイを取得します。要素を取り出して、Jobstatus jobStatus = jobStatus [0]に名前を付けることができます。 jobid jobid = jobstatus.getjobid(); // jobStatus runningjob runningjob = jobclient.getjob(jobid)を介してjobidを取得します。 // runningjobオブジェクトを取得しているrunningjob.getjobstate()を介してjobid; //ジョブステータス、つまりjobstatus.failed.failed、jobstatus.prep、jobstatus.running、jobstatus.suctatus.getatus.getusername(); runningjob.getjobname(); //ジョブ名を取得できます。 jobstatus.getStartTime(); //ジョブの開始時間を取得できます。これはUTCミリ秒数です。 float map = runningjob.mapprogress(); //完了したマップステージ、0〜1、System.out.println( "map =" + map)の比率を取得できます。 float reduce = runningjob.reduceProgress(); //完了した削減段階の比率を取得できます。 system.out.println( "reduce ="+reduce); runningjob.getFailureInfo(); //障害情報を取得できます。 runningjob.getCounters(); //ジョブ関連のカウンターを取得できます。カウンターの内容は、ジョブ監視ページに見られるカウンターの値と同じです。 } catch(ioException e){progress [0] = 0;進行状況[1] = 0; } request.getSession()。setAttribute( "Map"、Progress [0]); request.getSession()。setAttribute( "Reduce"、Progress [1]); } // Process file public void handleuploadfiles(user user、list <string> filelist){file folder = new file( "/home/chenjie/cjhadooponline/" + user.getu_username()); if(!folder.exists())return; if(folder.isdirectory()){file [] files = folder.listfiles(); for(file file:files){system.out.println(file.getName()); try {putfiletohadoopfsfolder(user、file、filelist); //単一のファイルをhadoopファイルシステムにアップロード} catch(ioexception e){system.err.println(e.getmessage()); }}}} //単一のファイルをHadoopファイルシステムにアップロードするPrivate void putfiletohadoopfsfolder(user user、file、file、list <string> filelist)throws ioexception {configuration conf = new Configuration(); conf.AddResource(new Path( "/opt/hadoop-1.2.1/conf/core-site.xml")); conf.AddResource(new Path( "/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(foler)){filesystem.mkdirs(foler); } path hadoopfile = new Path( "/user/" + user.getu_username() + "/wordcountinput/" + file.getName()); // if(filesystem.exists(hadoopfile)){// system.out.println( "file exists。"); //} else {// filesystem.mkdirs(hadoopfile); //} filesystem.copyfromlocalfile(true、true、localfile、hadoopfile); filelist.add(hadoopfile.touri()。toString()); }}Hadoopを開始:
実行結果:
プロジェクトアドレスにログインし、ファイルをアップロードし、任意のプラットフォームで結果を取得できます。
正常に実行します。
ソースコード:https://github.com/tudoupaisimalingshu/cjhadooponline
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。