データを集約し、マップ ジョブから 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();
前もって感謝します