使用级联框架运行hadoop程序时获取cascading.tap.hadoop.io.MultiInputSplit类未找到异常

时间:2013-04-13 13:04:10

标签: java hadoop cascading

这是我的代码,它连接到hadoop机器并执行一组验证并在另一个目录上写入。

      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();

}

我的工作是提交给hadoop机器。我可以在工作追踪器上查看这个。但工作失败了,我在下面得到例外。

未找到cascading.tap.hadoop.io.MultiInputSplit     在org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:348)     在org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:389)     在org.apache.hadoop.mapred.MapTask.run(MapTask.java:333)     在org.apache.hadoop.mapred.Child $ 4.run(Child.java:268)     at java.security.AccessController.doPrivileged(Native Method)     在javax.security.auth.Subject.doAs(Subject.java:415)     在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)     在org.apache.hadoop.mapred.Child.main(Child.java:262) 引起:java.lang.ClassNotFoundException:找不到类cascading.tap.hadoop.io.MultiInputSplit     在org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1493)     在org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:346)     ......还有7个

java.lang.ClassNotFoundException:找不到类cascading.tap.hadoop.io.MultiInputSplit     在org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1493)

请注意: 我从我的Windows机器上运行它,并且在不同的盒子上安装了hadoop。 2.我正在使用cloudera发行版为hadoop,即CDH 4。

2 个答案:

答案 0 :(得分:0)

您的属性文件为空,因此可能是您在群集上关闭此作业的配置。您必须将您正在使用的配置提供给HadoopFlowController。当您致电new Configuration时,您发现的Hadoop配置文件中包含的信息属于您的Properties对象,例如fs.default.name=file:////等等。我想,当您运行时,情况更是如此跨越“电线”的级联工作。

答案 1 :(得分:0)

得到了这个问题。 CDH 4.2存在级联2.1的问题。所以改为CDH 4.1,它对我有用。