91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spark向Elasticsearch批量導入數據,出現重復記錄問題的定位

發布時間:2020-07-29 18:46:27 來源:網絡 閱讀:6343 作者:sirius_kb 欄目:大數據

看了下es-hadoop插件的源碼:

發現ES導入數據重試情況的發生,除了在es.batch.write.retry.policy參數默認開啟且es-hadoop插件向ES集群發送bulk寫入請求接受到503響應碼會重試3次之外。

本身執行http請求時,也會存在重試(hadoop/rest/NetworkClient.java):

   public Response execute(Request request) {
        Response response = null;
        boolean newNode;
        do {
            SimpleRequest routedRequest = new SimpleRequest(request.method(), null, request.path(), request.params(), request.body());

            newNode = false;
            try {
                response = currentTransport.execute(routedRequest);
                ByteSequence body = routedRequest.body();
                if (body != null) {
                    stats.bytesSent += body.length();
                }
            } catch (Exception ex) {
                // configuration error - including SSL/PKI - bail out
                if (ex instanceof EsHadoopIllegalStateException) {
                    throw (EsHadoopException) ex;
                }
                // issues with the SSL handshake, bail out instead of retry, for security reasons
                if (ex instanceof javax.net.ssl.SSLException) {
                    throw new EsHadoopTransportException(ex);
                }
                // check for fatal, non-recoverable network exceptions
                if (ex instanceof BindException) {
                    throw new EsHadoopTransportException(ex);
                }

                if (log.isTraceEnabled()) {
                    log.trace(
                            String.format(
                                    "Caught exception while performing request [%s][%s] - falling back to the next node in line...",
                                    currentNode, request.path()), ex);
                }

                String failed = currentNode;

                failedNodes.put(failed, ex);

                newNode = selectNextNode();

                log.error(String.format("Node [%s] failed (%s); "
                        + (newNode ? "selected next node [" + currentNode + "]" : "no other nodes left - aborting..."),
                        failed, ex.getMessage()));

                if (!newNode) {
                    throw new EsHadoopNoNodesLeftException(failedNodes);
                }
            }
        } while (newNode);

        return response;
    }

當請求出現超時的情況時,es-hadoop插件會再請求一個ES節點發送寫入請求。即導入插件認為當前插入節點超時了(默認是一分鐘)就視為該節點不可用,就換下一個節點,其實是ES在一分鐘內沒有處理完插入任務。

將超時時間es.http.timeout參數調大之后,給ES留下充足的入庫時間,就不會再發生這個問題了。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张家川| 西充县| 镇巴县| 上饶市| 孝昌县| 遂昌县| 张家港市| 囊谦县| 寿光市| 许昌县| 卢龙县| 灵武市| 五莲县| 玉林市| 景泰县| 玉环县| 资兴市| 五指山市| 宽城| 介休市| 平原县| 沭阳县| 海阳市| 郎溪县| 安徽省| 新巴尔虎左旗| 海门市| 昌邑市| 固镇县| 兴国县| 长岭县| 乌拉特中旗| 长春市| 广平县| 咸宁市| 朝阳区| 新津县| 松原市| 澄江县| 九台市| 潢川县|