欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

hadoop源碼解析---INodeReference機制-創(chuàng)新互聯(lián)

本文主要介紹了hadoop源碼中hdfs的INodeReference機制。

創(chuàng)新互聯(lián)建站專注于網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)頁設計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

在hdfs2.6版本中,引入了許多新的功能,一些原有的源代碼設計也有一定的改造。一個重要的更新就是引入了快照功能。但是當HDFS文件或者目錄處于某個快照中,并且這個文件或者目錄被重命名或者移動到其他路徑時,該文件或者目錄就會存在多條訪問路徑。INodeReference就是為了解決這個問題產(chǎn)生的。

問題描述

/a是hdfs中的一個普通目錄,s0為/a的一個快照,在/a目錄下有一個文件test。根據(jù)快照的定義,我們可以通過/a/test以及/a/snapshot/s0/test訪問test文件。

但是當用戶將/a/test文件重命名成/x/test1時,通過快照路徑/a/snapshot/s0/test將無法訪問test文件,這種情況是不符合快照規(guī)范的。

引入INodeReference

為了解決上述問題,hdfs引入了INodeReference類。圖1-1給出了INodeReference的繼承關(guān)系圖。這里的WithName,WithCoount,DstReference都是INodeReference的子類,同時也是INodeReference的內(nèi)部類。WithName對象用于替代重命名操作前源路徑中的INode對象,DstReference對象則用于替代重命名操作后目標路徑中的INode對象,WithName和DstReference共同指向了一個WithCount對象,WithCount對象則指向了文件系統(tǒng)目錄樹中真正的INode對象。

hadoop源碼解析---INodeReference機制

圖1

INodeReference代碼實現(xiàn)

INodeReference是一個抽象類,它拓展自INode類,所以INodeReference及其子類是可以添加到文件系統(tǒng)目錄樹中以替代原有的INodeFile節(jié)點的。INodeReference定義了referred字段,這個字段用于保存當前INodeReference類指向的INode節(jié)點,所以WithName和RstReference,referred字段就指向了WithCount對象,對于WithCount,referred指向了真正的INode對象。INodeReference還定義了getReferredINode()方法,在文件系統(tǒng)目錄樹的操作中,如果判斷當前節(jié)點是一個引用節(jié)點,則會調(diào)用getReferredINode()方法獲取INodeReference指向的INode對象。

public abstract class INodeReference extends INode {
    private INode referred;//指向的INode節(jié)點
    public INodeReference(INode parent,INode referred){
        super(parent);
        this.referred = referred;
    }
    public final INode getReferredINode() {  //獲取指向的INode節(jié)點
        return referred;
    }
    public final void setReferredINode(INode referred) {
        this.referred = referred;
    }
    //...
}

然后,我們在來看看WithCount類的實現(xiàn)。

WithCount類定義了一個集合字段withNameList用于保存所有指向這個WithCount對象的WithName對象集合。WithCount類還定義了addReference()方法,任何指向WithCount對象的WithName對象以及DstReference對象都需要調(diào)用這個方法來添加指向關(guān)系。對于指向這個WithCount對象的DstReference對象,addReference()方法會將這個對象設置為自己的父INode節(jié)點;而對于WithName對象,addReference()方法則將這個對象放入withNameList集合中保存。

public static class WithCount extends INodeReference {
    //保存所有指向這個WithCount對象的WithName對象的集合
    private final List<WithName> withNameList = new ArrayList<WithName>();
    
    public WithCount(INodeReference parent,INode referred) {
        super(parent,referred); //調(diào)用父類的構(gòu)造方法,指向文件系統(tǒng)目錄樹中的INode
        Preconditions.checkArgument(!referred.isReference());
        refferred.setParentReferenct(this); //設置真實INode的父節(jié)點為當前WithCount對象
    }
    
    public void addReferenct(INodeReference ref){
        if ( ref instanceof WithName) { //如果是WithName對象,則加入withNameList
            WithName refWithName = (WithName) ref;
            int i = Collections.binarySearch(withNameList, refWithName,WITHNAME_COMPARATOR);
            Preconditions.checkState(i<0);
            withNameList.add(-i-1,refWithName);
        } else if (ref instanceof DstReference) { //如果是DstReference對象,則設置為父節(jié)點
            setParentReference(ref);
        }
    }
    //...
}

看完WithCount后,在看看WithName和DstReference。WithName類定義了name字段用于保存重命名前文件的名稱,同事定義了lastSnapshotId字段用于保存WithName對象構(gòu)造時源路徑的快照版本號。DstReference類的實現(xiàn)就更簡單了,只定義了一個dstSnapshotId字段用于保存重命名操作前目標路徑的最新快照的版本號。WithName和DstReference在構(gòu)造時都會調(diào)用父類的構(gòu)造方法指向WithCount對象,同時還會調(diào)用WithCount.addReference()方法配置WithCount對象。

public static class WithName extend INodeReference {
    private final byte[] name;//重命名前的文件名
    private final int lastSnapshotId;
    public WithName(INodeDirectory parent,WithCount referred,bytep[] name,int lastSnapshotId){
        super(parent,referred); //調(diào)用父類構(gòu)造方法,指向WithCount節(jié)點
        this.name = name;
        this.lastSnapshotId = lastSnapshotId;
        referred.addReferenct(this); //調(diào)用WithCount.addReferenct()
     }
     //...
}

public static class DstReference extends INodeReference {
    private final int dstSnapshotId;
    public DstReference (INodeDirectory parent,WithCount referred,final int dstSnapshotId){
    super(parent,referred);
    this.lastSnapshotId = lastSnapshotId;
    referred.addReferenct(this); //調(diào)用WithCount.addReferenct()
  }
  //..
}

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文標題:hadoop源碼解析---INodeReference機制-創(chuàng)新互聯(lián)
地址分享:http://aaarwkj.com/article0/iheio.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、域名注冊網(wǎng)站維護、網(wǎng)站內(nèi)鏈、動態(tài)網(wǎng)站、App設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計
国产精品伊人久久精品| 特黄特色的日本大片| 国产精品国产成人生活片| 国产在线精品91系列| 亚洲熟妇av一区二区| 亚洲不卡在线免费av| 日韩人妻av免费电影| 国产自拍成人精品视频| 最新亚洲av熟女播放| 黄色三级亚洲男人的天堂| 亚洲精品一区二区牛仔裤| 欧美三级欧美一级视频看| 午夜影院免费在线观看五分钟| 尤物在线观看视频播放| 日本一区二区在线高清| 懂色粉嫩蜜臀久久一区二区| 亚洲一区二区三区日韩欧美| 国产精品欧美一区久久| 亭亭丁香激情五月涩久久| 国产精品大全中文字幕| 国产一区二区三区婷婷| 国产日韩视频一区二区| 自偷自拍在线免费观看| 国产欧美一区二区三区高清| 午夜视频在线观看麻豆| 小骚货操死你视频在线观看| 成人av久久一区二区三区| 欧美一区二区日韩一区二区| 欧美日韩中文国产天堂| 国语av一区二区三区| 久久99精品久久久国产| 欧美日韩一级一区二区三区| 2018在线不卡爱视频| 国产九色91中文在线视频| 国产精品_国产精品_k频道| 国产丰满熟女视频免费| 日韩精品视频播放一区| 亚洲一区二区三区在线播| 国产一级黄色录像大片| 999久久免费精品国产| 国产丝袜美腿在线观看|