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

溫馨提示×

溫馨提示×

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

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

HDFS中addBlock函數的作用是什么

發布時間:2021-07-14 14:07:14 來源:億速云 閱讀:168 作者:Leah 欄目:云計算

本篇文章為大家展示了HDFS中addBlock函數的作用是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

public LocatedBlock addBlock(String src, String clientMachine) throws IOException {

        int retries = 5;//設定重試次數為5

        Object results[] = namesystem.getAdditionalBlock(new UTF8(src), new UTF8(clientMachine));

//獲取新的一個Block和DataNode節點信息

        while (results != null && results[0] == null && retries > 0) {

            try {//發生錯誤,且不超過錯誤次數,就重新獲取

                Thread.sleep(100);

            } catch (InterruptedException ie) {

            }

            results = namesystem.getAdditionalBlock(new UTF8(src), new UTF8(clientMachine));

            retries--;

        }

//無論如何,都結束了!

        if (results == null) {//沒找到?返回錯誤

            throw new IOException("Cannot obtain additional block for file " + src);

        } else if (results[0] == null) {

            return null;//沒有Block?返回null

        } else {

            Block b = (Block) results[0];

            DatanodeInfo targets[] = (DatanodeInfo[]) results[1];

            return new LocatedBlock(b, targets);//這個簡單,返回Block和DatanodeInfo

        }

    }

=====================

C1:OKAY  c2:OKAY   c3:OKAY

=====================

下面開始講解

 public synchronized Object[] getAdditionalBlock(UTF8 src, UTF8 clientMachine) {

---

public synchronized Object[] getAdditionalBlock(UTF8 src, UTF8 clientMachine) {

        Object results[] = null;

        if (dir.getFile(src) == null && pendingCreates.get(src) != null) {

//文件系統dir中沒有此文件且此文件正在創建過程中

            results = new Object[2];//創建返回的變量數組

            //

            // If we fail this, bad things happen!

            //這里的checkFileProgress很關鍵,

            //后面會分析checkFileProgress的作用

            if (checkFileProgress(src)) {

                // Get the array of replication targets //這個仍然很簡單,之前分析過了

                DatanodeInfo targets[] = chooseTargets(this.desiredReplication, null, clientMachine);

                if (targets.length < this.minReplication) {

                    return null;

                }

                // Create next block返回不多說!

                results[0] = allocateBlock(src);

                results[1] = targets;

            }

        }

        return results;

    }

===

接下來是函數

synchronized boolean checkFileProgress(UTF8 src) {

這個函數還是蠻重要的!

/**

     * Check that the indicated file's blocks are present and

     * replicated.  If not, return false.

     */

    synchronized boolean checkFileProgress(UTF8 src) {

        Vector v = (Vector) pendingCreates.get(src);//獲取文件名src對應的每個塊

        for (Iterator it = v.iterator(); it.hasNext(); ) {

            Block b = (Block) it.next();//對于當前塊來說

            TreeSet containingNodes = (TreeSet) blocksMap.get(b);//獲取這個塊對應的datanode節點信息

            if (containingNodes == null || containingNodes.size() < this.minReplication) {

                return false;//如果此Block對應的datanode個數不足最小備份數,則禁止返回Block

            }

        }

        return true;//順利返回true.

}

上述內容就是HDFS中addBlock函數的作用是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

淄博市| 凌海市| 重庆市| 惠州市| 惠来县| 临桂县| 即墨市| 上饶市| 兴隆县| 贵南县| 遂平县| 焦作市| 海淀区| 宾阳县| 睢宁县| 山丹县| 广饶县| 平塘县| 万荣县| 莱西市| 阳山县| 西安市| 门头沟区| 宜兴市| 彝良县| 奇台县| 阳城县| 县级市| 志丹县| 民乐县| 惠来县| 高要市| 沭阳县| 红桥区| 镇康县| 微山县| 仪征市| 安塞县| 石首市| 左云县| 卫辉市|