Iniciando hadoop usando cygwin en win7, pero se informa null\bin\winutils.exe en el binario de Hadoop.
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
*
*
*
* p>
*
* */
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{ p>
// 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);
}
}
}
}