Hadoop大數據開發基礎(第2版)第4章 MapReduce編程入門_第1頁
Hadoop大數據開發基礎(第2版)第4章 MapReduce編程入門_第2頁
Hadoop大數據開發基礎(第2版)第4章 MapReduce編程入門_第3頁
Hadoop大數據開發基礎(第2版)第4章 MapReduce編程入門_第4頁
Hadoop大數據開發基礎(第2版)第4章 MapReduce編程入門_第5頁
已閱讀5頁,還剩51頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MapReduce編程入門隨著互聯網的發展,加入互聯網的用戶越來越多,互聯網的用戶規模已不容小視?;ヂ摼W市場潛力巨大,各大網站的運營商都在采取積極措施,分析用戶的特征,根據不同的客戶群向其提供差異化的服務,進而達到精準營銷的目的。隨著一些網站用戶的增加,企業越來越難把握用戶的需求。為了能更好地滿足用戶需求,應依據用戶的歷史瀏覽記錄研究用戶的興趣偏好,分析用戶的需求和行為,發現用戶的興趣點,從而將用戶分成不同的群體。企業再根據不同的群體提供差異化的服務,改善用戶體驗。某競賽網站每年都會開展數據挖掘的競賽,在競賽期間網站會有大量的用戶訪問,當用戶訪問網站頁面時,系統會記錄用戶訪問網站時的日志數據,共有6個數據字段。任務背景字段名稱說明Id序號Content_id網頁IDUserid用戶IDSessionid緩存生成IDDate_time訪問時間

Page_path網址網站運營方的工作重點之一,是向目標用戶提供更優質的服務。要提高服務品質,必須根據服務對象的特點設計有針對性的服務方案。因此對用戶訪問網站的日志進行數據分析,是一項非常重要的工作任務。網站的訪問次數分布情況對網站運營商而言也是非常重要的指標之一,網站運營商從數據庫中抽取了網站2020年5月至2021年2月用戶登錄網站的行為日志數據,針對用戶訪問網站的日志數據,網站運營方提出了兩個統計需求。根據訪問時間統計網站每日的總訪問次數,按訪問日期輸出結果。對統計需求(1)的結果再進行處理,將結果按訪問次數進行升序排序。任務背景通常,網站的用戶訪問日志文件的數據量非常龐大,而且文件中的記錄數也較多,文件大多數為文本格式。為了保證較高的處理效率與靈活性,將選用MapReduce編程進行數據處理。本章將詳細講解使用MapReduce編程解決實際問題。首先介紹MapReduce開發環境的搭建過程。接著介紹MapReduce編程原理與執行流程。結合Hadoop官方的示例源碼WordCount介紹MapReduce編程的基本思路與處理邏輯。最后通過編寫MapReduce程序實現競賽網站每日訪問次數的統計,并對統計的結果根據訪問次數進行升序排序。任務背景1通過源碼初識MapReduce編程目錄在IDEA中搭建MapReduce開發環境2統計網站的訪問次數3網站每日訪問量按訪問次數升序排序4Hadoop框架是基于Java語言開發的,而IntelliJIDEA是一個常用的Java集成開發工具,因此通常選用IntelliJIDEA作為MapReduce的編程工具。為了能夠成功地進行MapReduce編程,本小節的任務如下。在本機系統(通常是Windows系統)安裝Java。安裝IntelliJIDEA工具。在IntelliJIDEA中創建一個MapReduce工程,并配置MapReduce集成環境。任務描述JDK是Java語言的軟件開發工具包,主要用于移動設備、嵌入式設備上的Java應用程序。JDK是整個Java開發的核心,包含了Java的運行環境、Java工具和Java基礎的類庫。本書后續章節的Hadoop開發是基于Java語言的,因此需要在Windows下安裝JDK,本書使用的JDK版本為JDK1.8,具體安裝步驟如下。雙擊JDK安裝包jdk-8u281-windows-x64.exe,進入“JavaSE開發工具包”安裝向導對話框,單擊“下一步”按鈕進入安裝。在Windows下安裝Java單擊“更改”按鈕,選擇JDK的安裝目錄,用戶可以根據本機系統的磁盤空間自定義安裝目錄,單擊“下一步”按鈕,等待JDK安裝完成。在Windows下安裝Java安裝JDK后,系統將彈出一個提示對話框,,需選擇JRE的安裝位置。單擊“更改”按鈕,用戶可以根據本機系統的磁盤空間自定義JRE的安裝目錄。需要注意,JDK和JRE的安裝目錄最好在同一個文件夾下,如均安裝在“C:\ProgramFiles\java\”目錄下。單擊“下一步”按鈕進行JRE的安裝。JRE安裝完成后單擊“關閉”按鈕即可完成JDK的安裝。在Windows下安裝Java安裝完Java后,需要在Windows系統配置環境變量,只有配置了環境變量,Java編譯環境才可以正常使用。在Windows系統配置環境變量的操作步驟如下。右鍵單擊“此電腦”桌面快捷方式,選擇“屬性”選項,在出現的系統設置窗口中選擇“高級系統設置”選項,進入到“系統屬性”對話框,單擊“環境變量”按鈕,彈出“環境變量”對話框。在Windows下安裝Java單擊“系統變量”組中的“新建”按鈕,新建一個變量,變量名為“JAVA_HOME”,變量的值為JDK實際的安裝目錄。在Windows下安裝Java在“環境變量”對話框中,選擇“系統變量”組中的“Path”變量,并單擊“編輯”按鈕,在彈出的“編輯環境變量”對話框中,單擊右側的“新建”按鈕,輸入“%JAVA_HOME%\bin”的值,再次單擊“新建”按鈕,輸入“%JAVA_HOME%\jre\bin”的值。最后單擊“確定”按鈕完成Path變量編輯,返回“環境變量”對話框。在Windows下安裝Java在“環境變量”對話框中,單擊“系統變量”組中的“新建”按鈕,新建一個變量,輸入變量名“ClassPath”,輸入變量值“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”,單擊“確定”按鈕完成變量設置。測試環境變量是否配置成功。在個人計算機的開始菜單的搜索文本框中搜索“cmd”關鍵字,查詢并打開cmd命令提示符交互式界面,輸入“java-version”目錄,若出現下圖所示的信息,則說明安裝配置成功。在Windows下安裝Java在IDEA官網中下載IntelliJIDEA的安裝包,安裝包名稱為ideaIC-2018.3.6.exe(Community版),Community版即社區版,是免費開源的,讀者也可以自行購買發行版。雙擊下載好的IDEA安裝包,在彈出的安裝向導界面中單擊“Next”按鈕,并設置IDEA的安裝目錄,用戶可根據本機系統的磁盤空間自定義IDEA的安裝目錄,并單擊“Next”按鈕。單擊“Finish”按鈕完成IDEA的安裝。下載與安裝IntelliJIDEA1.下載與安裝IDEA雙擊桌面生成的IDEA工具圖標,或從個人計算機的開始菜單中,依次選擇“JetBrains”→“IntelliJIDEACommunityEdition2018.3.6”選項,運行IntelliJIDEA。啟動過程中將詢問是否導入以前的設定,選擇“Donotimportsettings”單選按鈕,表示不導入,并單擊“OK”按鈕進入下一步。下載與安裝IntelliJIDEA2.啟動IntelliJ

IDEA進入下圖所示的界面,選擇IDEA設計界面的主題,可以選擇白色或黑色背景??紤]代碼和結果展示的清晰度,單擊“Light”單選按鈕,并單擊界面左下角的“SkipRemainingandSetDefaults”按鈕,跳過其他設置并采用默認設置。設置完成后,即可進入IDEA的運行界面。下載與安裝IntelliJIDEA安裝好IntelliJIDEA開發工具后,即可在IDEA中創建MapReduce工程。在進入IDEA后,單擊“CreateNewProfile”選項,彈出“NewProject”對話框,在左側列表欄中選擇“Maven”選項,并單擊界面右上方的“New…”按鈕,在彈出的對話框中選擇JDK的安裝目錄,單擊“OK”按鈕后,再單擊“Next”按鈕。新建MapReduce工程進入左圖所示的對話框,“GroupId”是項目組織唯一的標識符,實際對應JAVA的包的結構,設置為“”;ArtifactId是項目的唯一的標識符,實際對應項目的名稱,設置為“Hadoop”;“Version”是項目的版本號,設置為“1.0-SNAPSHOT”,其中1.0是版本號,SNAPSHOT代表不穩定、尚處于開發中的版本。單擊“Next”按鈕后進入頭禿所示的對話框,填寫工程的名稱并選擇工程保存的位置,單擊“Finish”按鈕完成創建。新建MapReduce工程MapReduce工程創建完成后,在IDEA的主界面中可以查看該工程的目錄結構。新建MapReduce工程雖然創建了MapReduce工程,但是該工程并不能運行MapReduce程序,因為沒有配置MapReduce環境,所以程序找不到Hadoop相關的JAR包。因此,在IDEA創建工程后,需要配置MapReduce環境,配置步驟如下。在Hadoop工程界面中,選擇菜單欄中的“File”→“ProjectStructure”命令,也可以直接使用“Ctrl+Alt+Shift+S”快捷鍵,打開“ProjectStructure”的對話框。配置MapReduce環境單擊“ProjectStructure”的對話框左側的“Libraries”選項,再右側單擊“+”選項,在彈出的選項欄中單擊“Java”選項。在彈出的對話框,選擇要添加的jar包,這里需要將Hadoop安裝目錄的/share/hadoop目錄下的全部JAR包導入,單擊“OK”按鈕進入下一步。全部JAR包導入后,單擊“Apply”按鈕,再單擊“OK”按鈕,即可完成MapReduce環境配置。配置MapReduce環境Hadoop安裝包需要在本地先解壓1通過源碼初識MapReduce編程目錄在IDEA中搭建MapReduce開發環境2統計網站的訪問次數3將網站每日訪問量根據訪問次數進行升序排序4進行MapReduce編程前,需要先掌握MapReduce的基本原理,對MapReduce的核心模塊Mapper與Reducer的執行流程有一定的認識。Hadoop官方提供了一些示例源碼,十分適合初學者學習。本小節的任務如下。先理解MapReduce的工作原理、核心組成和MapReduce的執行流程。再通過Hadoop官方示例源碼WordCount(詞頻統計)掌握MapReduce的編程方法。任務描述MapReduce在名稱上即體現出了它的核心原理,即由Map和Reduce兩個階段組成。MapReduce通常也被簡稱為MR。了解MapReduce工作原理及核心組成Map“映射”,在Map階段進行的一系列數據處理任務被稱為Mapper模塊。Reduce“歸約”,在Reduce階段進行的一系列數據處理任務被稱為Reducer模塊。用比喻的方式解讀MapReduce的核心組成,MapReduce可以被視為一個專業處理大數據的工程隊,主要成員如下。了解MapReduce工作原理及核心組成Mapper·映射器Mapper助理InputFormat·輸入文件讀取器Shuffle·運輸隊Shuffle助理Sorter·排序器Reducer·歸約器Reducer助理OutputFormat·輸出結果寫入器一個基本完整的MapReduce程序了解MapReduce工作原理及核心組成了解MapReduce工作原理及核心組成數據分片數據映射MapReduce通過數據分片的方式切分數據,將數據分發給多個單元進行處理,這也是分布式計算的第一步。在數據分片完成后,由Mapper助理InputFormat從文件的輸入目錄中讀取數據,再由Mapper中的map()方法對文件的數據進行解析,并重新組織成新的格式,Mapper會將數據轉換為<鍵,值>的鍵值對形式,再進行處理。最后Mapper將處理結果輸出,等待Shuffle運輸隊取走結果。了解MapReduce工作原理及核心組成數據歸約Reducer接收已排序的結果后,由Reducer中的reduce()方法對結果進行匯總與計算,得到最終結果。最后由Reducer助理OutputFormat將結果輸出至指定位置。數據輸出Reduce階段處理完數據后即可將數據文件輸出到HDFS,輸出的存儲數據文件個數和Reduce的個數一致。數據混洗由Shuffle運輸隊將獲取的結果按照相同的鍵(Key)進行匯集,再將結果發送至Shuffle助理Sorter,由Sorter負責對匯集的結果進行排序,并且Sorter是根據鍵(Key)進行排序的,再將排序后的結果提交給Reducer。了解MR實現詞頻統計的執行流程理解MapReduce的基本原理和核心組成后,以詞頻統計為例,進一步了解MapReduce各階段的執行流程。單詞的輸入與詞頻統計輸出內容輸入輸出HelloWorldOurWorldHelloBigDataRealBigDataHelloHadoopGreatHadoopHadoopMapReduceBigData 2Great 1Hadoop 3Hello 3MapReduce 1Our 1Real 1World 2鍵值對(Key-ValuePair)是一種數據格式,每個鍵都有一個對應的值。輸入文件的每一行記錄經過映射處理后輸出為若干組鍵值對。Map階段生成鍵值對后,提交中間輸出結果進入Reduce階段。了解MR實現詞頻統計的執行流程1.Map階段的處理過程在Map階段輸出與Reduce階段輸入之間有一個Shuffle過程。Shuffle過程也被稱為數據混洗過程,作用是將鍵相同的鍵值對進行匯集,并將鍵相同的值存入同一列表中。了解MR實現詞頻統計的執行流程2.Reduce階段的處理過程本小節的任務是以Hadoop官方提供的示例源碼中的WordCount程序為例,進行代碼級別的分析和說明。首先獲取WordCount的源代碼。在Hadoop3.1.4的安裝目錄中,進入\share\hadoop\mapreduce\sources目錄,該目錄下面有一個hadoop-mapreduce-examples-3.1.4-sources.jar文件,解壓該縮文件。在org/apache/hadoop/examples子目錄中即可找到一個WordCount.java的文件,即為WordCount程序的源代碼。讀懂官方提供的WordCount源碼Driver程序主要指的是main方法,即MapReduce程序的入口,在main方法里面進行MapReduce程序的一些初始化設置,并提交任務,等待程序運行完成。讀懂官方提供的WordCount源碼1.應用程序Driver模塊讀懂官方提供的WordCount源碼第1部分(代碼第69行)初始化相關Hadoop配置,通過new關鍵字創建一個實例即可。第2部分(代碼第75行)新建Job并設置主類。Job實例化需要兩個參數,第一個參數conf是Configuration的實例對象,第二個參數word

count指的是MapReduce任務的任務名稱。第3部分(代碼第77~79行)設置Mapper、Combiner、Reducer。讀懂官方提供的WordCount源碼第4部分(代碼第80~81行)設置輸出鍵值對格式。第5部分(代碼第82~86行)設置輸入與輸出路徑。若有必要,則可以增加對文件輸入與輸出格式的設置。最后部分(代碼第87行)提交任務等待運行。在MapReduce程序中,主要的代碼實現包括了Mapper模塊中的map()方法以及Reducer模塊中的reduce()方法。在WordCount源碼中,Mapper模塊對應源碼中的TokenizerMapper類。自定義TokenizerMapper(代碼第36~37行),需要繼承Mapper父類,同時需要設置輸入/輸出鍵值對格式,其中輸入鍵值對格式要和輸入格式設置的類需要讀取生成的鍵值對格式匹配

,而輸出鍵值對格式需要和Driver中設置的Mapper輸出的鍵值對格式匹配。讀懂官方提供的WordCount源碼2.Mapper模塊Mapper類共有3個方法,分別是setup()、map()、cleanup()。若TokenizerMapper類要使用Mapper類的方法,則需要重寫Mapper類里面的方法。Mapper任務啟動后首先執行setup()方法,該方法主要用于初始化工作。map()方法針對每條輸入鍵值對執行方法中定義的邏輯處理,并按規定的鍵值對格式輸出。在所有鍵值對處理完成后,再調用cleanup()方法,cleanup方法主要用于關閉資源等操作。map()方法的代碼實現要與實際業務邏輯掛鉤,由開發者自行編寫。讀懂官方提供的WordCount源碼在WordCount源碼中,Reducer模塊對應源碼中的IntSumReducer類。自定義IntSumReducer類(代碼第52~53行),需要繼承Reducer父類,和Mapper一樣,需要設置輸入/輸出鍵值對格式。其中輸入鍵值對格式需要和Mapper的輸出鍵值對格式保持一致,輸出鍵值對格式需要和Driver中設置的輸出鍵值對格式保持一致。讀懂官方提供的WordCount源碼3.Reduce模塊Reducer也有3個方法:setup()、cleanup()、reduce()。且IntSumReducer類如果需要使用Reducer類中的方法,那么所使用的Reducer類中的方法需要重寫。setup()、cleanup()方法和Mapper的同名方法功能一致。setup()方法也是在最開始執行一次。cleanup()方法在最后執行一次。核心部分是reduce()方法的實現,reduce()方法需要實現實際業務相關的處理邏輯。進行MapReduce編程時,開發者主要實現Mapper與Reducer這兩個模塊,其中包括定義輸入/輸出的鍵值對格式、編寫map()與reduce()方法中定義的處理邏輯等。讀懂官方提供的WordCount源碼1通過源碼初識MapReduce編程目錄在IDEA中搭建MapReduce開發環境2統計網站的訪問次數3將網站每日訪問量根據訪問次數進行升序排序4網站的訪問次數分布情況對網站運營商而言是十分重要的指標,網站運營商可以根據實際的訪問情況總結用戶可能感興趣的內容,調整網站的版塊和內容設計。本小節的任務是通過MapReduce編程實現網站每日的訪問量統計。編寫MapReduce程序首先需要考慮Map階段和Reduce階段各自的處理邏輯。再根據處理邏輯編寫Mapper模塊與Reducer模塊的代碼。最后將完整代碼編譯打包后提交至Hadoop集群運行。任務描述根據Map階段的處理邏輯編寫Mapper模塊的代碼,Mapper模塊中主要實現的部分為map()方法。map()方法的主要任務是讀取用戶訪問文件中的數據,輸出所有訪問日期與初始次數的鍵值對。訪問日期是數據文件中的第5列,因此先定義一個數組,再提取第5個元素的前9個字符,與初始次數1一起構成輸出鍵值對,即<訪問日期,1>。分析思路與處理邏輯2.Mapper模塊的邏輯實現根據Reduce階段的處理邏輯編寫Reducer模塊的代碼,Reducer模塊中主要實現的部分為reduce()方法。reduce()方法的主要任務就是讀取Map階段的輸出鍵值對,即<訪問日期,1>。Reduce階段的處理邏輯與官方示例WordCount中Reduce階段的處理邏輯完全相同,因此Reducer類的主要代碼也相同,在此不再詳述。分析思路與處理邏輯3.Reducer模塊的邏輯實現編寫核心模塊代碼編寫Mapper模塊讀取日志數據并按“,”分隔符分割數據,以日期作為鍵,以1作為值。編寫Reducer模塊讀取Mapper模塊的輸出鍵值對,并將相同鍵的值進行累加,即可統計出網站每日的訪問次數。編寫Driver模塊設置Hadoop集群的初始化配置。第一部分,根據網站每日訪問次數的統計需求,分析Map階段和Reduce階段的處理邏輯,編寫Mapper模塊、Reducer模塊和Driver模塊的代碼。定義一個dailyAccessCount類,封裝Mapper模塊、Reducer模塊和Driver模塊的實現。任務實現第二部分,編譯生成JAR包文件,并提交至Hadoop集群執行,操作步驟如下?!?/p>

編譯生成dailyAccessCount.jar。·上傳dailyAccessCount.jar至master節點?!ぴ趍aster節點中,通過hadoop

jar命令提交MapReduce任務。·在HDFS中的服務監控端口中,進入HDFS的/Tipdm/Hadoop/MapReduce/Result/dailyAccessCount目錄下查看輸出結果。結果包含兩列數據,第一列是訪問日期,已自動按日期的值進行排序;第二列是每個日期對應的總訪問次數。任務實現1通過源碼初識MapReduce編程目錄在IDEA中搭建MapReduce開發環境2統計網站的訪問次數3將網站每日訪問量根據訪問次數進行升序排序4在上一小節中雖然已實現了網站每日訪問次數的統計,并將輸出結果保存至HDFS,但是網站每日的訪問次數是根據日期進行升序排序的,不能直觀地看出訪問次數大致的分布情況。本小節的任務如下。讀取/Tipdm/Hadoop/MapReduce/Result/dailyAccessCount目錄中的輸出結果。按照訪問次數進行升序排序。將排序后的結果存儲至HDFS。任務描述首先,對需要處理的數據文件進行分析,網站每日訪問次數的數據有兩個字段,訪問日期與訪問次數?,F需要根據第2列即訪問次數對文件中的數據進行升序排序。分析思路與處理邏輯2020/10/1 180162020/10/2 186542020/10/3 26692020/10/4 12122020/10/5 1426

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論