<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
        主站蜘蛛池模板: 无码人妻久久一区二区三区免费| 99re8这里有精品热视频免费| 亚洲jizzjizz在线播放久| 亚洲av无码不卡久久| 亚洲av无码成人精品国产| 激情吃奶吻胸免费视频xxxx| 亚洲综合欧美色五月俺也去 | 亚洲阿v天堂在线| 中文字幕亚洲激情| 久久亚洲AV成人无码| 阿v免费在线观看| 亚洲色一色噜一噜噜噜| 亚洲国产韩国一区二区| 成在线人免费无码高潮喷水| 美女被免费喷白浆视频| 亚洲综合色区在线观看| 中国人免费观看高清在线观看二区 | 亚洲成av人片天堂网老年人| 亚洲精品国产肉丝袜久久| 国产免费久久久久久无码| 好大好深好猛好爽视频免费| 亚洲一区二区视频在线观看| 一个人看的www免费在线视频| 啦啦啦高清视频在线观看免费| 国产偷v国产偷v亚洲高清| 狠狠综合亚洲综合亚洲色| 97热久久免费频精品99| 亚洲成a人片在线观看日本| 中文字幕视频免费| 亚洲国产精品高清久久久| 131美女爱做免费毛片| 亚洲日本中文字幕区| 久久最新免费视频| 337p日本欧洲亚洲大胆精品555588| 青青青免费国产在线视频小草| 亚洲aⅴ无码专区在线观看春色 | 国产亚洲av片在线观看18女人| 老汉精品免费AV在线播放| 亚洲AV综合色区无码一区| 最新中文字幕电影免费观看| 亚洲日韩中文字幕无码一区|