这是我的代码,它连接到 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)
在 java.security.AccessController.doPrivileged(本机方法)
在 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)
注意 :
1. 我在我的 Windows 机器上运行它,并且 hadoop 设置在不同的机器上。
2.我正在使用hadoop的cloudera发行版,即CDH 4。