1. 程式人生 > >BigData 學習記錄(五)

BigData 學習記錄(五)

merge 而且 seq 運行時間 big 存儲位置 完成 setup 其中

MR(MapReduce)運行過程 client程序--》提交job至JobTracker--》分配job ID--》JobTracker檢查輸入文件存在,輸出文件不存在--》進行輸入分片--》Jobtracker分配資源--》初始化job(初始化就是創建一個正在運行的job對象(封裝任務和記錄信息),以便JobTracker跟蹤job的狀態和進程。)--》為每一個任務創建map任務--》任務分配(運行taskTracker與JobTracker進行溝通)--》執行任務--》任務完成,job狀態為成功 MR作業處理(K:key,V:value) 文件 Map輸入 Map進程 Map輸出-Reduce輸入 Reduce進程 Reduce輸出 Input --> Splitting --> Mapping --> Shuffling --> Reducing --> Output(Hdfs) K1,V1 K2,V2 K3,V3 輸入--》分片--》分片執行Mapper run函數(setUp--while{map}--cleanUp)--》自定義combiner、sort、shuffling(數據處理,排序,merge整合)--》每個Reducer執行run(setUp--while{reduce}--cleanUp)函數--》輸出到磁盤 技術分享
(Input-->Splitting-->Mapping-->Shuffling) MAP工作流程: Map作業從輸入數據中抽取出鍵值對(K1,V1),每一個鍵值對都作為參數傳遞給map函數,map函數產生的中間鍵值對(K2,V2)被緩存在內存中。 Map對數據進行兩次排序: 1 每次溢出時,磁盤上產生一個溢寫文件,溢寫文件對溢出的數據劃分好相應的分區(對應reduce),並排序 --第一次排序 2 結束時,將所有溢出時的溢寫文件進行分區(對應reduce)排序整合 --第二次排序 技術分享 (Shuffling) MAP-Reduce交接: 1.緩存的中間鍵值(K2,V2)對會被定期(溢出時或指定時間內)寫入本地磁盤,而且被分為R個區,R的大小是由用戶定義的,將來每個區會對應一個Reduce作業;這些中間鍵值對的位置會被通報給master,master負責將信息轉發給Reduce worker。 2.master通知分配了Reduce作業的worker它負責的分區在什麽位置(肯定不止一個地方,每個Map作業產生的中間鍵值對都可能映射到所有R個不同分區),當Reduce worker把所有它負責的中間鍵值對都讀過來後,先對它們進行排序,使得相同鍵的鍵值對聚集在一起。因為不同的鍵可能會映射到同一個分區也就是同一個Reduce作業(誰讓分區少呢),所以排序是必須的(將所有Map進程產生的已經整合過的溢寫文件提取相應的分區,並排序整合--第三次排序)。 技術分享
(Shuffling-->Reducing-->Output(Hdfs)) reduce工作流程: reduce worker遍歷排序後的中間鍵值對(K2,V2),對於每個唯一的鍵,都將鍵與關聯的值傳遞給reduce函數,reduce函數產生的輸出(K3,V3)會添加到這個分區的輸出文件中。 FileOutputFormat --MapReduce使用OutputFormat類將數據輸出存入文件中,其基本與InputFormat類似。輸出沒有分塊,每個Reducer將它的輸出直接寫到自己的文件中。輸出文件存在於一 個共有目錄當中,一般被命名為part-nnnnn,nnnnn是Reducer的分區ID。 FileInputFormat --繼承InputFormat抽象類實現List和CreateRecordReader方法 1.FileInputFormat實現了InputFormat的getSplits()方法,將輸入的文件劃分為InputSplit(輸入塊)。 2.protected List listStatus(JobContext job ) throws IOException遞歸獲取輸入數據中的文件,其中的job包含前面的那幾個參數,是系統的配置Configuration 3.切分之後有RecordReader來讀取,FileInputFormat沒有對應的RecordReader,他的兩個子類:SequenceFileInputFormat二進制形式存放的鍵/值文件TextInputFormat是文本文件 的處理,他們的createRecordReader()分別返回SequenceFileRecordReader,LineRecordReader實例 InputSplit:包含一個以字節為單位的長度和一組儲存位置。一個分片並不包含數據本身,而是指向數據的引用。存儲位置供MapReduce系統使用以便將map任務盡量放在分片數據附近,而長度用來排序分片,以便優先處理最大的分片,從而最小化作業運行時間。 MapReduce程序: 1.獲取配置信息 Configuration 2.新建Job 3.編寫Mapper類和Reduce類 4.Job設置運行時的Mapper和Reduce類 5.Job設置輸入輸出文件 6.Jop設置輸出參數類型 7.Job進程等待 8.Job進程結束

BigData 學習記錄(五)