Este artículo supone que el entorno Hadoop está en una máquina remota (como un servidor Linux), y la versión de Hadoop es 2.5.2
Nota: Este artículo Eclipse/IntelliJ Idea Remote Depurging Hadoop 2.6.0 principalmente referencias y se ha ajustado en función de él.
Dado que me gusta instalar un software de 32 bits en WIN7 de 64 bits, como JDK de 32 bits y Eclipse de 32 bits, aunque el sistema operativo en este artículo es WIN7 de 64 bits, todo el software es de 32 bits.
Versión de software:
Sistema operativo: WIN7 64 bits
Eclipse: Eclipse-Jee-Mars-2-Win32
Java: 1.8.0_77 32 bits
Hadoop: 2.5.2
1. Instale Hadoop
1. Encuentre un directorio en Win7 para descomprimir hadoop-2.5.2.tar.gz, como d: /app/hadoop-2.5.2/
2. Configurar variables de entorno
Hadoop_home = d: /app/hadoop-2.5.2/
2. Instale el complemento de eclipse de Hadoop
1. Descargar Hadoop-Eclipse-Plugin
Hadoop-Eclipse-Plugin es un complemento Hadoop especialmente utilizado para Eclipse, que puede ver el directorio y el contenido de archivo de HDFS directamente en el entorno IDE. Su código fuente está alojado en GitHub, y la dirección oficial del sitio web es https://github.com/winghc/hadoop2x-eclipse-plugin. Descargue Hadoop-Eclipse-Plugin-2.6.0.Jar en la carpeta de lanzamiento.
2. Descargue el paquete de complemento Hadoop para la plataforma Windows de 32 bits (hadoop.dll, winutils.exe)
Dado que nuestro entorno de software es de 32 bits, necesitamos descargar hadoop.dll y winutils.exe de 32 bits. La dirección de descarga está disponible para Baidu Hadoop.dll 32
Por ejemplo, descargue esto: http://xiazai.vevb.com/201607/yuanma/eclipse-hadoop(vevb.com).rar
Copie WinUtils.exe al directorio $ Hadoop_home/bin, y copie hadoop.dll al directorio C:/Windows/SYSWOW64 (nota: dado que nuestro sistema operativo es de 64 bits y el software es de 32 bits, lo copiamos a este directorio. Además, si su sistema operativo es de 32 bits, luego copia a Copiarlo a C:/Windwos/System32 Directory)))
3. Configurar el complemento Hadoop-Eclipse-Plugin
Iniciar eclipse, ventana-> preferencias-> hadoop map/reducir especificar el directorio raíz de hadoop en win7 (es decir: $ hadoop_home)
Cambiar mapa/reducir la vista
Windows-> Show View-> Otros Maps/Reducir ubicaciones
Luego agregue una nueva ubicación en el panel Map/Reduce de ubicaciones a continuación
Configurar de la siguiente manera
El nombre de la ubicación es solo un nombre, solo llámalo
MAP/REDUCT (V2) Host Master aquí es la dirección IP correspondiente al Hadoop Master en la máquina virtual. El puerto a continuación corresponde al puerto especificado por el atributo dfs.datanode.ipc.Address en HDFS-Site.xml
El puerto aquí del puerto maestro DFS corresponde al puerto especificado por fs.defaultfs en core-site.xml
El último nombre de usuario debe ser el mismo que el nombre de usuario que ejecuta Hadoop en la máquina virtual. Instalé y ejecuté Hadoop 2.6.0 con Hadoop, así que complete Hadoop aquí. Si lo instaló con raíz, cámbielo a raíz en consecuencia.
Después de especificar estos parámetros, haga clic en Finalizar y eclipse para saber cómo conectarse a Hadoop. Si todo va bien, puede ver los directorios y archivos en HDFS en el Panel de Explorador del Proyecto.
Puede hacer clic derecho en el archivo y seleccionar Eliminar para probar. Por lo general, la primera vez no tiene éxito, y habrá muchas cosas. La idea general es que no hay permisos suficientes. La razón es que el usuario actual de inicio de sesión de Win7 no es el usuario en ejecución de Hadoop en la máquina virtual. Hay muchas soluciones. Por ejemplo, puede crear un nuevo usuario de administrador de Hadoop en Win7, luego cambiar a Hadoop para iniciar sesión en Win7 y luego usar Eclipse para desarrollar. Sin embargo, esta es demasiado molesta, la forma más fácil:
Agregado en hdfs-site.xml
<Protey> <Name> dfs.permissions.enabled </name> <alon valor> falso </value> </property>
En resumen, es apagar por completo la detección de seguridad de Hadoop (no hay necesidad de estos en la etapa de aprendizaje, no haga esto cuando se produce oficialmente), finalmente reinicie Hadoop, luego vaya a Eclipse y repita la operación del archivo de eliminación en este momento, y debería estar bien.
Nota: Si no puede conectarse, pruebe Telnet 192.168.1.6 9000 primero (reemplace la IP y el puerto con su propio puerto de servidor Hadoop) para asegurarse de que el puerto esté accesible.
Si Telnet falla, puede ser que haya un problema con el valor de Fs.defaultfs en Core-Site.xml. Por ejemplo, la configuración es localhost: 9000. Puede considerar reemplazar localhost con el nombre de host
3. Escribe ejemplos de cuenta de palabras
1. Cree un nuevo proyecto y seleccione Map/reduzca el proyecto
Solo el siguiente, y luego cree una nueva clase wodcount.java Code de la siguiente manera:
import java.io.ioException; import java.util.stringtokenizer; import org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.path; import org.apache.hadoop.io.intwrwrwritititits; importación.apache.hadoop.io.toxt; 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; public class WordCount {public static class tokenizermapper extiende mapper <objeto, texto, texto, intwritable> {private final static intwritable one = new intwritable (1); Palabra de texto privado = nuevo texto (); Public void Map (clave de objeto, valor de texto, contexto de contexto) lanza ioexception, interruptedException {stringTokenizer ITR = new StringTokenizer (value.ToString ()); while (itr.hasmoretokens ()) {word.set (itr.nextToken ()); context.write (palabra, uno); }}} clase pública de clase estática intsumeducer extiende reductor <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: WordCount <in> [<in> ...] <aut>"); System.exit (2); } Trabajo de trabajo = Job.GetInstance (conf, "Recuento de palabras"); Job.SetJarbyClass (WordCount.Class); Job.SetMapperClass (tokenizermapper.class); Job.SetCombinLass (intsumeducer.class); Job.SetEducerClass (intsumeducer.class); Job.SetOutputKeyClass (text.class); Job.SetOutputValuecLass (intwritable.class); for (int i = 0; i <otherargs.length - 1; ++ i) {fileInputFormat.addinputPath (trabajo, nueva ruta (otherargs [i])); } FileOutputFormat.SetOutputPath (trabajo, nueva ruta (otener [otherargs.length - 1])); System.exit (Job.WaitForCompletion (verdadero)? 0: 1); }}Luego cree un Log4J.Properties en el directorio SRC, el contenido es el siguiente: (Para la comodidad de ejecutar, verifique varias salidas)
log4j.rootlogger = info, stdout#log4j.logger.org.springframework = info#log4j.logger.org.apache.activemq = info#log4j.logger.org.apache. activemq.spring = warn#log4j.logger.org.apache.activemq.store.journal = info#log4j.logger.org.apache.activemq.or g.activeio.journal = infolog4j.appender.stdout = org.apache.log4j.consoleppenderlog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender.stdout.layout.conversionpattern =%d {absoluto} | %-5.5p | %-16.16t | %-32.32c {1} | %-32.32c %4L | %MinnesotaLa estructura final del directorio es la siguiente:
2. Configure los parámetros en ejecución
Porque WordCount es ingresar un archivo para contar palabras y luego emitir a otra carpeta, así que dar dos parámetros, consulte la figura anterior, ingrese en los argumentos del programa
hdfs: //192.168.1.6: 9000/user/nub1.txt
hdfs: //192.168.1.6: 9000/usuario/salida
Tenga en cuenta que si el archivo user/nub1.txt no lo tiene, carglo primero manualmente (usando el clic derecho de la herramienta de ubicación DFS en Eclipse), y luego/salida/no debe existir. De lo contrario, si el programa se ejecuta hasta el final y encuentra que el directorio de destino existe, también se informará un error.
Ok, solo corre
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.