Código fuente del clúster Win
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
*
*
* */ p>
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);
}
}