Para obtener detalles sobre la construcción del medio ambiente de Hadoop, consulte este artículo //www.vevb.com/article/33649.htm.
Ya sabemos que Hadoop se puede llamar a través de la línea de comando a través de la forma de la salida de entrada jar ***. Esto permite a los usuarios cargar archivos a Hadoop de una manera conveniente y procesarlos para obtener resultados. Primero, ***. Jar es una encapsulación de la clase de tareas de Hadoop. Podemos ejecutar el método principal de la clase sin un frasco y pasar los parámetros necesarios a él. La entrada y la salida colocan el archivo cargado por el usuario en el sistema de archivos Hadoop utilizando Javaapi de Hadoop. Luego use la API Java de Hadoop para obtener el archivo de resultados del sistema de archivos.
Construye un proyecto Javaweb. Este artículo utiliza marcos Spring, SpringMVC y MyBatis. Por supuesto, este no es el punto, y se puede lograr incluso sin usar ningún marco.
El marco del proyecto es el siguiente:
Los paquetes JAR utilizados en el proyecto son los siguientes:
En el archivo de configuración de Spring, agregue
<bean id = "multipartresolver"> <propiedad name = "defaultEncoding" value = "utf-8" /> <propiedad name = "maxUploadSize" valor = "10485760000" /> <Property name = "maxInMemorySize" Value = "40960" /> < /bean>
Realice la carga del archivo de soporte del proyecto.
Cree un nuevo login.jsp Haga clic para iniciar sesión e ingrese el usuario/inicio de sesión
Proceso Iniciar sesión en el usuario/Iniciar sesión. Después de iniciar sesión con éxito, [crear carpeta de usuario en el sistema de archivos Hadoop] y luego saltar a console.jsp
paquete com.chenjie.controller; import java.io.ioException; import javax.annotation.resource; import javax.servlet.http.httpservletRequest; import 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.stereotype.controller; importar 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 * User* @param solicitud * @param respuesta * @throws ioexception */@requestmapping ("/login") // declarar la ruta del método actual registro de cadena de cadena (usuario de usuario, httpservletrequest request, httpServletResponse respuesta) lanza ioexception {respuesta.setSetContentTentTentType ("aplicación/json"); // set the set the set of the the staugs uss uss. UserService.login (usuario); // llame al método de inicio de sesión de UserService request.getSession (). SetAttribute ("Usuario", resultado); if (resultado! = nulo) {createHadoopfsFolder (resultado); devolver "consola"; } return "inicio de sesión"; } public void CreateHadoopfsFolder (usuario de usuario) lanza IOException {Configuration conf = new Configuration (); conf.addResource (nueva ruta ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (nueva ruta ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); FileSystem FileSystem = Filesystem.get (conf); System.out.println (filesystem.geturi ()); Archivo de ruta = nueva ruta ("/user/" + user.getu_username ()); if (filesystem.exists (file)) {system.out.println ("Haddop HDFS User Foler existe."); filesystem.delete (archivo, true); System.out.println ("Haddop HDFS User Foler Eliminar éxito"); } filesystem.mkdirs (archivo); System.out.println ("Haddop HDFS User Foler Create éxito"); }}Console.jsp para cargar archivos y enviar tareas,
Carga de archivos y envío de tareas:
paquete com.chenjie.controller; import java.io.file; import java.io.ioException; import java.net.InetSocketAddress; import java.net.uri; import java.util.arrayList; import java.util.iterator; import java.util.list; import javax.servlet.http.httpservletRequest; import 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; import com.chenjie.pojo.user; import com.chenjie.util.utils; @Controller // Declarar la clase actual como el controlador @RequestMapping ("/Hadoop") // declarar la ruta de la clase actual de clase public HadoopController {@RequestMapping ("/upload") // declarar la ruta del método actual // El archivo de carga public String String (htttpServeRequest solicitud, httpSeServletRetResse). fileList = (list <String>) request.getSession () .getAttribute ("fileList"); // Obtenga la lista de archivos cargados por el usuario if (fileList == null) fileList = new ArrayList <String> (); // Si la lista de archivos está vacía, cree un usuario nuevo usuario = (usuario) request.getSession (). if (user == null) return "inicio de sesión"; // Si el usuario no está iniciado, salte a la página de inicio de sesión commonSmultiparTresolver multipertesolver = new commonsMultipARTResolver (request.getSession (). La solicitud es una solicitud de archivo multipThttpServletRequest multireQuest = (multipTHTTPservletRequest) solicitud; Iterator <String> iter = multirequest.getFileNames (); // Obtenga el nombre de archivo Iterator while (iter.hasnext ()) {múltipletfile file = multirequest.getFile ((string) iter.next ()); if (file! = null) {string filename = file.getoriginalFileName (); Carpeta de archivo = nuevo archivo ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (? Archivo localfile = nuevo archivo (ruta); file.transferto (localfile); // Copie el archivo cargado en el directorio local del servidor // filelist.add (ruta); } handleUploadFiles (usuario, fileList); // handle cargar archivo}} request.getSession (). setAttribute ("fileList", fileList); // Guardar la lista de archivos cargados en la lista de retorno "console"; // return console.jsp para continuar con la carga del archivo} @Requestmapping ("/WordCount). WordCount (httpservletRequest solicitud, respuesta httpservletResponse) {system.out.println ("Ingrese el controlador de palabras"); Usuario user = (usuario) request.getSession (). GetAttribute ("usuario"); System.out.println (usuario); // if (user == null) // return "inicio de sesión"; WordCount c = new WordCount (); // New Word Statistics Task 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 + "/par-r-00000"; // archivo de salida predeterminado intenta {hild.sleep (3*1000); c.main(new String[] { input, output });//Call the word statistics task Configuration conf = new Configuration();//Create a new Hadoop configuration conf.addResource(new Path("/opt/hadoop-1.2.1/conf/core-site.xml"));//Add Hadoop configuration and find Hadoop deployment information conf.addResource(new Path ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); // configuración de hadoop y busque el sistema de archivos filsystem systemsystem = filesSystem.get (conf); // tiene que presionar el archivo de archivo de archivo = nueva path (reslt); // encontrar el resultado de salida de resultado FSDATATAINPUTTTRIMINE = fileStem.open (archivo (nuevo); file.touri (); // Obtenga la ruta de archivo de salida System.out.println (URI); String data = null; while ((data = instramp.readline ())! = null) {//system.out.println(data); Response.getOutputStream (). println (data); // Escriba el archivo de resultados nuevamente en la página web del usuario} // inputStream in = filesystem.open (archivo); // outputStream out = new FileOutputStream ("result.txt"); // ioutils.copybytes (in, out, 4096, verdadero); Intileam.close (); } catch (excepción e) {system.err.println (e.getMessage ()); }} @RequestMapping ("/MapReducestates") // Obtenga el estado de MapReduce public void MapReduce (HttpServletRequest Solicitud, respuesta httpServletResponse) {flotación [] progreso = new float [2]; intente {Configuración conf1 = nueva configuración (); conf1.set ("mapred.job.tracker", utils.jobtracker); JobStatus JobStatus = utils.getJobStatus (conf1); // while (! JobStatus.isJobComplete ()) {// progress = utils.getMapreduceProges (JobStatus); // respuesta.getOutputStream (). println ("map:" + progreso [0] + "reducir:" + progreso [1]); // Thread.sleep (1000); //} JobConf JC = New JobConf (conf1); JobClient JobClient = New JobClient (JC); JOBSTATUS [] JOBSSTATUS = JOBCLIENT.GETALLJOBS (); // de esta manera obtendrá una matriz JobStatus, y puede sacar un elemento y nombrarlo JobStatus JobStatus = JobsStatus [0]; JOBID JOBID = JOBSTATUS.GETJOBID (); // Obtener JobId a través de JobStatus RunningJob RunningJob = JobClient.getJob (JobId); // Obtenga el objeto RunningJob runningJob.getJobState () a través de JobId; // Puede obtener el estado de trabajo, hay cinco estados, a saber, JobStatus.failed, JobStatus.Killed, Jobstatus.prep, JobStatus.Running, JobStatus.Suceded JobStatus.getusername (); runningJob.getJobName (); // Puede obtener el nombre del trabajo. JobStatus.getStartTime (); // Puede obtener la hora de inicio del trabajo, que es el número de milisegundos de UTC. MAP FLOAT = RunningJob.MappRogress (); // Puede obtener la relación de la etapa de mapa completa, 0 ~ 1, System.out.println ("MAP =" + MAP); Float reduce = runningJob.ReduceProgress (); // Puede obtener la relación de la etapa de reducción completa. System.out.println ("Reduce ="+Reduce); runningJob.getFailureInfo (); // puede obtener la información de falla. RunningJob.getCounters (); // Puede obtener los contadores relacionados con el trabajo. El contenido del contador es el mismo que el valor del contador visto en la página de monitoreo del trabajo. } catch (ioException e) {progreso [0] = 0; progreso [1] = 0; } request.getSession (). setAttribute ("map", progreso [0]); request.getSession (). setAttribute ("reducir", progreso [1]); } // Procesar archivo de archivo public void handleUploAdFiles (usuario de usuario, lista <string> filelist) {File de archivo = nuevo archivo ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (! carpeta.exists ()) return; if (carpeta.isDirectory ()) {file [] files = folder.listFiles (); for (archivo de archivo: archivos) {system.out.println (file.getName ()); Pruebe {PutFiletoHadoopfsFolder (usuario, archivo, fileList); // cargue un solo archivo en el sistema de archivos Hadoop} Catch (ioException e) {System.err.println (e.getMessage ()); }}}} // cargar un solo archivo en el sistema de archivos Hadoop private void putfiletohadoopfsfolder (usuario de usuario, archivo de archivo, list <string> filelist) lanza ioexception {configuración conf = nueva configuración (); conf.addResource (nueva ruta ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (nueva ruta ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); FileSystem FileSystem = Filesystem.get (conf); System.out.println (filesystem.geturi ()); Ruta localfile = nueva ruta (file.getabsolutePath ()); Ruta foler = nueva ruta ("/user/" + user.getu_username () + "/WordCountInput"); if (! filesystem.exists (foler)) {filessystem.mkdirs (foler); } Ruta hadoopFile = nueva ruta ("/user/" + user.getu_username () + "/wordCountInput/" + file.getName ()); // if (filesystem.exists (hadoopFile)) {// system.out.println ("archivo existe."); //} else {// filesystem.mkdirs (HadoopFile); //} Filesystem.CopyFromLocalFile (True, True, LocalFile, HadoopFile); filelist.add (hadoopFile.touri (). toString ()); }}Comienza Hadoop:
Resultados de ejecución:
Puede iniciar sesión en la dirección del proyecto, cargar archivos y obtener resultados en cualquier plataforma.
Corre con éxito.
Código fuente: https://github.com/tudoupaisimalingshu/cjhadooponline
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.