2

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

提前致谢

4

1 回答 1

0

我们能够解决这个问题。hadoop 中没有错误,错误在于我们的 apache tomcat 配置中的一些超时设置为一小段时间。对于一些更大的数据块,我们克服了超时时间并得到错误。不幸的是,没有那么有用的例外情况。

于 2012-12-18T07:41:09.110 回答