我有一个进程,我在这里汇总数据并通过http POST从地图作业中发送请求。我必须等待结果。不幸的是,我遇到了这种方法的问题。
执行此操作时,发送过程中会丢失数据。我们设法调查这个问题到我们知道通信“破坏”套接字并因此数据丢失的程度。有没有人有从映射器中做出http POST请求的经验以及需要注意什么?
一些示例代码;映射器:
public void map(final LongWritable key, final Text value, Context context) throws IOException {
String someData = value.toString();
buffer.add(someData);
if (buffer.size() >= MAX_BUFFER_SIZE) {
emit(buffer);
}
}
}
in“emit”我序列化数据(这很好,我测试了几次)然后发送它;发件人:
byte[] received = null;
URL connAddress = new URL(someComponentToBeAdressed);
HttpURLConnection urlConn;
urlConn = (HttpURLConnection) connAddress.openConnection();
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
urlConn.setRequestMethod("POST");
urlConn.setRequestProperty("Content-type", "text/plain");
urlConn.getOutputStream().write(serialized_buffer);
urlConn.getOutputStream().flush();
urlConn.getOutputStream().close();
received = IOUtils.toByteArray(urlConn.getInputStream());
urlConn.disconnect();
提前致谢
答案 0 :(得分:0)
我们能解决这个问题。在hadoop中没有错误,错误在于我们的apache tomcat配置一些超时设置为一个小时间段。对于一些更大的数据块,我们克服了超时的时间并获得错误。不幸的是那些没有帮助的例外。