我有一个过程,我在其中聚合数据并通过 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);
}
}
}
在“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();
提前致谢