Red de conocimiento informático - Material del sitio web - Iniciando hadoop usando cygwin en win7, pero se informa null\bin\winutils.exe en el binario de Hadoop.

Iniciando hadoop usando cygwin en win7, pero se informa null\bin\winutils.exe en el binario de Hadoop.

Métodos para depurar programas Hadoop2.2.0 en Win7:

1. Preparación del entorno

1 eclipse Juno Service Release 4.2 versión

2 Sistema operativo Windows7

3 complemento hadoop eclipse hadoop- eclipse-plugin-2.2.0.jar

4 máquina virtual del entorno de clúster hadoop Linux Centos6.5 pseudodistribuido independiente

5 servidor de depuración Hola Mundo

Dos notas:

La excepción es la siguiente:

java.io .IOException: No se puede encontrar el archivo ejecutable null\ bin\winutils.exe.

Solución:

En el método org.apache.hadoop.util.checkHadoopHome(), escriba la ruta fija

del hadoop local, aquí cambie como siguiente:

cadena estática privada checkHadoopHome() {

//Primero verifique Dflag hadoop.home.dir con alcance JVM

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

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

//Volver al sistema/ variables de entorno global del usuario

if (home == null) {

home = System.getenv("HADOOP_HOME");

}

intentar {

//No se puede encontrar la configuración del directorio de inicio de hadoop

if (home == null) {

lanzar nueva IOException(" HADOOP_HOME o hadoop.home.dir no está configurado.

");

}

if (home.startsWith("\")amp; amp.home.startsWith("\")){

inicio = home.substring(1, home.length()-1);

}

// Compruebe si la configuración de inicio es realmente un directorio existente

Archivo homedir = nuevo Archivo(inicio);

if (!homedir.isAbsolute() || !homedir.exists() | !homedir.isDirectory()) {

lanzar nuevo IOException("El directorio principal de Hadoop " homedir

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

}

home = homedir.getCanonicalPath();

} catch (IOException ioe) {

if (LOG.isDebugEnabled()) {

LOG.debug(" No se pudo detectar un directorio de inicio de hadoop válido", ioe);

}

home = null;

}

// Solución Dirección local de hadoop

home="D:\hadoop-2.2.0";

regresar a casa;

}

Segunda excepción , el archivo ejecutable D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe no se puede encontrar en el archivo binario de Hadoop. Si el archivo ejecutable no se encuentra en el sistema Win. puede visitar /srccodes/hadoop-common-2.2.0-bin para descargar el paquete bin y luego sobrescribir el paquete bin en el directorio local de hadoop.

Tercera excepción:

java.lang.IllegalArgumentException ocurrió en el hilo "principal": FS incorrecto: hdfs://192.168.130.54:19000/user/hmail/output /part- 00000, esperado: file:///

en org.apache.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)

en org.apache.hadoop.fs ChecksumFileSystem$ChecksumFSInputChecker. .lt;initgt;(ChecksumFileSystem.java:125)

en org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283)

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

en com.netease.hadoop.HDFSCatWithAPI.main(HDFSCatWithAPI.java:23)

Esta excepción normalmente es una Problema de ruta HDFS. La solución es copiar los archivos core-site.xml y hdfs-site.xml del clúster y colocarlos en la raíz src de eclipse.

paquete com.qin.wordcount;

importar java.io.IOException;

importar org.apache.hadoop.fs.FileSystem;

importar organización.Entrada.

FileOutputFormat;

importar org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

/***

*

*

* Prueba de Hadoop 2.2.0

* Ejemplo de colocación de WordCount

*

* @author qindogliang

*

* comunidad técnica de hadoop: 376932160

*

*

*

*

*

* */

clase pública MyWordCount {

/**

* Mapeador

*

* **/

clase estática privada WMapper extiende Mapperlt.LongWritable, Text, Text, IntWritablegt; {

cuenta privada de IntWritable=new IntWritable(1);

texto privado text=new Text();

@ Override

mapa vacío protegido (clave LongWritable, valor de texto, contexto de contexto)

lanza IOException, InterruptedException {

Valores de cadena[]=value.toString().split("#");

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

count.set(Integer.write(texto, recuento);

}

}

/**

* Reductor

*

* **/

La clase estática privada WReducer extiende Reducerlt; Text, IntWritable, Text, Textgt; {

Texto privado t=new Text();

@Override

protected void reduce(Clave de texto, Iterablelt; IntWritablegt; valor, contexto de contexto)

lanza IOException, InterruptedException {

int count=0;

for( IntWritable i: valor) {

count =i.get();

}

t.set(count "");

context.write(key, t);

}

}

/**

* Cambio 1

* (1) Agregue checkHadoopHome en el código fuente del shell

Ruta

* (2) Línea 974, FileUtils interna

* **/

public static void main(String[] args) lanza una excepción{

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

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

JobConf conf=new JobConf(MyWordCount.class);

// Configuración conf=nueva Configuración();

//conf .set ("mapred.job.tracker", "192.168.75.130:9001");/conf.setJar("tt.jar" );

// Tenga en cuenta que esta línea de código se coloca en la inicialización arriba, de lo contrario informará

/**Job task**/

Job job=new Job(conf, "testwordcount");

job. setJarByClass(MyWordCount .class);

System.out.println("Mode:" conf.get("mapred.job.tracker"));

//job.setCombinerClass (PCombine.class);

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

job.setMapperClass(WMapper.class);

job.setReducerClass(WRecur.class);

job.out.println("¡La ruta de salida existe, eliminada!") )

}

FileInputFormat.setInputPaths (trabajo, "hdfs://192.168.46.28:9000/qin/input");

FileOutputFormat.setOutputPath(trabajo, p);

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

}

}

}

}