java - Obteniendo la excepción de la clase cascading.tap.hadoop.io.MultiInputSplit not found mientras se ejecuta el programa hadoop usando el marco en cascada
(2)
Su archivo de propiedades está vacío, por lo que es posible que su configuración para este trabajo esté desactivada en el clúster. Debe proporcionar la configuración que está utilizando a HadoopFlowController
. La información contenida en los archivos de configuración de Hadoop encontrados al llamar a la new Configuration
pertenece a su objeto de Properties
como fs.default.name=file:////
. Imagino que esto es aún más cierto cuando se ejecuta un Trabajo en cascada a través del "cable".
Aquí está mi código que se conecta a la máquina de hadoop y realiza un conjunto de validación y escribe en otro directorio.
public class Main{
public static void main(String...strings){
System.setProperty("HADOOP_USER_NAME", "root");
String in1 = "hdfs://myserver/user/root/adnan/inputfile.txt";
String out = "hdfs://myserver/user/root/cascading/temp2";
Properties properties = new Properties();
AppProps.setApplicationJarClass(properties, Main.class);
HadoopFlowConnector flowConnector = new HadoopFlowConnector(properties);
Tap inTap = new Hfs(new TextDelimited(true, ","), in1);
Tap outTap = new Hfs(new TextDelimited(true, ","), out);
Pipe inPipe = new Pipe("in1");
Each removeErrors = new Each(inPipe, Fields.ALL, new BigFilter());
GroupBy group = new GroupBy(removeErrors, getGroupByFields(fieldCols));
Every mergeGroup = new Every(group, Fields.ALL, new MergeGroupAggregator(fieldCols), Fields.RESULTS);
FlowDef flowDef = FlowDef.flowDef()
.addSource(inPipe, inTap)
.addTailSink(mergeGroup, outTap);
flowConnector.connect(flowDef).complete();
}
Mi trabajo está siendo enviado a la máquina hadoop. Puedo verificar esto en el rastreador de trabajo. pero el trabajo se está fallando y estoy recibiendo una excepción a continuación.
cascading.tap.hadoop.io.MultiInputSplit no encontrado en org.apache.hadoop.mapred.MapTask.getSplitDetails (MapTask.java:348) en org.apache.hadoop.mapred.MapTask.runOldMapper (MapTask.java:389) en org.apache.hadoop.mapred.MapTask.run (MapTask.java:333) en org.apache.hadoop.mapred.Child $ 4.run (Child.java:268) en java.security.AccessController.doPrivileged (método nativo) en javax.security.auth.Subject.doAs (Subject.java:415) en org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1408) en org.apache.hadoop.mapred.Child.main (Child .java: 262) Causado por: java.lang.ClassNotFoundException: Clase cascading.tap.hadoop.io.MultiInputSplit no encontrada en org.apache.hadoop.conf.Configuration.getClassByName (Configuration.java:1493) en org.apache. hadoop.mapred.MapTask.getSplitDetails (MapTask.java:346) ... 7 más
java.lang.ClassNotFoundException: clase cascading.tap.hadoop.io.MultiInputSplit no encontrada en org.apache.hadoop.conf.Configuration.getClassByName (Configuration.java:1493)
Tenga en cuenta que: 1. Estoy ejecutando esto desde mi máquina de Windows y hadoop está configurado en una caja diferente. 2. Estoy usando la distribución cloudera para hadoop que es CDH 4.
tengo el problema CDH 4.2 tiene problemas con la conexión en cascada 2.1. Así que cambié a CDH 4.1 y funcionó para mí.