Red de conocimiento informático - Material del sitio web - Cómo depurar el programa Hadoop2.2.0 en eclipse bajo win7

Cómo depurar el programa Hadoop2.2.0 en eclipse bajo win7

En la publicación anterior del blog, Sanxian ya habló sobre la implementación de pseudodistribución en una sola máquina de Hadoop. En este artículo, Sanxian hablará sobre cómo depurar hadoop2.2.0 en eclipse, si aún lo está. usando la versión hadoop1 .x, entonces está bien. En su blog anterior, Sanxian también escribió sobre la depuración del programa hadoop 1.x de eclipse. La mayor diferencia entre los dos es el uso de diferentes complementos de eclipse, hadoop2.x y hadoop1. API de /p>

1 La versión de eclipse Juno Service Release 4.2

2 Sistema operativo Windows7

3 El complemento eclipse de Hadoop hadoop-eclipse-plugin-2.2.0 .jar

2 p>

4 Entorno de clúster Hadoop máquina virtual Linux Centos6.5 pseudodistribuido independiente

5 Programa de depuración Hola mundo

Varios problemas encontrados son los siguientes:?

¿Código Java?

java.io.IOException:?Could?not?locate?executable?null\bin\winutils.exe?in? los?Hadoop?binarios.

Solución:?

¿Escribir un valor fijo en el valor de retorno del método checkHadoopHome() de la clase org.apache.hadoop.util.Shell?

Ruta nativa de hadoop, Sanxian cambia aquí de la siguiente manera:?

¿Código Java?

privado?static?String?checkHadoopHome()?{?

//?primero ?comprobar?el?Dflag?hadoop.home.dir?con?JVM?scope?

//System.setProperty("hadoop.home.dir",?" ...");?

String?home?=?System.getProperty("hadoop.home.dir");?

//?fall?back?to? ¿la variable?system/user-global?env?

if?(home?==?null)?{?

home?=?System.getenv("HADOOP_HOME" );?

}?

¿Intentar?{?

//?¿No se pudo encontrar ninguna configuración para el directorio de inicio de Hadoop? ?

if?(home?==?null)?{?

throw?new?IOException("HADOOP_HOME?or?hadoop.home.dir?are?not?set .");?

}?

if?(home.startsWith("\"")?&&?home.endsWith("\""))?{?

casa? =?home.substring(1,?home.length()-1);?

}?

//?check?that? el?entorno?hogar?i

¿Existe realmente un directorio que existe?

¿Archivo?homedir?=?nuevo?Archivo(inicio);?

si?(!homedir.isAbsolute()? ||?!homedir.exists()?||?!homedir.isDirectory())?{?

throw?new?IOException("Hadoop?home?directory?"?+?homedir?

+?"?no?existe,?no?un?directorio?o?no?es?una?ruta?absoluta.");?

} ?

home?=?homedir.getCanonicalPath();?

}?catch?(IOException?ioe)?{?

if?(LOG. isDebugEnabled())?{?

LOG.debug("¿Error? al?detectar?un?válido?hadoop?home?directory",?ioe);?

}?

home?=?null;?

}?

//¿Reparar la dirección hadoop de esta máquina?

home=" D :\\hadoop-2.2.0";?

return?home;?

}?

La segunda excepción, no se pudo localizar el ejecutable D: \Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe en los archivos binarios de Hadoop. Si no puede encontrar el programa ejecutable en Win, puede descargar el paquete bin y sobrescribir el hadoop local y directorio ¿Simplemente descargue el paquete bin?

La tercera excepción:?

¿Código Java?

¿Excepción?in?thread?"main"?java.lang. IllegalArgumentException:?Wrong?FS:?hdfs://192.168.130.54:19000/user/hmail/output/part-00000,?expected:?file:///

at?org.apache . hadoop.fs.FileSystem.checkPath(FileSystem.java:310)

en?org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)

en ? org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)

at?org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)

at?org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:125)

at?org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem. java :

283)

at?org.apache.hadoop.fs.FileSystem.open(FileSystem.java:356)

at?com.netease.hadoop.HDFSCatWithAPI.main(HDFSCatWithAPI. java:23)

Cuando ocurre esta excepción, generalmente se debe a que hay un problema con la ruta HDFS. La solución es copiar los archivos core-site.xml y hdfs-site.xml en el clúster. y colóquelos en el src de eclipse, justo en el directorio raíz.

?

La cuarta excepción:?

¿Código Java?

¿Excepción?en?thread?"main"?java.lang.UnsatisfiedLinkError:?org. .hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

Esta excepción ocurre, generalmente debido a un problema con la configuración de la variable de entorno HADOOP_HOME. Aquí hay algo. información En particular, si desea depurar con éxito Hadoop2.2 en eclipse en Win, debe agregar las siguientes variables de entorno a las variables de entorno locales:?

(1) En las variables del sistema, cree un nueva variable HADOOP_HOME con el valor del atributo D:\hadoop-2.2.0. ¿Cuál es el directorio de hadoop correspondiente a esta máquina?

(2) En la ruta de la variable del sistema, agregue %HADOOP_HOME%/bin ?

Sanxian encontró los problemas anteriores durante las pruebas. Después de tomar las medidas adecuadas, nuestro eclipse finalmente puede depurar con éxito el programa MR. El código fuente de Hello World aquí en Sanxian es el siguiente:?

¿Código Java?

paquete?com.qin.wordcount;?

importar?java.io.IOException;?

importar?org. apache .hadoop.fs.FileSystem;?

import?org.apache.hadoop.fs.Path;?

import?org.apache.hadoop.io.IntWritable;?

p>

importar?org.apache.hadoop.io.LongWritable;?

importar?org.apache.hadoop.io.Text;?

¿importar? org.apache .hadoop.mapred.JobConf;?

importar?org.apache.hadoop.mapreduce.Job;?

importar?org.apache.hadoop.mapreduce.Mapper; ?

importar?org.apache.hadoop.mapreduce.Reducer;?

importar?org.apache.hadoop.mapreduce.lib.input.FileInputFormat;?

importar ?org.apache.hadoop.mapreduce.lib.input.TextInputFormat;?

importar?org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;?

import?org .apache.hadoop.mapreduce.lib.output.TextOutputFormat;?

/***?

*?

*?Hadoop2.2.0 ¿prueba?

*?Ejemplo de poner WordCount?

*?

*?@autor?qindongliang?

*?

*?grupo de intercambio técnico de hadoop:?376932160?

*?

*?

*?*/?

público ?clase?MyWordCount?{?

/**?

*?Mapper?

<

p>*?

*?**/?

¿privado?estático?clase?WMapper?extends?Mapper{?

privado?IntWritable?count=new?IntWritable(1);?

privado?Text?text=new?Text();?

@Override?

¿protegido?void?map(LongWritable?key,?Text?value,Context?context)?

lanza?IOException,?InterruptedException?{?

String?values[]=value.toString().split("#");?

//System.out.println(values[0]+"========" +valores[1]);?

count.set(Integer.parseInt(valores[1]));?

text.set(valores[0]);?

context.write(texto,cuenta);?

}?

}?

/**?

*?Reducer?

*?

*?**/?

¿privado?estático?clase?WReducer?extends?Reducer{?

privado?Text?t=new?Text();?

@Override?

protegido?void ?reduce(Text?key,?Iterable?value,Context?context)?

lanza?IOException,?InterruptedException?{?

int?count=0;?

for(IntWritable?i:value){?

count+=i.get();?

}?

t .set(count+"");?

context.write(key,t);?

}?

}?

/**?

*?Cambiar 1?

*?(1) ¿Agregar la ruta de checkHadoopHome al código fuente del shell?

*?( 2)974 OK, ¿dentro de FileUtils?

*?**/?

public?static?void?main(String[]?args)?throws?Exception{?

//?String?path1=System.getenv("HADOOP_HOME");?

//?System.out.println(path1);?

/ /?System .exit(0);?

JobConf?conf=new?JobConf(MyWordCount.class);?

//Configuration?conf=new?Configuration(); ?

//conf.set("mapred.job.tracker","1

92.168.75.130:9001");?

//¿Leer los campos de datos en persona?

//?conf.setJar("tt.jar");?

//Tenga en cuenta que esta línea de código se coloca al principio para la inicialización; de lo contrario, informará.

/**Tarea de trabajo**/?

¿Trabajo? job= new?Job(conf,?"testwordcount");?

job.setJarByClass(MyWordCount.class);?

System.out.println("Modo:?" +conf .get("mapred.job.tracker"));;?

//?job.setCombinerClass(PCombine.class);?

//?job.setNumReduceTasks (3 );//¿Establecer en 3?

job.setMapperClass(WMapper.class);?

job.setReducerClass(WReducer.class);?

trabajo .setInputFormatClass(TextInputFormat.class);?

trabajo.setOutputFormatClass(TextOutputFormat.class);?

trabajo.setMapOutputKeyClass(Text.class);?

job.setMapOutputValueClass(IntWritable.class);?

job.setOutputKeyClass(Text.class);?

job.setOutputValueClass(Text.class);?

String?path="hdfs://192.168.46.28:9000/qin/output";?

FileSystem?fs=FileSystem.get(conf);?

¿Ruta? p=new?Ruta(ruta);?

if(fs.exists(p)){?

fs.delete(p,?true);?

System.out.println("¡La ruta de salida existe y ha sido eliminada!");?

}?

FileInputFormat.setInputPaths(job,?"hdfs ://192.168 .46.28:9000/qin/input");?

FileOutputFormat.setOutputPath(job,p?);?

System.exit(job.waitForCompletion(true )0?: ?1);

}?

}?

Consola, el registro de impresión es el siguiente:?

¿Código Java?

INFO?-?Configuration.warnOnceIfDeprecated(840)?|?mapred.job.tracker?is?deprecated.?En su lugar,?use?mapreduce.jobtracker.address?

Modo: ?local ?

¡La ruta de salida existe y ha sido eliminada! ?

INFO?-?Configuration.warnOnceIfDeprecated(840)?|?session.id?is?deprecated.?En su lugar,?use?dfs.met

rics.session-id?

INFO?-?JvmMetrics.init(76)?|?Inicializando?JVM?Metrics?with?processName=JobTracker,?sessionId=?

ADVERTENCIA ?-?JobSubmitter.copyAndConfigureFiles(149)?|?Hadoop?opción de línea de comando?análisis?no?realizado.?Implemente?la?interfaz?de?Herramienta?y?ejecute?su?aplicación?con?ToolRunner?para?remediar? ?esto.?

ADVERTENCIA?-?JobSubmitter.copyAndConfigureFiles(258)?|?No?job?jar?file?set.?Las?clases?de?usuario?pueden?no?encontrarse.?¿Ves? ¿Trabajo?o?Trabajo#setJar(String).?

INFO?-?FileInputFormat.listStatus(287)?|?Total?entradas?rutas?al?proceso?:?1?

INFO?-?JobSubmitter.submitJobInternal(394)?|?número?de?divisiones:1?

INFO?-?Configuration.warnOnceIfDeprecated(840)?|?user.name?is? en desuso.?En su lugar,?use?mapreduce.job.user.name?

INFO?-?Configuration.warnOnceIfDeprecated(840)?|?mapred.output.value.class?is?en desuso.?En su lugar ,?use?mapreduce.job.output.value.class?

INFO?-?Configuration.warnOnceIfDeprecated(840)?|?mapred.mapoutput.value.class?is?deprecated.?En su lugar,? ¿use?mapreduce.map.output.value.class?

INFO?-?Configuration.warnOnceIfDeprecated(840)?|?mapreduce.map.class?está?obsoleto.?En su lugar,?use?mapreduce. job.map.class?

INFO?-?C