Hello, I am trying to write a C++ pipe application. My mapper looks like this:
void MyMap::map(HadoopPipes::MapContext& context) { assert(pInterface != NULL); //cerr<<"Map - now emitting..."<<endl; string inputValue = context.getInputValue(); std::map<string, vector<string> > m = pInterface->getKeyValuePairs(inputValue); for (std::map<string, vector<string> >::iterator i; i != m.end(); i++) { for (int j=0; j<i->second.size(); j++) { context.emit(i->first, i->second[j]); //cerr<<"Map - now emitting... "<<i->first<<" "<<i->second[j]<<endl; } } //cerr<<"Done emitting"<<endl; } and the reducer looks like this: void MyReduce::reduce(HadoopPipes::ReduceContext& context) { vector<string> values; while (context.nextValue()) { values.push_back(context.getInputValue()); } string s = pInterface->reduceMappedValues(context.getInputKey(), values); //cerr<<"Reduce - now emitting..."<<endl; context.emit(context.getInputKey(), s); } I know for sure that pInterface->getKeyValuePairs(inputValue) ends gracefully and returns the needed map in the map() function - however, the loop that does context.emit in map() is never called (at least the cerr's that were uncommented at first were never displayed). I thought at first that I may be interferring with the pipe with the cerr, so I removed the cerr's. Still, I get the same error: 07/11/26 22:21:01 INFO mapred.JobClient: map 50% reduce 0% 07/11/26 22:21:02 INFO mapred.JobClient: map 75% reduce 0% 07/11/26 22:21:02 INFO mapred.JobClient: Task Id : task_200711161538_5478_m_000000_0, Status : FAILED java.io.IOException: pipe child exception at org.apache.hadoop.mapred.pipes.Application.abort(Application.java:134) at org.apache.hadoop.mapred.pipes.PipesMapRunner.run(PipesMapRunner.java:83) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:192) at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:1760)Caused by: java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java:243) at org.apache.hadoop.io.WritableUtils.readVLong(WritableUtils.java:313) at org.apache.hadoop.io.WritableUtils.readVInt(WritableUtils.java:335) at org.apache.hadoop.mapred.pipes.BinaryProtocol$UplinkReaderThread.run(BinaryProtocol.java:112) 07/11/26 22:21:07 INFO mapred.JobClient: Task Id : task_200711161538_5478_m_000000_1, Status : FAILED I am not even sure what this error means. Any ideas what could that mean (the whole Java error thing)? Also, am I allowed to use cerr in map/reduce? (I can see the displayed messages, but I am not sure it interferes with the pipe). Thanks, Jerr. -- View this message in context: http://www.nabble.com/C%2B%2B-pipe-application-error-tf4879558.html#a13964042 Sent from the Hadoop Users mailing list archive at Nabble.com.