hadoop映射作业中的HTTP请求问题

hadoop映射作业中的HTTP请求问题,http,sockets,hadoop,Http,Sockets,Hadoop,我有一个聚合数据并通过http POST从映射作业中发送请求的过程。我必须等待结果。不幸的是,我在使用这种方法时遇到了问题 执行此操作时,在发送过程中会丢失数据。我们设法调查了这个问题,知道通信“破坏”了套接字,因此数据丢失。有没有人有过使用映射器执行http POST请求的经验?需要注意什么 一些示例代码;制图员: public void map(final LongWritable key, final Text value, Context context) throws IOExcept

我有一个聚合数据并通过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();

提前感谢

我们已找到解决此问题的方法。hadoop中没有错误,错误在于我们的ApacheTomcat配置中设置了一些超时,这些超时设置为很短的时间段。对于一些较大的数据块,我们克服了超时时间,并得到错误。不幸的是,例外情况并不那么有用。

你能发布一些代码吗?您是否记得在完成后冲洗/关闭插座?我在上面添加了一些代码。我没有直接使用插座。因此,套接字在发送数据时出现故障是一种奇怪的行为。您是否在映射器的close方法中调用emit方法?如果您的缓冲区中还有数据,并且您没有在close方法中发出数据,那么这可能就是您丢失数据的地方是的,我再次在cleanup中调用它。我们知道,在发送的100个数据对象中,至少有2/3在到达目的地的途中丢失。我们实现了一个虚拟系统,它将获取的数据发送回来,并在另一端计算信息是如何到达的。如果我们发送100,在另一边大约35到达。发回时,所有35份文件均已成功提交。