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

下載本文檔

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

文檔簡介

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

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

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

count指的是MapReduce任務的任務名稱。第3部分(代碼第77~79行)設置Mapper、Combiner、Reducer。讀懂官方提供的WordCount源碼第4部分(代碼第80~81行)設置輸出鍵值對格式。第5部分(代碼第82~86行)設置輸入與輸出路徑。若有必要,則可以增加對文件輸入與輸出格式的設置。最后部分(代碼第87行)提交任務等待運行。在MapReduce程序中,主要的代碼實現(xiàn)包括了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任務啟動后首先執(zhí)行setup()方法,該方法主要用于初始化工作。map()方法針對每條輸入鍵值對執(zhí)行方法中定義的邏輯處理,并按規(guī)定的鍵值對格式輸出。在所有鍵值對處理完成后,再調用cleanup()方法,cleanup方法主要用于關閉資源等操作。map()方法的代碼實現(xiàn)要與實際業(yè)務邏輯掛鉤,由開發(fā)者自行編寫。讀懂官方提供的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()方法也是在最開始執(zhí)行一次。cleanup()方法在最后執(zhí)行一次。核心部分是reduce()方法的實現(xiàn),reduce()方法需要實現(xiàn)實際業(yè)務相關的處理邏輯。進行MapReduce編程時,開發(fā)者主要實現(xiàn)Mapper與Reducer這兩個模塊,其中包括定義輸入/輸出的鍵值對格式、編寫map()與reduce()方法中定義的處理邏輯等。讀懂官方提供的WordCount源碼1通過源碼初識MapReduce編程目錄在IDEA中搭建MapReduce開發(fā)環(huán)境2統(tǒng)計網(wǎng)站的訪問次數(shù)3將網(wǎng)站每日訪問量根據(jù)訪問次數(shù)進行升序排序4網(wǎng)站的訪問次數(shù)分布情況對網(wǎng)站運營商而言是十分重要的指標,網(wǎng)站運營商可以根據(jù)實際的訪問情況總結用戶可能感興趣的內容,調整網(wǎng)站的版塊和內容設計。本小節(jié)的任務是通過MapReduce編程實現(xiàn)網(wǎng)站每日的訪問量統(tǒng)計。編寫MapReduce程序首先需要考慮Map階段和Reduce階段各自的處理邏輯。再根據(jù)處理邏輯編寫Mapper模塊與Reducer模塊的代碼。最后將完整代碼編譯打包后提交至Hadoop集群運行。任務描述根據(jù)Map階段的處理邏輯編寫Mapper模塊的代碼,Mapper模塊中主要實現(xiàn)的部分為map()方法。map()方法的主要任務是讀取用戶訪問文件中的數(shù)據(jù),輸出所有訪問日期與初始次數(shù)的鍵值對。訪問日期是數(shù)據(jù)文件中的第5列,因此先定義一個數(shù)組,再提取第5個元素的前9個字符,與初始次數(shù)1一起構成輸出鍵值對,即<訪問日期,1>。分析思路與處理邏輯2.Mapper模塊的邏輯實現(xiàn)根據(jù)Reduce階段的處理邏輯編寫Reducer模塊的代碼,Reducer模塊中主要實現(xiàn)的部分為reduce()方法。reduce()方法的主要任務就是讀取Map階段的輸出鍵值對,即<訪問日期,1>。Reduce階段的處理邏輯與官方示例WordCount中Reduce階段的處理邏輯完全相同,因此Reducer類的主要代碼也相同,在此不再詳述。分析思路與處理邏輯3.Reducer模塊的邏輯實現(xiàn)編寫核心模塊代碼編寫Mapper模塊讀取日志數(shù)據(jù)并按“,”分隔符分割數(shù)據(jù),以日期作為鍵,以1作為值。編寫Reducer模塊讀取Mapper模塊的輸出鍵值對,并將相同鍵的值進行累加,即可統(tǒng)計出網(wǎng)站每日的訪問次數(shù)。編寫Driver模塊設置Hadoop集群的初始化配置。第一部分,根據(jù)網(wǎng)站每日訪問次數(shù)的統(tǒng)計需求,分析Map階段和Reduce階段的處理邏輯,編寫Mapper模塊、Reducer模塊和Driver模塊的代碼。定義一個dailyAccessCount類,封裝Mapper模塊、Reducer模塊和Driver模塊的實現(xiàn)。任務實現(xiàn)第二部分,編譯生成JAR包文件,并提交至Hadoop集群執(zhí)行,操作步驟如下?!?/p>

編譯生成dailyAccessCount.jar?!ど蟼鱠ailyAccessCount.jar至master節(jié)點?!ぴ趍aster節(jié)點中,通過hadoop

jar命令提交MapReduce任務。·在HDFS中的服務監(jiān)控端口中,進入HDFS的/Tipdm/Hadoop/MapReduce/Result/dailyAccessCount目錄下查看輸出結果。結果包含兩列數(shù)據(jù),第一列是訪問日期,已自動按日期的值進行排序;第二列是每個日期對應的總訪問次數(shù)。任務實現(xiàn)1通過源碼初識MapReduce編程目錄在IDEA中搭建MapReduce開發(fā)環(huán)境2統(tǒng)計網(wǎng)站的訪問次數(shù)3將網(wǎng)站每日訪問量根據(jù)訪問次數(shù)進行升序排序4在上一小節(jié)中雖然已實現(xiàn)了網(wǎng)站每日訪問次數(shù)的統(tǒng)計,并將輸出結果保存至HDFS,但是網(wǎng)站每日的訪問次數(shù)是根據(jù)日期進行升序排序的,不能直觀地看出訪問次數(shù)大致的分布情況。本小節(jié)的任務如下。讀取/Tipdm/Hadoop/MapReduce/Result/dailyAccessCount目錄中的輸出結果。按照訪問次數(shù)進行升序排序。將排序后的結果存儲至HDFS。任務描述首先,對需要處理的數(shù)據(jù)文件進行分析,網(wǎng)站每日訪問次數(shù)的數(shù)據(jù)有兩個字段,訪問日期與訪問次數(shù)。現(xiàn)需要根據(jù)第2列即訪問次數(shù)對文件中的數(shù)據(jù)進行升序排序。分析思路與處理邏輯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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論