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);
            }
        }
    }

「発行」では、データをシリアル化し(これは問題ありません。これを数回テストしました)、後で送信します。差出人:

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 に答える