Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente del clúster Win

Código fuente del clúster Win

Método para depurar el programa Hadoop2.2.0 en win7:

1. Preparación del entorno

1 versión del servicio Eclipse Juno versión 4.2

2 sistema operativo Windows 7

p>

3 complemento de hadoop eclipse Hadoop-Eclipse-plugin-2 2 0

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

5 Depurador Hola mundo

2. Notas:

Las excepciones son las siguientes:

java.io.IOException: no se encuentra en el archivo binario de Hadoop. Archivo ejecutable null\bin\winutils.exe.

Solución:

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

La ruta al hadoop nativo se cambia aquí de la siguiente manera:

Verificación de cadena estática privada HadoopHome() {

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

//system . set property(" Hadoop . home . dir ", "...");

string home = system . home . dir ");

//Volver a las variables de entorno global del sistema/usuario

if (home == null) {

HOME = system . getenv (" HADOOP _ HOME ");

}

Intenta {

//No puedo encontrar ninguna configuración para el directorio de inicio de hadoop

if (home == null) {

Lanzar nueva IOException("HADOOP_HOME o hadoop.home.dir no está configurado.");

}

if (casa . comienza con(" \ ") amp; amphome . termina con(" \ "){

casa = casa.substring(1, casa . longitud()-1);

}

//Compruebe que la configuración de inicio sea realmente un directorio existente

Archivo homedir = nuevo archivo (home);

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

Lanza una nueva IOException("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("Error al detectar el directorio de inicio de hadoop válido", ioe);

}

home = null

}

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

home = "D:\\Hadoop-2.2.0";

Regreso a China;

}

Segunda excepción, ejecutable d no encontrado en el binario hadoop:\Hadoop\tar\Hadoop-2.2.0\Hadoop-2.2.0\bin\winutils.exe. Si no se puede encontrar el programa ejecutable en Win, puede ir a /src codes/Hadoop-common-2.2.0.

Tercera excepción:

Excepción en el hilo "principal" Java.lang.illegalargumentexception: FS incorrecto: HDFS://192.168.130.54:19000/user/hmail/output/part- 00000, debe ser: file:///

En org.Apache.Hadoop.fs.filesystem.checkpath(filesystem.Java:310)

Ubicado en org.Apache.Hadoop .fs.rawlocalfilesystem.pathtofile(rawlocalfilesystem.Java:47)

Ubicado en org.Apache.Hadoop.fs.rawlocalfilesystem.getfilestatus(rawlocalfilesystem.Java:357)

Ubicado en org . Apache .fs .sistema de archivos de filtro .getfilestatus (sistema de archivos de filtro .Java: 245)

Ubicado en org.fs. ltinit gt(sistema de archivos de suma de verificación. Java:125)

ubicado en org.Apache.fs.sistema de archivos de suma de verificación abierto(sistema de archivos de suma de verificación. Java:283)

. en org. Apache. Hadoop. fs. sistema de archivos abierto(sistema de archivos. Java: 356)

Ubicado en com.Hadoop.

Cuando ocurre esta excepción, generalmente hay algún problema con la ruta HDFS.

La solución es copiar los archivos core-site.xml y hdfs-site.xml en el clúster y colocarlos en el directorio raíz src de eclipse.

Paquete com. Qin. recuento de palabras;

Importar excepción io.io;

Importar sistema de archivos Apache. /p>

Importar organización .Apache .fs .

Importar organización .Apache io . io .escrito largo;

Importar org . Apache .io .

Importar mapa de Hadoop . Importar org.Hadoop.MapReduce.

Importar .Hadoop.MapReduce. >

Importar org.Hadoop.MapReduce lib.formato de entrada de texto;

. importar org. Apache . MapReduce . formato de salida de archivo;

*

*

* Prueba de Hadoop2.2.0

*Ejemplo de recuento de palabras

*

* @author Qin Dongliang

*

* grupo de intercambio de tecnología hadoop: 376932160

*

*

* */

Clase pública MyWordCount {

/**

*Mapper

*

* **/< / p>

La clase estática privada WMapper extiende Mapper ltLongWritable, Text, Text, IntWritable gt{

private int writable count = new int writable(1);

Texto privado Texto = new Text();

@Override

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

Lanza IOException, InterruptedException {

Valores de cadena[]=valor.toString().

split(" # ");

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

recuento. set(entero . parse int(valores[1]);

texto . set(valores[0]);

context.write(texto, recuento);

p>

}

}

/**

*Reductor

*

* **/

La clase estática privada WReducer extiende Reducer ltText, IntWritable, Text, Text gt{

Texto privado t = new Text();

@Override

Reducción de vacío protegido (clave de texto, valor gt ltIntWritable iterable, contexto de contexto)

Lanza IOException, InterruptedException {

int count = 0

; p>

for(IntWritable i: valor){

cuenta = I . );

context.write(clave, t);

}

}

/**

*Cambio 1

* (1) Agregar la ruta de checkHadoopHome en el código fuente del shell

* (2) Línea 974, dentro de FileUtils

* * */

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

//Ruta de cadena 1 = system .

//system . out . println(ruta 1);

//system . exit(0); JobConf conf = new JobConf(myword count . class);

//Configuración conf = new Configuration();

//conf.set("mapred.job.tracker", "192.168.75. 130:9001" );

//Lea los campos de datos usted mismo.

//conf . set jar(" TT . jar ");

// Tenga en cuenta que esta línea de código se coloca al frente y se inicializa; de lo contrario, se informará.

/* *Tarea de trabajo* */

Trabajo trabajo=nuevo Trabajo(conf, "test word count");

job setjarbyclass(myword count). . class);

system . println(" mode:" conf . get(" mapred . job . tracker "));

//job . class);

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

job . setmapperclass(wmapper . class);

job . (w reductor. clase);

trabajo.setinputformatclass(textinputformat.clase);

trabajo.setoutputformatclass(textoutputformat.clase); texto .clase);

trabajo .setmapoutputvalueclass (int writable .clase);

trabajosetoutputkey clase (texto .clase); text. class);

ruta de cadena = "HDFS://192.168.46.28:9000/Qin/output";

sistema de archivos fs = sistema de archivos get( conf);

Ruta p = nueva ruta (Ruta);

if(fs.exists(p)){

fs.delete(p, true ); /p>

System.out.println("¡La ruta de salida existe y se ha eliminado!");

}

fileinputformat . /192.168.46 . 28: 9000/Qin/input ");

formato de salida del archivo . setoutputpath(trabajo, p);

sistema . exit(trabajo . espere a que se complete ( verdadero)? 0: 1);

}

}