来自hadoop map作业的HTTP请求出现问题

时间:2012-11-27 09:26:15

标签: http sockets hadoop

我有一个进程,我在这里汇总数据并通过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();

提前致谢

1 个答案:

答案 0 :(得分:0)

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