<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Pig系統分析(2)

        來源:懂視網 責編:小采 時間:2020-11-09 15:51:05
        文檔

        Pig系統分析(2)

        Pig系統分析(2):Pig哲學之一——Pigs Eat Anything。Pig能夠從不同數據源加載數據,能夠處理不同式的數據。Pig使用Loader/Store進行數據加載和存儲,可選地使用Schema指定數據列名稱和類型。如果加載數據時不指定Schema,數據列未命名,類型默認是字節數組(bytearra
        推薦度:
        導讀Pig系統分析(2):Pig哲學之一——Pigs Eat Anything。Pig能夠從不同數據源加載數據,能夠處理不同式的數據。Pig使用Loader/Store進行數據加載和存儲,可選地使用Schema指定數據列名稱和類型。如果加載數據時不指定Schema,數據列未命名,類型默認是字節數組(bytearra

        Pig哲學之一——Pigs Eat Anything。Pig能夠從不同數據源加載數據,能夠處理不同式的數據。Pig使用Loader/Store進行數據加載和存儲,可選地使用Schema指定數據列名稱和類型。如果加載數據時不指定Schema,數據列未命名,類型默認是字節數組(bytearray),在后

        Pig哲學之一——Pigs Eat Anything。Pig能夠從不同數據源加載數據,能夠處理不同格式的數據。Pig使用Loader/Store進行數據加載和存儲,可選地使用Schema指定數據列名稱和類型。如果加載數據時不指定Schema,數據列未命名,類型默認是字節數組(bytearray),在后續操作中,Pig可以通過位置參數引用數據列,會根據在數據列上進行的操作進行自動類型轉化。從性能和可讀性考慮,最好在加載數據時指定Schema。

        Loader體系

        Loader的基類是org.apache.pig.LoadFunc,規定了Loader需要實現的接口,并提供了一些默認實現。下圖是Loader的繼承體系,針對不同數據源,Pig實現了大量Loader,包括HBaseStorage和ParquestLoader等,能夠處理列式存儲。默認的Loader是PigStorage。

        org.apache.pig.LoadFunc中的三個基本的方法決定了Where/What/How:

        public abstractvoidsetLocation(String location, Job job) throws IOException
        public abstractInputFormat getInputFormat() throws IOException
        public LoadCaster getLoadCaster() throws IOException {
         return new Utf8StorageConverter();
        }
        
        1. 指定加載位置。
        2. 指定數據源類型,使用HDFS的InputFormat處理不同數據源。
        3. 如何處理數據從字節數組到實際類型的轉化,默認使用Utf8StorageConverter

        PigStore分析

        1) 處理壓縮格式,通過加載文件后綴加載不同的InputFormat:

        @Override
        public InputFormat getInputFormat() {
         if(loadLocation.endsWith(".bz2") || loadLocation.endsWith(".bz")) {
         return newBzip2TextInputFormat();
         } else {
         return newPigTextInputFormat();
         }
        }
        2) 讀取數據:讀取數據之前先代用prepareToRead方法設置InputFormat對應的RecordReader,通過RecordReader讀取每行數據,根據用戶指定的分隔符處理每行文本,最終轉換成元組。
        public void prepareToRead(RecordReader reader,PigSplit split)
        @Override
        public Tuple getNext() throws IOException

        3) Schema處理,在getNext方法中,如果存在Schema,會對元組應用applySchema方法,給元組中的數據項指定名稱和類型。

        其他重要接口

        通過實現其他一些接口,Loader能提供一些附加功能

        LoadMetaData

        1. 通過getSchema方法自動加載Schema
        2. 通過getPartitionKeys方法設置數據的分區鍵,把用戶查詢條件中的分區鍵通過setPartitionFilter直接傳遞給Loader,減少數據加載。參見HCatLoader中實現,注:org.apache.hcatalog.pig.HCatLoader

        LoadPushDown

        在使用RCFile等基于列格式文件時,如果每次都加載所有列對性能影響較大。如果實現了LoadPushDown接口,優化器會將所需要用到的字段傳遞給pushProjection方法。

        LoadCaster

        自定義字節數組到Schema中數據類型的轉換,通過一系列方法能夠自定義字節數組到到Pig的標量和復雜數據類型的轉化。默認實現為Utf8StorageConverter,其中的復雜數據類型格式固定,比如元組格式為(),map格式為[],bag為{}。

        Store體系

        與org.apache.pig.LoadFunc對應,Pig中也存在org.apache.pig.StoreFunc抽象類。由于不少Loader(比如默認的PigStorage)同樣實現了store功能,受Java單繼承的限制,Pig提供了StoreFuncInterface接口。

        Store的實現與Loader對應,將實際輸出操作委托給OutputFormat。值得注意的是,與LoadMetadata對應,Pig也提供了StoreMetadata接口用于處理元數據的存儲。.

        Schema結構

        Schema描述了一個數據集合每一行的列名稱和數據類型,其中每一個列信息用FieldSchema表示。FieldSchema通常包括列名稱、數據類型,如果列本身是bag的話,FieldSchema還會擁有自己的Schema。


        參考價值

        1. 目前Pig針對邏輯執行計劃的優化器都是基于規則的,如果要實現基于代價的優化,需要更多關于數據的統計信息,那么加載和存儲數據應該是重要入口和出口。在LoadMetadata/StoreMetadata接口中已經存在getStatistics/setStatistics方法,ResourceStatistics包含行數、行大小、列直方圖、區分度等統計信息,不過現在在PigStorage中是空實現。
        2. 如果要實現Pig On Spark,Loader體系中需要加入RDD層,演變為Loader-RDD-HDFS三層結構。HDFS存儲可以考慮ORCFile等列式存儲格式,基于成本的優化可以參考Hive中的實現

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Pig系統分析(2)

        Pig系統分析(2):Pig哲學之一——Pigs Eat Anything。Pig能夠從不同數據源加載數據,能夠處理不同式的數據。Pig使用Loader/Store進行數據加載和存儲,可選地使用Schema指定數據列名稱和類型。如果加載數據時不指定Schema,數據列未命名,類型默認是字節數組(bytearra
        推薦度:
        標簽: 系統 分析 哲學
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 好猛好深好爽好硬免费视频| 亚洲人成电影在线观看青青| 看免费毛片天天看| 天天拍拍天天爽免费视频| 国产成人精品日本亚洲专一区| 亚洲高清免费在线观看| 亚洲AV综合色区无码二区偷拍| 国产免费AV片在线播放唯爱网| 亚洲天堂男人影院| 日韩伦理片电影在线免费观看| 亚洲av无码av在线播放| 免费在线观看视频a| 成人免费av一区二区三区| 久久久久亚洲AV片无码| 182tv免费观看在线视频| 亚洲最大的黄色网| 免费看一级做a爰片久久| gogo免费在线观看| 亚洲天天在线日亚洲洲精| 亚洲一级毛片免费看| 亚洲欧洲日韩极速播放| 免费看一级做a爰片久久| 两个人看的www视频免费完整版| 亚洲av日韩av无码黑人| 希望影院高清免费观看视频| 久久精品国产亚洲av品善| 亚洲中文字幕日产乱码高清app| 99ee6热久久免费精品6| 亚洲国产精品无码中文lv| 久久精品国产精品亚洲人人| **一级一级毛片免费观看| 亚洲大码熟女在线观看| 亚洲精品乱码久久久久久按摩| 亚洲精品在线免费看| 黄页视频在线观看免费| 久久精品国产精品亚洲毛片| 四虎影院永久免费观看| 日韩午夜理论免费TV影院| 美女被免费网站在线视频免费| 亚洲va在线va天堂va888www| 国产精品四虎在线观看免费|