No hablaré sobre el uso de Maven. Hay muchos en línea y no ha habido grandes cambios a lo largo de los años. Aquí solo presentaré cómo construir un entorno de desarrollo de Hadoop.
1. Cree un proyecto primero
Copie el código de la siguiente manera: MVN Archetype: Generate -DGroupId = my.hadoopStudy -DartifactId = HadoopStudy -DarchetyPeartifactId = maven -archetype -quickstart -dinteractivEmode = false
2. Luego agregue los paquetes de dependencia de Hadoop de Hadoop-Common, Hadoop-Client, Hadoop-HDFS en el archivo pom.xml. El archivo pom.xml agregado es el siguiente
<Proyecto xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://maven.apache.org/pom/4.0.0" xsi: schemalocation http://maven.apache.org/maven-v4_0_0.xsd "> <modelVersion> 4.0.0 </modelversion> <MoupRupid> my.hadoopStudy </groupid> <artifactid> hadoopStudy </artifactid> <compailing> jar </paquete> <production> 1.0-snapshot </versión> <name> HadoopStudy </name> <sl> http://maven.apache.org </ url> <pendencies> <pendency> <proupid> org.apache.hadoop </groupid> <artifactid> hadoop-common-common </artifactid> <proupsion> 2.5.1 </versión> </pendency> <pendency> <proupid> og.ap.ap.Apid> <artifactid> hadoop-hdfs </artifactid> <versión> 2.5.1 </versión> </pendency> <pendency> <proupid> org.apache.hadoop </groupid> <artifactid> hadoop-client </artifactid> <versión> 2.5.1 </versión> </dependencia> <dependency> <proupid> junit </groupid> <protactiCactid> <poletre> <Persion> 3.8.1 </versión> <cope> test </cope> </pendency> </dependencias> </ject>
3. Prueba
3.1 Primero podemos probar el desarrollo de HDFS. Aquí suponemos que los grupos de hemos tomado en el artículo anterior de Hadoop, el código de clase es el siguiente
paquete my.hadoopstudy.dfs; importar org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.fsdataOutputStream; importar org.apache.hadoop.fs.filestatus; import org.apache.hadoop.fs.filesystem; import org.apache.hadoop.io.ioutils; import java.io.inputstream; import java.net.uri; prueba de clase pública {public static void main (string [] args) lanza la excepción {String uri = "hdfs: //9.111.254.189: 9000/"; Configuración configuración = nueva configuración (); FileSystem fs = filesystem.get (uri.create (uri), config); // Enumere todos los archivos y directorios en/user/fkong/directorio en hdfs filestatus [] states = fs.listStatus (nueva ruta ("/user/fkong")); para (estado de filestatus: states) {system.out.println (status); } // Cree un archivo en el directorio/user/fkong de HDFS y escriba una línea de texto fsDataOutputStream OS = fs.Create (nueva ruta ("/user/fkong/test.log")); OS.Write ("¡Hola mundo!". GetBytes ()); OS.Flush (); os.close (); // Mostrar el contenido del archivo especificado en/user/fkong en hdfs inputStream es = fs.open (nueva ruta ("/user/fkong/test.log")); Ioutils.copybytes (is, system.out, 1024, verdadero); }} 3.2 Prueba de trabajos de MapReduce
El código de prueba es relativamente simple, como sigue:
paquete my.hadoopstudy.mapreduce; importar org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.path; importar org.apache.hadoop.io.intwritable; import.apache.hadoop.io.text; import.apache.hadoop.mapreduce.job; import; importar; import org.apache.hadoop.mapreduce.mapper; importar org.apache.hadoop.mapreduce.reducer; importar org.apache.hadoop.mapreduce.lib.input.fileInputFormat; import org.apache.hadoop.mapreduce.lib.output.fileOutputformat; import; org.apache.hadoop.util.genericOptionsParser; import java.io.ioException; public class EventCount {public static class myMapper extiende mapper <objeto, texto, texto, intwritable> {private final static intwritable one = new intwritable (1); Evento de texto privado = nuevo texto (); Public void Map (clave de objeto, valor de texto, contexto de contexto) lanza IOException, InterruptedException {int idx = value.ToString (). indexOf (""); if (idx> 0) {string e = value.ToString (). Substring (0, IDX); event.set (e); context.write (evento, uno); }}} public static class Myreducer extiende Reducer <Text, Intwritable, Text, Intwritable> {private intwritable resultado = new intwritable (); Public void Reduce (clave de texto, iterable <intwritable> valores, contexto de contexto) arroja ioexception, interruptedException {int sum = 0; for (intwritable val: valores) {sum += val.get (); } resultado.set (suma); context.write (clave, resultado); }} public static void main (string [] args) lanza la excepción {Configuration conf = new Configuration (); String [] OTROArGS = new GenericOptionsParser (conf, args) .getRemainSargs (); if (otherArgs.length <2) {System.err.println ("Usage: EventCount <in> <utt>"); System.exit (2); } Trabajo de trabajo = Job.GetInstance (conf, "Recuento de eventos"); Job.SetjarbyClass (eventCount.class); Job.SetMapperClass (mymapper.class); Job.SetCombinLass (myreducer.class); Job.SetEducerClass (Myreducer.Class); Job.SetOutputKeyClass (text.class); Job.SetOutputValuecLass (intwritable.class); FileInputFormat.addinputPath (trabajo, nueva ruta (otros [0])); FileOutputFormat.setOutputPath (trabajo, nueva ruta (oteras [1])); System.exit (Job.WaitForCompletion (verdadero)? 0: 1); }}Ejecute el comando "Paquete MVN" para generar el paquete JAR HadoopStudy-1.0-snapshot.jar, y copie el archivo JAR en el directorio de instalación de Hadoop.
Aquí suponemos que necesitamos analizar la información del evento en varios archivos de registro para contar la cantidad de eventos, así que cree un directorio y un archivo
/tmp/input/event.log.1
/tmp/input/event.log.2
/tmp/input/event.log.3
Debido a que solo necesitamos hacer una columna aquí, el contenido de cada archivo puede ser el mismo, si el contenido es el siguiente
Job_new ...
Job_new ...
JOB_FINISH ...
Job_new ...
JOB_FINISH ...
Luego copie estos archivos a HDFS
La copia del código es la siguiente: $ bin/hdfs dfs -put/tmp/input/user/fkong/input
Ejecutar el trabajo de MapReduce
Copie el código de la siguiente manera: $ bin/hadoop jar hadoopstudy-1.0-snapshot.jar my.hadoopstudy.mapreduce.eventcount/user/fkong/input/user/fkong/output
Ver resultados de ejecución
La copia del código es la siguiente: $ bin/hdfs dfs -cat/user/fkong/output/par-r-00000
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.