Para detalhes sobre a Hadoop Environment Construction, consulte este artigo //www.vevb.com/article/33649.htm.
Já sabemos que o Hadoop pode ser chamado através da linha de comando através da forma de hadoop jar ***. Saída de entrada JAR, então como você a encapsula em um serviço e deixa Java/Web chamá -lo? Isso permite que os usuários enviem arquivos para o Hadoop de uma maneira conveniente e os processe para obter resultados. Primeiro, ***. Jar é um encapsulamento da classe de tarefas Hadoop. Podemos executar o método principal da classe sem um frasco e passar os parâmetros necessários para ele. Entrada e saída Coloque o arquivo enviado pelo usuário no sistema de arquivos Hadoop usando o Javaapi do Hadoop. Em seguida, use a API Java do Hadoop para obter o arquivo de resultado do sistema de arquivos.
Construa um projeto Javaweb. Este artigo usa estruturas de primavera, springmvc e mybatis. Obviamente, esse não é o ponto e pode ser alcançado mesmo sem usar nenhuma estrutura.
A estrutura do projeto é a seguinte:
Os pacotes JAR usados no projeto são os seguintes:
No arquivo de configuração da primavera, adicione
<bean id = "multipartresolver"> <propriedade name = "defaultEncoding" value = "utf-8" /> <names name = "maxuploadsize" value = "10485760000" /> <nome da propriedade = "maxinMemorysize" value = "40960" /> < /beins>
Faça o upload do arquivo de suporte do projeto.
Crie um novo login.jsp clique para fazer login e insira o usuário/login
Processe o login no usuário/login. Depois de fazer login com sucesso, [crie pasta de usuário no Hadoop File System] e depois pular para console.jsp
pacote com.chenjie.controller; importar java.io.ioException; importar javax.annotation.resource; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; importar org.apache.hadoop.conf.configuration; importar org.apache.hadoop.fs.filesystem; importar org.apache.hadoop.fs.path; importar org.springframework.tereotype.controller; importar org.springframework.web.bind.annotation.requestmapping; importar com.chenjie.pojo.jsonResult; importar com.chenjie.pojo.user; importar com.chenjie.service.userService; importação com.chenjie.util.appConfig; importar com.google.gson.gson; /** * Controlador de solicitação de usuário * * @Author Chen * */@Controller // Declare a classe atual como controlador @RequestMapping ("/User") // Declare o caminho da classe atual Public Class UserController; @param request * @param Resposta * @throws ioexception */@RequestMapping ("/login") // Declare o caminho do método atual public String Login (usuário do usuário, httpServletRequest Solicy, httpServLetResponse Responst) lança ioexception {ResponseT.SetContentType ("Application/JSON/JSON) UserService.Login (Usuário); // Ligue para o método de login do UserService request.getSession (). SetAttribute ("Usuário", resultado); if (resultado! = null) {createHadoopfSFolder (resultado); retornar "console"; } retornar "login"; } public void createHadoopfsFolder (usuário do usuário) lança IoException {Configuration conf = new Configuration (); conf.addresource (novo caminho ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (novo caminho ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Filesystem filesystem = filesystem.get (conf); System.out.println (filesystem.geturi ()); Arquivo de caminho = novo caminho ("/user/" + user.getu_username ()); if (filesystem.exists (file)) {system.out.println ("haddop hdfs user foler existe."); filesystem.delete (arquivo, true); System.out.println ("Haddop HDFS User Foler excluir sucesso."); } filesystem.mkdirs (arquivo); System.out.println ("Haddop HDFS User Foler Creat Success."); }}Console.jsp para fazer upload de arquivos e enviar tarefas,
O upload de arquivos e envio de tarefas:
pacote com.chenjie.controller; importar java.io.file; importar java.io.ioException; importar java.net.inetsocketaddress; importar java.net.uri; importar java.util.arraylist; importar java.util.iterator; importar java.util.list; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; importar org.apache.hadoop.conf.configuration; importar org.apache.hadoop.fs.fsdatainputStream; importar org.apache.hadoop.fs.filesystem; importar org.apache.hadoop.mapred.jobclient; importar org.apache.hadoop.mapred.jobconf; importar org.apache.hadoop.mapred.jobid; importar org.apache.hadoop.mapred.jobstatus; importar org.apache.hadoop.mapred.runningjob; importar org.springframework.steretype.controller; importar org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.multipart.multipartFile; importar org.springframework.web.multipart.multiparthttpServletRequest; importar org.springframework.web.multipart.commons.commonsmultipartresolver; importar com.chenjie.pojo.user; importação com.chenjie.util.utils; @Controller // Declare a classe atual como o controlador @RequestMapping ("/Hadoop") // Declare o caminho da classe atual public Class HadoopController {@ReQuestMapping ("/upload") // Declare o caminho do caminho do método atual // Upload public String Upload (HTTTTELECTS Solicitação, httrests, htertPert> htertlert watrept upload (hterStletPeard Solictor, htertpers, htertPert. filElist = (list <string>) request.getSession () .getAttribute ("filelelist"); // Obtenha a lista de arquivos enviados pelo usuário se (filelist == null) filelel = new ArrayList <string> (); // se a lista de arquivos estiver vazia, crie um novo usuário = (User) (). if (user == null) retorna "login"; // Se o usuário não estiver conectado, pule para a página de login commonsmultipartresolver multipartresolver = new commonsmultipartResolver (request.getSession (). {// Se a solicitação for uma solicitação de arquivo multiparthttpServletRequest multirequest = (multipartttpServletRequest) solicitação; Iterator <string> iter = multirequest.getFileNames (); // Obtenha o nome do arquivo iterator while (iter.hasnext ()) {multipartFile file = multirequest.getFile ((string) iter.Next ()); if (arquivo! Pasta de arquivo = novo arquivo ("/home/chenjie/cjHadooPonline/" + user.getu_username ()); if (! pasta.exists ()) {pasta.mkdir (); // Se o arquivo não existir, crie localmente no servidor} string path = "/home/chenjie/cjadooPonline/" + user.getu_username () + "/" + filename; Arquivo localfile = novo arquivo (caminho); file.transferto (localFile); // copie o arquivo carregado para o diretório local do servidor // filelist.add (caminho); } handleUploadfiles (usuário, fileList); // manipulte o arquivo de upload}} request.getSession (). setAttribute ("fileList", fileList); // Salvar a lista de arquivos da sessão de retorno "console"; // Return Console.jsp para continuar o upload do arquivo} @requestMapping (" WordCount (solicitação httpServletRequest, httpServletResponse Response) {System.out.println ("Digite o controlador WordCount"); Usuário do usuário = (usuário) request.getSession (). GetAttribute ("usuário"); System.out.println (usuário); // if (user == null) // retorna "login"; WordCount C = new WordCount (); // NOVA TRABALHA DE ESTATÍSTICA DE WORD STRING UserName = User.Getu_UserName (); String input = "hdfs: // chenjie-virtual-machine: 9000/user/" + nome de usuário + "/wordCountInput"; // especifique a pasta de entrada do arquivo hadoop string string = "hdfs: // chenjie-virtual-machine: 9000/username +" + username + "// usternames: // chenjie-virtual-machine: 9000/username +" reslt = output + "/Part-r-00000"; // Arquivo de saída padrão tente {thread.sleep (3*1000); c.Main (new String [] {input, output}); // Chame a configuração da tarefa de estatísticas do Word Confl = new Configuration (); // Crie uma nova configuração do Hadoop conf.addResource (new Path ("/Opt/Hadoop-1.2.1/conf/core-site.xml)); Path ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); // Configuração do Hadoop e encontre o sistema de arquivos de arquivos do sistema de arquivosystem = filesystem.get (conf); // você deve pressionar o arquivo do sistema de arquivo = new Path (ressLTE); // Find o arquivo de saída FILETEN) file.Touri (); // Obtenha o arquivo do arquivo de saída System.out.println (URI); Dados da string = null; while ((data = Instream.readline ())! = null) {//system.out.println(data); Response.getOutputStream (). println (dados); // Escreva o arquivo de resultado de volta na página da web do usuário} // inputStream em = filesystem.open (arquivo); // outputStream Out = new FileOutputStream ("result.txt"); // ioutils.copybytes (in, out, 4096, verdadeiro); Instruam.close (); } catch (Exceção e) {System.err.println (e.getMessage ()); }} @ReQuestMapping ("/MAPDREDUCESTATES") // Obtenha o estado do mapReduce public void MapReduce (solicitação httpServletRequest, httpServletResponse resposta) {float [] progresso = new float [2]; tente {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 ("mapa:" + Progresso [0] + "Reduce:" + Progresso [1]); // thread.sleep (1000); //} JobConf JC = new JobConf (conf1); JobClient JobClient = New JobClient (JC); Jobstatus [] jobsstatus = jobclient.getAllJobs (); // Dessa forma, você recebe uma matriz Jobstatus e pode simplesmente tirar um elemento e nomear Jobstatus JobStatus = Jobsstatus [0]; JobId JobID = JobStatus.getJobid (); // Obtenha JobId através do JobStatus RunningJob RunningJob = JobClient.getJob (JobID); // Obtenha o objeto RunningJob RunningJob.getJobState () através de Jobid; // Você pode obter o status do trabalho, existem cinco estados, ou seja, JobStatus.Failed, Jobstatus.kiled, Jobstatus.Prep, Jobstatus.Running, Jobstatus.SucedEded OngetUsername (); RunningJob.getJobName (); // Você pode obter o nome do trabalho. JobStatus.getStartTime (); // Você pode obter a hora de início do trabalho, que é o número de milissegundos da UTC. mapa float = runningjob.maprogress (); // você pode obter a proporção do estágio do mapa concluído, 0 ~ 1, System.out.println ("map =" + map); float reduz = runningjob.reduceProgress (); // Você pode obter a proporção de estágio de redução concluído. System.out.println ("Reduce ="+Reduce); RunningJob.getFailureInfo (); // pode obter as informações de falha. Runningjob.getCounters (); // Você pode obter os contadores relacionados ao trabalho. O conteúdo do contador é o mesmo que o valor do contador visto na página de monitoramento de empregos. } catch (ioexception e) {progresso [0] = 0; progresso [1] = 0; } request.getSession (). SetAttribute ("mapa", progresso [0]); request.getSession (). SetAttribute ("Reduce", Progress [1]); } // Processar o upload do arquivo public void handleUploadfiles (usuário do usuário, list <string> fileList) {pasta de arquivo = novo arquivo ("/home/chenjie/cjadooPonline/" + user.getu_username ()); if (! pasta.exists ()) retornar; if (pasta.isdirectory ()) {file [] arquivos = pasta.listfiles (); para (arquivo de arquivo: arquivos) {System.out.println (file.getName ()); tente {putfiletoHadoopfsFolder (usuário, arquivo, fileList); // Carregue um único arquivo no sistema de arquivos Hadoop} catch (ioexception e) {System.err.println (e.getMessage ()); }}}} // Carregue um único arquivo para o sistema Hadoop System privado void putfileToHadoopfsFolder (usuário do usuário, arquivo de arquivo, list <string> filelist) lança ioexception {Configuration conf = new configaturation (); conf.addresource (novo caminho ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (novo caminho ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Filesystem filesystem = filesystem.get (conf); System.out.println (filesystem.geturi ()); Caminho localfile = novo caminho (file.getabsolutepath ()); Caminho foler = novo caminho ("/user/" + user.getu_username () + "/wordCountInput"); if (! filesystem.exists (foler)) {filesystem.mkdirs (foler); } Caminho hadoopfile = new Path ("/user/" + user.getu_username () + "/wordCountInput/" + file.getName ()); // if (filesystem.exists (hadoopfile)) {// system.out.println ("existe o arquivo."); //} else {// filesystem.mkdirs (hadoopfile); //} filesystem.copyFromlocalfile (true, true, localFile, HadoopFile); filelist.add (hadoopfile.Touri (). ToString ()); }}Comece o Hadoop:
Resultados em execução:
Você pode fazer login no endereço do projeto, fazer upload de arquivos e obter resultados em qualquer plataforma.
Correr com sucesso.
Código fonte: https://github.com/tudoupeaisimalingshu/cjhadooPonline
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.