分布式文件系統(tǒng)列式存儲的元數(shù)據(jù)更新方法、裝置、主機的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,更具體的說是涉及一種基于分布式文件系統(tǒng)列式存儲的元數(shù)據(jù)更新方法、裝置、主機。
【背景技術(shù)】
[0002]Append-Only文件系統(tǒng),即文件系統(tǒng)只支持文件的讀或者追加寫操作,而不像傳統(tǒng)的文件系統(tǒng)一樣支持文件的就地修改操作。該類文件系統(tǒng)具有寫性能高、多副本容易保持一致性等特性,廣泛應(yīng)用在大規(guī)模分布式存儲系統(tǒng)中,典型的代表實例包括GFS (GoogleFile System,Google 分布式文件系統(tǒng))、HDFS (Hadoop Distributed File System,Hadoop分布式文件系統(tǒng))等。在Append-Only文件系統(tǒng)中,列式存儲較之傳統(tǒng)的行式存儲具有獨特的優(yōu)勢,在列式存儲中,數(shù)據(jù)記錄按列分割并獨立存儲,從而相同列的數(shù)據(jù)類型相同且連續(xù)存儲,大大提升了數(shù)據(jù)的壓縮率,降低了為后續(xù)查詢操作的數(shù)據(jù)10,另外,各列數(shù)據(jù)分開存儲,數(shù)據(jù)查詢時只需掃描相關(guān)的列數(shù)據(jù)而直接過濾無關(guān)列,大幅提升該類查詢的性能。
[0003]在Append-Only文件系統(tǒng)列式存儲中,新增內(nèi)容總是追加寫在文件的末尾,只能以覆蓋寫實現(xiàn),即刪除現(xiàn)有文件,并為待更新文件生成新的文件,而不允許對文件內(nèi)容的就地更新。RCFile是一種可以實現(xiàn)列式存儲的數(shù)據(jù)存儲結(jié)構(gòu),RCFile是在HDFS的基礎(chǔ)之上設(shè)計和實現(xiàn)的,RFCile以行組為單位組織記錄,其中,除最后一個行組外的其他行組大小相等,每個HDFS塊可存儲多個行組。在各行組內(nèi)部,各列數(shù)據(jù)相互獨立并連續(xù)存儲,而元數(shù)據(jù)Metadata則保存著各列數(shù)據(jù)的位置偏移以及每個數(shù)據(jù)的字節(jié)長度等信息。數(shù)據(jù)表的可擴展標記語言架構(gòu)Schema信息則保存在第三方服務(wù)器中,如MySQL、Derby等,由于數(shù)據(jù)表的Schema存儲在MySQL中,通過Hive可以很方便地被修改。然而,RCFile的文件組織格式是固定的,其Metadata只保存著數(shù)據(jù)記錄個數(shù)、各列所占bytes大小等簡單信息,而不支持任何動態(tài)數(shù)據(jù)更新操作。
[0004]因此,現(xiàn)有Append-Only文件系統(tǒng)列式存儲中,現(xiàn)有的實現(xiàn)方式不能提供有效的元數(shù)據(jù)動態(tài)修改方法,對元數(shù)據(jù)的更新操作代價極高,它需要重新生成和重寫所有對應(yīng)的存儲文件,這對大規(guī)模數(shù)據(jù)而言,其帶來的計算資源開銷和時間消耗極其巨大。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明的目的是要解決現(xiàn)有Append-Only文件系統(tǒng)中,不能提供有效的元數(shù)據(jù)動態(tài)修改方法,對元數(shù)據(jù)的更新操作需要消耗巨大的計算資源開銷和時間開銷的問題,技術(shù)方案如下:
[0006]本申請的第一方面提供了一種基于分布式文件系統(tǒng)列式存儲的元數(shù)據(jù)更新方法,所述方法包括:
[0007]獲取分布式文件系統(tǒng)的數(shù)據(jù)表中待更新的元數(shù)據(jù),將所述數(shù)據(jù)表的數(shù)據(jù)記錄按行分割為多個行組,將所述數(shù)據(jù)表轉(zhuǎn)換成一個全局文件元數(shù)據(jù),以及多個行組文件,其中,所述行組文件包括實際數(shù)據(jù)塊、數(shù)據(jù)索引塊、本地元數(shù)據(jù)塊、元數(shù)據(jù)索引塊以及文件頁腳;
[0008]判斷所述待更新的元數(shù)據(jù)是否屬于所述全局文件元數(shù)據(jù),如果否,則:
[0009]更新本地元數(shù)據(jù);
[0010]根據(jù)更新后的本地元數(shù)據(jù),在所述多個行組文件中增加更新后的本地元數(shù)據(jù)塊、元數(shù)據(jù)索引塊以及文件頁腳。
[0011]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,
[0012]所述更新本地元數(shù)據(jù),包括:
[0013]為每個所述行組對應(yīng)生成Map任務(wù),通過所述MAP任務(wù)更新與所述MAP任務(wù)對應(yīng)的行組的本地元數(shù)據(jù)。
[0014]結(jié)合第一方面的第一種實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,
[0015]通過所述MAP任務(wù)更新與所述MAP任務(wù)對應(yīng)的行組的本地元數(shù)據(jù),根據(jù)更新后的本地元數(shù)據(jù),在所述多個行組文件中增加更新后的本地元數(shù)據(jù)塊、元數(shù)據(jù)索引塊以及文件頁腳,包括:
[0016]確定所述待更新的元數(shù)據(jù)所涉及的目標數(shù)據(jù)列;
[0017]判斷所述目標數(shù)據(jù)列中所述待更新的元數(shù)據(jù)是否需要進行計算,如果否,則:
[0018]生成新的元數(shù)據(jù)塊,并將其添加到所述行組文件的尾部;
[0019]更新元數(shù)據(jù)索引塊,將更新后的元數(shù)據(jù)索引塊添加至所述行組文件的尾部;
[0020]更新文件頁腳中的元數(shù)據(jù)索引塊的文件偏移,根據(jù)所述元數(shù)據(jù)索引塊的文件偏移,重寫所述文件頁腳。
[0021]結(jié)合第一方面的第一種實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,
[0022]通過所述MAP任務(wù)更新與所述MAP任務(wù)對應(yīng)的行組的本地元數(shù)據(jù),根據(jù)更新后的本地元數(shù)據(jù),在所述多個行組文件中增加更新后的本地元數(shù)據(jù)塊、元數(shù)據(jù)索引塊以及文件頁腳,包括:
[0023]確定所述待更新的元數(shù)據(jù)所涉及的目標數(shù)據(jù)列;
[0024]判斷所述目標數(shù)據(jù)列中所述待更新的元數(shù)據(jù)是否需要進行計算,如果是,則:
[0025]計算新的元數(shù)據(jù);
[0026]根據(jù)計算后的元數(shù)據(jù)生成新的元數(shù)據(jù)塊,并將其添加到所述行組文件的尾部;
[0027]更新元數(shù)據(jù)索引塊,將更新后的元數(shù)據(jù)索引塊添加至所述行組文件的尾部;
[0028]更新文件頁腳中的元數(shù)據(jù)索引塊的文件偏移,根據(jù)所述元數(shù)據(jù)索引塊的文件偏移,重寫所述文件頁腳。
[0029]結(jié)合第一方面的第三種實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,
[0030]所述計算新的元數(shù)據(jù),包括:
[0031]掃描所述目標數(shù)據(jù)列在實際數(shù)據(jù)塊中對應(yīng)數(shù)據(jù)塊的所有記錄,并進行相應(yīng)的統(tǒng)計計算。
[0032]結(jié)合第一方面,在第一方面的第五種可能的實現(xiàn)方式中,
[0033]所述生成并執(zhí)行并發(fā)任務(wù),更新所有所述行組的本地元數(shù)據(jù)之前,包括:
[0034]判斷所述待更新的元數(shù)據(jù)位置,如果所述待更新的元數(shù)據(jù)位置為行組文件中的元數(shù)據(jù),則生成新的元數(shù)據(jù)塊,所述新的元數(shù)據(jù)塊包含有相應(yīng)的增加或刪減記錄結(jié)果。
[0035]結(jié)合第一方面的第五種實現(xiàn)方式,在第一方面的第六種可能的實現(xiàn)方式中,
[0036]所述生成新的元數(shù)據(jù)塊,包括:
[0037]當刪除的第k列已存在時,則在元數(shù)據(jù)塊k中增加相應(yīng)的刪除記錄,所述刪除記錄包括列名、刪除標記;
[0038]當增加一個新列時,則為該列生成一個空的元數(shù)據(jù)塊,并在所述元數(shù)據(jù)塊中插入相應(yīng)的增加記錄,所述增加記錄包括列名、增加標記以及可選的默認值。
[0039]結(jié)合第一方面,在第一方面的第七種可能的實現(xiàn)方式中,
[0040]所述方法還包括:
[0041]如果所述待更新的元數(shù)據(jù)屬于所述數(shù)據(jù)表中的全局文件元數(shù)據(jù),則修改所述全局文件元數(shù)據(jù)對應(yīng)的文件。
[0042]本申請的第二方面提供了一種基于分布式文件系統(tǒng)列式存儲的元數(shù)據(jù)更新裝置,所述裝置包括獲取單元、第一判斷單元、更新單元、第一處理單元:
[0043]所述獲取單元,用于獲取分布式文件系統(tǒng)的數(shù)據(jù)表中待更新的元數(shù)據(jù),將所述數(shù)據(jù)表的數(shù)據(jù)記錄按行分割為多個行組,將所述數(shù)據(jù)表轉(zhuǎn)換成一個全局文件元數(shù)據(jù),以及多個行組文件,其中,所述行組文件包括實際數(shù)據(jù)塊、數(shù)據(jù)索引塊、本地元數(shù)據(jù)塊、元數(shù)據(jù)索引塊以及文件頁腳;
[0044]所述第一判斷單元,用于判斷所述待更新的元數(shù)據(jù)是否屬于所述全局文件元數(shù)據(jù),如果否,則觸發(fā)所述更新單元:
[0045]所述更新單元,用于更新本地元數(shù)據(jù);
[0046]所述第一處理單元,用于根據(jù)更新后的本地元數(shù)據(jù),在所述多個行組文件中增加更新后的本地元數(shù)據(jù)塊、元數(shù)據(jù)索弓I塊以及文件頁腳。
[0047]結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,
[0048]所述更新單元,包括:
[0049]Map更新子單元,用于為每個所述行組對應(yīng)生成Map任務(wù),通過所述MAP任務(wù)更新與所述MAP任務(wù)對應(yīng)的行組的本地元數(shù)據(jù)。
[0050]結(jié)合第二方面的第一種實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,
[0051]所述Map更新子單元,包括數(shù)據(jù)列確定子模塊、判斷子模塊、元數(shù)據(jù)塊生成子模塊、第一更新子模塊、第二更新子模塊;
[0052]所述數(shù)據(jù)列確定子模塊,用于確定所述待更新的元數(shù)據(jù)所涉及的目標數(shù)據(jù)列;
[0053]所述判斷子模塊,用于判斷所述待更新的元數(shù)據(jù)是否需要進行計算,如果否,則觸發(fā)元數(shù)據(jù)塊生成子模塊;
[0054]所述元數(shù)據(jù)塊生成子模塊,用于生成新的元數(shù)據(jù)塊,并將其添加到所述行組文件的尾部;
[0055]所述第一更新子模塊,用于更新元數(shù)據(jù)索引塊,將更新后的元數(shù)據(jù)索引塊添加至所述行組文件的尾部;
[0056]所述第二更新子模塊,用于更新文件頁腳中的元數(shù)據(jù)索引塊的文件偏移,根據(jù)所述元數(shù)據(jù)索引塊的文件偏移,重寫所述文件頁腳。
[0057]結(jié)合第二方面的第一種實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,
[0058]所述Map更新子單元,包括數(shù)據(jù)列確定子模塊、判斷子模塊、計算子模塊、元數(shù)據(jù)塊生成子模塊、第一更新子模塊、第二更新子模塊:
[0059]所述數(shù)據(jù)列確定子模塊,用于確定所述待更新的元數(shù)據(jù)所涉及的目標數(shù)據(jù)列;
[0060]所述判斷子模塊,用于判斷所述目標數(shù)據(jù)列中所述待更新的元數(shù)據(jù)是否需要進行計算,如果是,則觸發(fā)所述計算子模塊;
[0061]所述計算子模塊,用于計算新的元數(shù)據(jù);
[0062]所述元數(shù)據(jù)塊生成子模塊,用于根據(jù)計算后的元數(shù)據(jù)生成新的元數(shù)據(jù)塊,并將其添加到所述行組文件的尾部;
[0063]所述第一更新子模塊,用于更新元數(shù)據(jù)索引塊,將更新后的元數(shù)據(jù)索引塊添加至所述行組文件的尾部;
[0064]所述第二更新子模塊,用于更新文件頁腳中的元數(shù)據(jù)索引塊的文件偏移,根據(jù)所述元數(shù)據(jù)索引塊的文件偏移,重寫所述文件頁腳。
[0065]結(jié)合第二方面的第三種實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,
[0066]所述計算子模塊,包括:
[0067]統(tǒng)計子模塊,用于掃描所述目標數(shù)據(jù)列在實際數(shù)據(jù)塊中對應(yīng)數(shù)據(jù)塊的所有記錄,并進行相應(yīng)的統(tǒng)計計算。
[0068]結(jié)合第二方面,在第二方面的第五種可能的實現(xiàn)方式中,還包括:
[0069]第二判斷單元,用于判斷所述待更新的元數(shù)據(jù)位置,如果所述待更新的元數(shù)據(jù)位置為行組文件中的元數(shù)據(jù),則生成新的元數(shù)據(jù)塊,所述新的元