




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Hadoop大數據項目開發——走進大數據世界引言2020年我國決戰脫貧攻堅取得決定性勝利,在脫貧攻堅過程中,大數據技術得到廣泛應用,為盡早實現精準脫貧目標提供了可行路徑。目錄content02大數據的特點01大數據的概念03大數據的應用領域1.大數據概念大數據摩爾定律:數據每年都在以50%的速度增長,人類在最近兩年產生的數據量相當于之前產生的全部數據量。中商產業研究院預測2022年全球大數據儲量已達61.2ZB。1.大數據概念ZB是個什么概念呢?1TB=1024GB如果把1ZB的文件往1TB的硬盤里裝,通過換算,大概需要10億塊1TB的硬盤,硬盤連接起來足夠繞地球兩圈半。ZB是個什么概念呢?1TB=1024GB1PB=1024TB1PB=1024TB1EB=1024PB1ZB=1024EB1.大數據概念知名咨詢公司麥肯錫全球研究院給出的大數據定義是:一種規模大到在獲取、存儲、管理、分析方面大大超出了傳統數據庫軟件能力范圍的數據集合,即大數據。這個數據集合,已超過了以往的常規數據集合。定義大數據國務院在2015年印發的《促進大數據發展行動綱要》中指出,大數據是以容量大、類型多、存取速度快、應用價值高為主要特征的數據集合,正快速發展為對數量巨大、來源分散、格式多樣的數據進行采集、存儲和關聯分析,從中發現新知識、創造新價值、提升新能力的新一代信息技術和服務業態。1.大數據概念定義大數據2.大數據的4V特點數據量大(Volume)數據類型繁多(Variety)處理速度快(Velocity)價值密度低(Value)1V2V4V3V2.大數據的特點數據量大(Volume):隨著物聯網、電子商務、社會化網絡的快速發展,全球大數據儲量迅猛增長,遠遠超出人類的想象空間。裝在1TB的硬盤里,硬盤重約3000萬噸,拉走這些硬盤需要50萬節火車車廂。裝在1TB的硬盤里,大概需要62億塊,足夠繞地球150多圈。2022年的大數據儲量61.2ZB2.大數據的特點數據類型繁多(Variety):大數據的結構類型豐富多樣,由結構化和非結構化數據組成,結構化數據占10%左右,存儲在數據庫中;非結構化數據占90%左右,主要包括郵件、音頻、視頻、位置信息、微博等。2.大數據的特點這是大數據區分于傳統數據挖掘最顯著的特征。從數據的生成到消耗,時間窗口非常小,可用于生成決策的時間非常少。“1秒定律”或者秒級定律:就是說對處理速度有要求,一般要在秒級時間范圍內給出分析結果,時間太長就失去價值了。在100萬張DVD光盤中查詢數據只需要1~2秒的時間。Velocity處理速度快2.大數據的特點99%1%價值密度低Value信息感知無處不在,信息海量,但價值密度較低,如何通過強大的機器算法更迅速地完成數據的價值“提純”,是大數據時代亟待解決的難題。例如:實時攝像頭的監控數據,有用的信息往往只有幾秒時間。3.大數據應用領域大數據在環境行業中的應用大數據在智慧城市中的應用123564大數據在金融領域中的應用大數據在醫療行業中的應用大數據在環境行業中的應用大數據在農業中的應用大數據在農產品溯源中的應用3.大數據應用領域智慧城市金融醫療遍布于智慧城市中的交通、醫療、生活等城市建設中的各個方面,使得城市的管理已經從“城市經驗治理”向“城市數字治理”方向發展。金融交易過程中,每一天都會產生大量的交易記錄、業績報表、研究報告、信貸分析報告等,金融業高度依賴于大數據技術,大數據技術為金融業提供了決策支持。構建大數據平臺來收集不同病例和治療方案,以及病人的基本特征,建立針對疾病特點的數據庫,幫助醫生進行疾病診斷。3.大數據應用領域環境農業農產品借助于大數據技術,天氣預報的準確性和實效性大大提高,同時對于重大自然災害預報更加準確,有利于幫助人們提高應對自然災害的能力。利用大數據技術可以管理地塊和規劃作物種植適宜區,預測氣候、自然災害、病蟲害、土壤等環境因素,監測作物長勢,指導灌溉和施肥,預估產量。利用大數據技術通過向上追蹤可以查詢到產品的源頭信息;通過向下追蹤可以查詢到產品的流通信息,包括產品的銷售信息、物流信息以及售后情況等。本節小結大數據技術已經滲透到了人類生活中的各個領域。概念特點應用領域Hadoop大數據項目開發——Hadoop簡介目錄content0201Hadoop簡介Hadoop特點Hadoop簡介Hadoop是一個Apache軟件基金會旗下的開源軟件Hadoop簡介Hadoop具有旺盛的生命力免費極大的降低使用的復雜旺盛的生命力它對普通用戶屏蔽了技術底層實現的細節,只要按照它提供的接口做一些簡單的操作,后臺所有的工作全部有它整個系統技術自己去實現。Hadoop簡介Hadoop是用Java開發,但支持多種編程語言開發Hadoop是使用Java語言開發,但不是只能用Java語言去寫Hadoop的應用,在Hadoop平臺上開發它的應用可以使用任意語言。Hadoop簡介--兩大核心大數據項目的集合體,一整套解決方案的統稱分布式并行編程框架MapReduce海量數據的分布式計算分布式文件系統HDFS:海量數據的分布式存儲Hadoop簡介--解決兩大關鍵問題HDFS:海量數據的分布式存儲解決怎么用成百上千乃至上萬臺機器存儲PB乃至EB規模的數據。Hadoop解決了大數據時代最關鍵的兩個難題:MapReduce:海量數據的分布式處理解決上千臺服務器同時完成一個任務的分布式并行處理。Hadoop在各個領域得到了非常廣泛的應用,滿足了許多企業實際的需求,也成為各大知名公司的寵兒。。Hadoop簡介--應用國內點擊添加標題內容添加關鍵字Hadoop起源Hadoop平臺的兩大核心組件均來自于谷歌2008年1月,Hadoop正式成為Apache頂級項目;2008年4月,Hadoop用910個節點構成集群,對1TB的數據進行排序,僅用了209秒,一戰成名,Hadoop由此名聲大震。Hadoop最早是為了構建一個大型全網搜索引擎。谷歌2004年發布了并行編程框架MapReduce。2005年,Hadoop平臺把它作為自己的MapReduce的開源實現。谷歌2003年發布了分布式文件系統GFS,2004年,Hadoop把GFS應用到自己的平臺,即HDFS是GFS的開源實現。Hadoop簡介Hadoop的名字不是單詞的首字母縮寫Hadoop不是版本號最高就代表最新這是因為對于任何一個Apache開源項目,當需要開發某個特性時,會專門從主代碼線中延伸出一個分支。由于多個分支可能會同時進行研發,因此版本高的分支有時候會先于版本低的分支發布。Hadoop項目負責人曾經這樣描述過這個名字:“這是我的孩子給他的黃色毛絨小象玩具起得名字,簡短易于讀寫,沒有具體意義且沒有被別人使用過,這就是我對于項目命名的原則”。Hadoop特點低成本高效性高容錯性高可靠性支持多種編程語言高擴展性Hadoop特點高可靠性Hadoop采用冗余副本機制;當部分機器發生故障時,其他機器也可以保證集群正常對外提供服務。集群中的一臺機器有問題,其余機器繼續提供服務Hadoop特點高效性Hadoop以并行的方式工作,非常高效的處理海量數據。成百上千臺機器一起計算Hadoop特點高擴展性Hadoop實現了線性擴展,可以從單個服務器擴展到數千臺計算機,并且每臺計算機都提供了數據存儲功能和計算功能。Hadoop特點高容錯性Hadoop能夠自動保存數據的多個副本,并且能夠自動將失敗的任務重新分配,當其中一個副本出現故障時,不影響集群的整體運行。Hadoop特點低成本Hadoop使用廉價計算機搭建集群,從而降低了硬件成本,普通用戶也可以使用自己的個人計算機搭建和運行Hadoop。個人計算機搭建大數據集群Hadoop特點123支持多種編程語言支持多種編程語言完成Hadoop平臺的應用程序開發。
具有很好的跨平臺特性;Hadoop是用Java語言開發的。本節小結Hadoop自誕生以來,改變了對數據存儲、處理和分析的過程,加速了大數據技術的快速發展,得到了非常廣泛的應用。Hadoop大數據項目開發——Hadoop生態系統目錄content02MapRedcue01HDFS03YARN04ZooKeeper05Hive07Sqoop06HBase08Kafka09FlumeHadoop生態系統簡介Hadoop生態系統圖HDFS:分布式文件系統成百上千臺服務器完成海量數據存儲和管理。可以運行在廉價的個人計算機集群上。HDFS負責整個分布式文件的存儲YARN:資源調度YARN負責資源的管理和調度例如內存,CPU,帶寬等需要YARN統一調度。海量數據在HDFS存儲后,需要進行相關的處理,但是處理之前,需要一個計算的框架去調度資源,底層那么多資源,需要YARN框架進行調度。MapReduce:分布式文件計算不是實時計算,是負責離線,批處理計算的。用戶只需實現Map和Reduce兩個函數就可以完成分布式計算任務。MapReduce解決海量數據的計算問題Hive:數據倉庫Hive是Hadoop的數據倉庫。用于離線分析用于企業的決策分析ZooKeeper:協調服務用于統一維護配置信息、域名,提供分布式同步、組服務等可以用來搭建高可用集群。Hive是分布式應用程序協調服務。HBase:非結構化數據庫面向列的分布式開源數據庫。隨機讀寫,支持實時應用。HBase是非關系型數據庫。HBase是Hadoop的非結構化數據庫。Flume:日志收集訪問阿里巴巴、淘寶時的數據流都是實時生成的,需要進行實時分析,必須有一套工具把它收集過來,Flume就是幫助進行日志收集的。Flume負責日志收集Sqoop:數據導入導出Sqoop專門用于把關系型數據庫中的相關產品導入到Hadoop平臺上的HDFS、HBASE、HIVE數據庫;反之,用Sqoop把Hadoop平臺上的HDFS、HBASE、HIVE中的數據導出到關系型數據庫中。Sqoop負責數據的導入導出Kafka:開源流處理平臺是一個開源流處理平臺,由Scala和Java編寫。是一種高吞吐量的分布式發布訂閱消息系統。它可以處理消費者在網站中的所有動作流數據。本節小結本節介紹了Hadoop生態系統中的主要組件,Hadoop經過多年的發展,整個生態系統不斷成熟和完善。Hadoop大數據項目開發——虛擬機安裝目錄content01虛擬機安裝VMware簡介虛擬機指通過軟件模擬具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統,在實體計算機中能夠完成的工作在虛擬機中基本都能夠實現。VMwareWorkstation是一款功能強大的桌面虛擬計算機軟件,提供用戶在單一的桌面上同時運行不同的操作系統,以及進行開發、測試、部署新的應用程序的最佳解決方案。新建虛擬機步驟1步驟2新建虛擬機步驟3步驟4新建虛擬機步驟5本章小結本節一起創建了虛擬機,相信大家對虛擬機創建已經有了初步的認識,為我們后續搭安裝CentOS7操作系統打下了堅實的基礎。Hadoop大數據項目開發——CentOS7操作系統安裝目錄content01CentOS7操作系統安裝安裝CentOS7操作系統步驟1步驟2安裝CentOS7操作系統步驟3設置時區界面設置鍵盤信息界面設置語言信息界面安裝CentOS7操作系統步驟4安裝資源界面軟件安裝選擇界面安裝CentOS7操作系統步驟5安裝位置界面選擇標準分區界面安裝CentOS7操作系統步驟6boot分區界面swap分區界面安裝CentOS7操作系統步驟7根分區界面安裝CentOS7操作系統步驟8手動分區界面安裝界面步驟9安裝CentOS7操作系統步驟8:安裝完成界面CentOS7登錄界面步驟9:本章小結本節一起創建了虛擬機,并在虛擬機上安裝了CentOS7,相信大家對CentOS7已經有了初步的認識,為我們后續搭建Hadoop分布式平臺打下了堅實的基礎。Hadoop大數據項目開發——虛擬機克隆目錄content01虛擬機克隆Hadoop集群搭建步驟—Hadoop安裝關閉要被克隆的虛擬機。步驟1:步驟2:Hadoop集群搭建步驟—Hadoop安裝步驟3:Hadoop集群搭建步驟—修改配置文件步驟4:步驟5:Hadoop集群搭建步驟—修改配置文件步驟6:步驟7:生成MAC地址后,需要重啟網絡服務,命令如下:systemctlrestartnetwork本章小結本節一起克隆了CentOS7操作系統,相信大家已經掌握了CentOS7操作系統的克隆,為我們后續搭建Hadoop分布式平臺打下了堅實的基礎。Hadoop大數據項目開發——虛擬機集群環境配置-修改IP地址目錄content01修改IP地址虛擬機集群環境配置-修改IP地址步驟1步驟2虛擬機集群環境配置-修改IP地址步驟3ifcfg-ens33修改前內容ifcfg-ens33修改后內容靜態IP地址網關子網掩碼,也可以寫成PREFIX=24DNS,與網關設置成一樣虛擬機集群環境配置-修改IP地址步驟4虛擬機集群環境配置-修改IP地址步驟5虛擬機集群環境配置-修改IP地址slave1節點中IP配置信息虛擬機集群環境配置-修改IP地址slave2節點中IP配置信息虛擬機集群環境配置-修改IP地址步驟6:slave2節點中IP配置信息虛擬機集群環境配置-修改IP地址虛擬機集群環境配置-修改IP地址虛擬機集群環境配置-修改IP地址本章小結本節一起修改了CentOS7操作系統的IP地址,為我們后續搭建Hadoop分布式平臺打下了堅實的基礎。Hadoop大數據項目開發——修改主機名和配置主機IP映射目錄content01修改主機名02配置主機映射修改主機名步驟1修改master節點主機名編輯/etc/hostname/etc/hostname原有內容/etc/hostname修改后內容重啟命令重啟之后修改主機名步驟2:修改slave1節點主機名編輯/etc/hostname/etc/hostname原有內容/etc/hostname修改后內容重啟命令重啟之后修改主機名步驟2:修改slave2節點主機名編輯/etc/hostname/etc/hostname原有內容/etc/hostname修改后內容重啟命令重啟之后配置主機IP映射步驟1編輯/etc/hostshosts文件中的內容配置主機IP映射步驟2復制hosts到另外兩個節點查看另外兩個節點hosts文件中內容配置主機IP映射步驟3重啟命令使用主機名驗證3個節點配置主機IP映射步驟4Windows系統下主機IP映射C:\Windows\System32\drivers\etc配置主機IP映射步驟5XShell使用主機名本章小結本節一起修改主機名和配置主機IP映射,為我們后續搭建Hadoop分布式平臺打下了堅實的基礎。Hadoop大數據項目開發——虛擬機集群環境配置-免密登錄目錄content01免密登錄免密登錄大數據集群的節點之間需要頻繁通信,但Linux系統在相互通信中需要驗證用戶身份。為了使Hadoop各節點之間能夠免密相互訪問,相互信任,無阻礙通信,可以為各節點配置SSH免密登錄。配置免密后,節點之間訪問時不需要輸密碼,方便快捷。虛擬機集群環境配置-免密登錄master節點生成秘鑰步驟1:直接按“回車鍵”即可.ssh目錄中的內容虛擬機集群環境配置-免密登錄slave1節點生成秘鑰步驟1:直接按“回車鍵”即可.ssh目錄中的內容虛擬機集群環境配置-免密登錄slave2節點生成秘鑰步驟1:直接按“回車鍵”即可.ssh目錄中的內容Hadoop集群搭建步驟—JDK安裝步驟2:重命名命令Hadoop集群搭建步驟—JDK安裝步驟2:重命名命令Hadoop集群搭建步驟—JDK安裝步驟2:重命名命令Hadoop集群搭建步驟—JDK安裝步驟4:免密登錄最終效果Hadoop集群搭建步驟—JDK安裝步驟6:查看JDK版本信息Hadoop集群搭建步驟—配置slave1和slave2拷貝JDK到slave1和slave2兩個節點拷貝profile文件到slave1和slave2兩個節點Hadoop集群搭建步驟—JDK安裝使profile文件生效,并查看slave1和slave2上JDK版本信息本章小結本節內容主要介紹了Linux操作系統下JDK的安裝,包括JDK的安裝和環境變量的配置。Hadoop大數據項目開發——JDK安裝目錄content01JDK安裝Hadoop集群搭建步驟—JDK安裝Xshell中的文件傳輸拖到文件傳輸窗口查看JDK安裝包步驟1:Hadoop集群搭建步驟—JDK安裝解壓JDK安裝包命令步驟2:步驟3:重命名命令Hadoop集群搭建步驟—JDK安裝JDK環境變量步驟4:編輯profile文件步驟5:使profile文件生效Hadoop集群搭建步驟—JDK安裝步驟6:查看JDK版本信息Hadoop集群搭建步驟—配置slave1和slave2拷貝JDK到slave1和slave2兩個節點拷貝profile文件到slave1和slave2兩個節點Hadoop集群搭建步驟—JDK安裝使profile文件生效,并查看slave1和slave2上JDK版本信息本章小結本節內容主要介紹了Linux操作系統下JDK的安裝,包括JDK的安裝和環境變量的配置。Hadoop大數據項目開發——Hadoop分布式集群搭建目錄content0201Hadoop集群部署方式Hadoop集群搭建Hadoop集群的部署方式單機模式:在該模式下,無須運行任何守護進程,所有的程序都在單個JVM上執行。偽分布式模式:Hadoop程序的守護進程運行在一臺主機節點上,通常使用偽分布式模式來調試Hadoop分布式程序的代碼。全分布式模式:Hadoop的守護進程分別運行在由多個主機搭建的集群上,不同節點擔任不同的角色,在實際工作應用開發中,通常使用該模式構建企業級Hadoop系統。Hadoop分布式集群部署規劃Hadoop分布式集群部署規劃如下所示:名稱節點在matser上,數據節點在master、slave1和slave2節點上,第二名稱節點與名稱節點要部署在不同的節點上。masterslave1slave2HDFSNameNodeDataNodeSecondaryNameNodeDataNodeDataNodeHadoop集群搭建步驟—Hadoop安裝Xshell中的文件傳輸拖到文件傳輸窗口查看Hadoop安裝包步驟1Hadoop集群搭建步驟—Hadoop安裝解壓Hadoop安裝包命令Hadoop系統環境變量步驟2步驟3重命名命令步驟4編輯profile文件步驟5使profile文件生效Hadoop安裝路徑Hadoop集群搭建步驟—Hadoop安裝步驟6查看Hadoop版本信息Hadoop目錄下的內容Hadoop集群搭建步驟—修改配置文件步驟1Hadoop的配置文件hadoop-env.sh配置文件內容Hadoop集群搭建步驟—修改配置文件步驟2core-site.xml配置文件內容Hadoop集群搭建步驟—修改配置文件步驟3hdfs-site.xml配置文件內容HDFS文件系統的元信息保存位置HDFS文件系統的數據保存位置第二名稱及誒點http服務器地址和端口Hadoop集群搭建步驟—修改配置文件步驟3hdfs-site.xml配置文件內容HDFS文件系統的元信息保存位置HDFS文件系統的數據保存位置第二名稱及誒點http服務器地址和端口Hadoop集群搭建步驟—修改配置文件步驟4slaves配置文件內容Hadoop集群搭建步驟—配置slave1和slave2拷貝Hadoop到slave1和slave2兩個節點拷貝profile文件到slave1和slave2兩個節點Hadoop集群搭建步驟—配置slave1和slave2使profile文件生效,并查看Hadoop版本信息本章小結本節我們介紹了Hadoop集群部署方式和Hadoop集群搭建,相信大家對Hadoop分布式集群搭建有了全新的認識,為我們后續學習啟動Hadoop集群打下了堅實的基礎。Hadoop官方配置文檔:/docs/stable/Hadoop大數據項目開發——Hadoop分布式集群啟動目錄content01Hadoop集群啟動Hadoop集群啟動步驟—格式化名稱節點格式化成功界面步驟1:格式化NameNode節點命令Hadoop集群搭建步驟—Hadoop安裝生成的name目錄步驟2:步驟3:master上執行啟動集群命令生成的data目錄啟動namenode節點啟動datanode節點Hadoop集群搭建步驟—查看節點步驟4master的節點salve1的節點salve2的節點Hadoop集群搭建步驟—關閉防火墻步驟5日志信息關閉防火墻Hadoop集群搭建步驟—Web界面Hadoop集群搭建步驟—Web界面步驟2:Hadoop集群搭建步驟—Web界面core-site.xml配置文件內容課外拓展在集群中如何動態增加或者刪除節點?關閉集群,把需要增加節點的主機名添加到slaves文件中,或者刪除slaves文件中需要刪除的主機名稱,然后將slaves配置文件分發到集群中的其它節點,重啟集群即可實現節點的動態增加或者刪除。本章小結本節一起啟動了Hadoop分布式集群,相信大家對Hadoop分布式集群有了全新的認識,為我們后續學習Hadoop打下了堅實的基礎。Hadoop大數據項目開發——HDFS簡介目錄content0201HDFS簡介HDFS實現目標和自身局限性HDFS簡介HDFS是Hadoop兩大核心組件之一。分布式存儲:HDFS分布式處理:MapReduceHDFS就是為了解決海量數據的分布式存儲問題。HadoopDistributedFileSystemHDFS簡介--集群在大數據時代,數據量非常大,單個節點一臺計算機是無論如何完成不了海量數據的存儲,我們需要借助計算機集群存儲海量數據。單機無法存儲集群分布式存儲HDFS簡介--集群每個豎排代表一個機架,每個機架上擺放了好多機器,每個機器稱為一個節點,在企業一個機架可以擺放30-40個節點,機架和機架之間是通過光纖交換機來完成彼此之間的網絡互聯。在這個集群中,HDFS把整個文件分布的存儲在這些機器里。HDFS簡介分布式文件系統解決了大數據存儲問題,是橫跨在多臺計算機上的存儲系統;分布式文件系統在大數據時代有著廣泛的應用前景,為存儲和處理超大規模數據提供擴展能力;分布式文件系統適用于一次寫入,多次讀出的場景,且不支持文件的修改,適合用來做數據分析。HDFS的實現目標成本低流式數據訪問適合處理大數據高容錯性大文件存儲成本低HDFS集群可構建在廉價計算機上,通過多副本機制,提高可靠性。個人計算機搭建大數據集群HDFS的實現目標適合流式數據訪問HDFS的數據處理規模比較大,應用程序一次需要訪問大量的數據,HDFS的設計目標就是全部數據全部讀寫,它不適合訪問整個文件中的一個子集。HDFS是為滿足海量數據的批量處理而設計的。HDFS的實現目標適合處理大數據HDFS可橫向擴展,其存儲的數據規模:能夠處理數據規模達到PB級別的數據;文件規模:能夠處理百萬規模以上的文件數量;節點規模:能夠處理10K節點的規模。HDFS的實現目標高容錯性數據保存多個副本,副本丟失后自動恢復;構建在廉價的計算機上,容易實現線性擴展,當集群增加新節點之后,名稱節點(NameNode)也可以感知,進行負載均衡,將數據分發和備份數據均衡到新的節點上。HDFS的實現目標適合大文件存儲HDFS采用數據塊的方式存儲數據,將數據物理切分成多個小的數據塊;當用戶讀取時,重新將多個小數據塊拼接起來。HDFS的實現目標0203不適合低延遲數據訪問無法高效存儲大量小文件不支持多用戶寫入及文件隨機修改01HDFS自身的局限性不適合低延遲數據訪問HDFS不適合低延遲數據訪問,比如毫秒級以內讀取數據或者存儲數據,HDFS是很難做到的。HDFS自身的局限性無法高效的對大量小文件進行存儲文件存儲會占用名稱節點的內存來存儲文件目錄和塊信息,存儲大量小文件就會耗費大量的內存,名稱節點的內存總是有限的。HDFS自身的局限性HDFS自身的局限性HDFS不支持多用戶寫入和文件隨機修改HDFS目前不支持并發多用戶的寫操作和文件的隨機修改,寫操作只能在文件末尾追加數據,一個文件只能有一個寫,不允許多個線程同時寫。本章小結本節我們了解到HDFS是hadoop兼容最好的標準級分布式文件系統,主要是對數據進行分布式儲存和讀取,探討了HDFS的實現目標和自身的局限性。Hadoop大數據項目開發——HDFS體系結構目錄content02數據節點塊0405第二名稱節點01HDFS體系結構03名稱節點HDFS體系結構HDFS的核心組件是名稱節點(NameNode)和數據節點(DataNode)。它是一個主/從(master/slave)架構的系統,即一個HDFS集群由一個NameNode和若干DataNode組成。其中,名稱節點為主節點,數據節點為從節點。HDFS的體系結構塊的概述Hadoop2.X版本默認的塊大小為128M。塊是HDFS中的最小存儲單位,并且可以自定義大小。塊按實際大小存儲。拆分出來的塊會有它相應的副本。塊的優勢可以存儲任意大小的數據文件,不用再受單個節點磁盤容量大小的限制。簡化了文件存儲子系統的設計,將元數據信息和文件數據信息分開存儲。有利于實現負載均衡并提高集群可靠性。有利于實現分布式文件系統的容錯性。名稱節點概述名稱節點是整個HDFS集群的管家,名稱節點上存儲的元數據信息包括:數據塊到數據節點的映射信息。每個文件由哪些數據塊組成。文件目錄的所有者及其權限。文件名、目錄名及其層級關系。名稱節點的數據結構元數據信息可被持久化到本地磁盤的兩個文件中,分別是元數據鏡像文件(fsimage)和事務日志文件(edits)。fsimage存儲著文件系統的所有命名空間信息。edits存儲著HDFS數據的事務操作日志。名稱節點的數據結構所謂的持久化,就是指把數據保存到可永久保存存儲設備(如磁盤)中。數據節點概述每個數據節點中的數據會被保存在各自節點的本地Linux文件系統中。負責為客戶端或名稱節點提供數據的檢索和讀寫服務,并通過“心跳”定期向名稱節點發送自己的塊列表信息。存儲著HDFS文件的真實數據,負責數據的存儲和讀取第二名稱節點因為事務日志文件(edits)開始比較小,但隨著對數據的不斷修改,事務日志文件(edits)會不斷增大,大到一定程度的時候,又會影響整個系統的功能,由此引入第二名稱節點。1.對元數據鏡像文件(fsimage)和事務日志文件(edits)定期合并,縮短名稱節點(NameNode)的重啟時間,提高系統性能。2.是名稱節點的冷備份,因為名稱節點有可能發生故障。為什么又引入第二名稱節點?第二名稱節點的功能:本節小結負責管理整個文件系統元數據。名稱節點負責管理具體文件數據塊存儲。數據節點協助名稱節點進行元數據的備份。第二名稱節點Hadoop大數據項目開發——HDFS運行機制05目錄content02高可用機制心跳機制06安全模式01副本機制03副本放置策略07垃圾回收機制聯邦機制04副本機制底層缺陷冗余數據保存不斷地出故障為了保證集群的容錯性和可用性,HDFS采用了數據冗余存儲方式,即一個數據可以保存多個副本。副本機制01020304冗余保存副本數也可以進行個性化設置默認冗余副本數:3010203優點01加快數據傳輸速度02很容易檢查數據錯誤03保證數據可靠性心跳機制名稱節點數據節點數據節點啟動后,會主動連接名稱節點,并在一定間隔(默認為3s)主動向名稱節點發送一個“心跳”,報告自己的狀態信息。心跳心跳名稱節點通過這個“心跳”向數據節點下達命令是一種形象化描述,指的是不間斷地發送一個自定義結構體(“心跳包”或“心跳幀”)來證明自己節點的有效性。心跳?心跳機制出現故障名稱節點名稱節點長時間未收到某個數據節點的“心跳”;名稱節點名稱節點判定該數據節點為宕機;備份副本名稱節點檢查該數據節點上的塊副本數據并備份到其他的數據節點上。硬件故障或網絡問題;副本怎么恢復呢?HDFS是如何探測副本出現故障?心跳機制第一副本放到上傳文件的節點(機器)上第二副本放到和第一副本不同機架的任意節點上第三副本放到和第一副本相同機架的任意節點上副本放置策略這么多機器這么多的塊,副本是怎么存放的呢?如果還有副本,可以放到其它節點上,全部隨機。副本放置策略01第一副本放到上傳文件的節點上,可以較快地讀取,保證數據較好的本地性;02第二個副本及更多的block副本放置在其他機架,當整個結點失效時,HDFS將自動通過遠端機架上的數據將副本恢復到標準水平。03Hadoop的副本放置策略在可靠性和帶寬中做了一個很好的平衡。高可用(HA)機制Hadoop1.XHadoop2.XHDFS框架只有一個名稱節點HDFS框架主備兩個名稱節點單點故障雙NameNode架構HA機制高可用(HA)機制ActiveNameNodeStandbyNameNode負責HDFS的所有操作ZooKeeper確保主從名稱節點的狀態一致性主名稱節點的熱備份互為備份聯邦機制TWITTERYOUTUBESKYPEFACEBOOK在聯邦機制中,每個名稱節點分別管理文件系統命名空間的一部分;命名空間卷存放元數據和數據塊的塊池。
在Hadoop1.0,HDFS只有一個NameNode,計算機的內存就成了NameNode的瓶頸;
各命名空間卷是相互獨立的,互不影響且互不通信
在Hadoop2.x引入了HDFS聯邦機制,即通過橫向擴展的方式增加NameNode的數量;
1234安全模式只讀模式,不能對命名空間進行修改,也不能創建、復制、追加和刪除數據;在HDFS啟動時,首先會進入安全模式,當達到規定的要求時,會退出安全模式;當集群中某些數據節點出現故障,或者因為某些原因造成文件系統處于不穩定狀態時,NameNode會自動進入安全模式。HDFS的一種保護模式,保證數據塊的安全性;該模式下,可以查看目錄及文件、下載文件等操作。垃圾回收機制當用戶或應用程序刪除某個文件時,文件并不會立即從HDFS中刪除,而是被移到了一個類似回收站的地方。當文件的刪除時間超過一定期限,名稱節點就會自動將該文件從命名空間中刪除,該文件相關的數據塊即被釋放。在HDFS集群中,如果一個文件被刪除,那么與該文件相關的數據塊自然也就成了垃圾。本節小結本節介紹了HDFS的副本機制、心跳機制、副本放置策略、高可用機制等,大家進一步了解了HDFS,為后續HDFS操作奠定基礎。Hadoop大數據項目開發——HDFS命令行操作目錄content0201HDFS命令簡介HDFS常用命令HDFS命令簡介HDFS分布式文件系統中的基本操作與其他文件系統類似,包括目錄創建、目錄刪除、查看子目錄、文件創建、文件剪切、文件復制、文件重命名、文件刪除、文件上傳、文件下載等操作。HDFS的文件操作命令包括hadoopfs、hadoopdfs和hdfsdfs三種。fsdfs文件系統FileSystem分布式文件系統DistributedFileSystem分布式環境下,fs與dfs無區別(2)本地環境中,fs就是本地文件,dfs就不能用了(3)fs>dfs:fs的使用范圍更大HDFS命令簡介hadoopfs命令是Hadoop通用文件系統的命令接口,可以操作HDFS文件系統,也可以操作其他支持的文件系統如本地文件系統、S3文件系統等。hdfsdfs命令是HDFS文件系統特定的命令接口,只可以操作HDFS文件系統,不支持其他文件系統。HDFS文件系統建議使用hdfsdfs命令;通用文件系統使用hadoopfs命令。HDFS命令簡介HDFS命令:文件或目錄一定使用絕對路徑,“/”01本地Linux:文件或目錄可以是相對路徑也可以是絕對路徑02命令包括:目錄命令、文件命令、文件上傳下載等
03HDFS命令簡介HDFS常用命令操作1.-help:查看HDFS文件系統支持的命令HDFS常用命令操作2.-ls:查看HDFS文件系統中根目錄下的文件和目錄HDFS常用命令操作3.-mkdir:在HDFS文件系統中創建目錄HDFS常用命令操作創建級聯目錄命令,需要使用參數-pHDFS常用命令操作4.-put:將本地Linux操作系統中的文件上傳到HDFS上hadoopfs-put./jdk.tar.gz/bigdata如果HDFS上已經存在要上傳的文件,想覆蓋掉源文件,則需要使用參數-f。HDFS常用命令操作5.-rm:刪除HDFS文件系統上的文件或目錄hadoopfs-rm/jdk-8u211-linux-x64.tar.gztHDFS常用命令操作-rm:刪除目錄,則需要加上參數“-r”hadoopfs-rm-r/bigdata/bigdata1HDFS常用命令操作6.-get:將HDFS上的文件下載到本地(Linux操作系統)HDFS常用命令操作7.-cat:查看HDFS文件系統上的文件內容hadoopfs-cat/test.txt查看HDFS文件系統上的文件內容的前3行HDFS常用命令操作8.-ls:查看HDFS文件系統中根目錄下的文件和目錄HDFS常用命令操作9.-cp:復制HDFS文件系統上的文件HDFS常用命令操作10.-mv:移動HDFS文件系統上的文件HDFS常用命令操作使用-mv也可以實現重命名功能hadoopfs-mv/bigdata/test.txt/bigdata/bigdata1/test2.txt本章小結本節介紹了使用HDFS命令行進行文件創建、文件下載、文件重命名、文件刪除、目錄創建等操作,相信大家對HDFS命令有了一定理解,為我們后續學校HDFSJavaAPI打下了基礎。Hadoop大數據項目開發——HDFS命令行操作目錄content0201Hadoop集群部署方式Hadoop集群搭建HDFS文件操作命令HDFS的文件操作命令包括:hadoopfs使用范圍最廣,可以操作各種文件系統,如本地文件、HDFS文件、HFTP文件、S3文件等。hadoopdfs針對HDFS文件系統的操作命令。hdfsdfs與hadoopdfs類似,針對HDFS文件系統的操作。Hadoop集群的部署方式HDFS分布式文件系統中的基本操作與其他文件系統類似,包括文件創建、文件下載、文件重命名、文件刪除、目錄創建等操作。HDFS中的文件或者目錄一定使用絕對路徑,HDFS路徑從“/”開始。HDFS常用命令操作創建目錄命令HDFS常用命令操作創建級聯目錄命令HDFS常用命令操作兩個命令的區別hadoopfs-mkdir-p./bigdatahadoopfs-mkdir-p/bigdataHDFS常用命令操作上傳文件到HDFS上課外擴展傳到HDFS上的數據,最終在哪里?HDFS常用命令操作刪除HDFS上的文件HDFS常用命令操作下載HDFS上的文件HDFS常用命令操作移動文件HDFS常用命令操作查看HDFS文件系統上的文件內容的前3行查看HDFS文件系統中根目錄下的文件和目錄HDFS常用命令操作復制文件HDFS常用命令操作復制文件HDFS常用命令操作刪除HDFS上文件或目錄本章小結本節介紹了使用HDFS命令行進行文件創建、文件下載、文件重命名、文件刪除、目錄創建等操作,相信大家對HDFS命令有了一定理解,為我們后續學校HDFSJavaAPI打下了基礎。Hadoop大數據項目開發——HDFSAPI操作05目錄content02刪除文件引入依賴06移動或重命名文件01搭建客戶端環境03上傳文件下載文件04搭建HDFS客戶端環境步驟1:將Windows操作系統下的Hadoop壓縮包解壓到E盤,文件夾名為hadoop。步驟2:配置HADOOP_HOME環境變量,如下所示:搭建HDFS客戶端環境步驟3:配置Path環境變量,如下所示:搭建HDFS客戶端環境步驟4:創建一個Maven工程,創建Maven工程過程如下所示,輸入所建Maven工程的名稱。搭建HDFS客戶端環境HDFSAPI準備環境完成之后,編寫Java代碼,實現HDFS功能。引入依賴在編寫代碼之前,需要引入開發HDFSAPI客戶端相應的依賴,如下所示:<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.9.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.9.2</version></dependency></dependencies>HDFS文件上傳將Windows系統上本地E盤下面report.txt文件上傳到HDFS集群,源代碼如下所示:該參數為:副本數和文件塊大小;(默認副本數量為3,塊大小為128M)FileSystem.get構造一個訪問HDFS系統的客戶端對象:第一個參數為URI:名稱節點所在的節點;第二個參數為客戶端特別指定的:例如文件備份數量和塊大小等;第三個參數為客戶端的身份,該參數值為用戶名。copyFromLocalFile實現上傳一個文件到HDFS上,在該方法中指定待上傳的文件及其位置,以及將要上傳至HDFS上的位置。HDFS文件上傳參數既可以在代碼中設置,也可以在Hadoop集群中設置;那么參數優先級是怎么樣的呢?優先級排序:客戶端代碼>ClassPath>xxx-site.xml>xxx-default.xmlHDFS文件上傳將HDFS集群上的report.txt文件下載到Windows系統的E盤下面,源代碼編寫如下所示:HDFS下載文件HDFS下載文件連接HDFS的源碼與文件上傳的源碼一致;copyToLocalFile實現了將HDFS上的文件下載到本地Windows系統:第一個參數指是否將原文件刪除;第二參數指要下載的文件路徑;第三個參數指將文件下載到的路徑;最后一個參數是否開啟文件校驗。刪除HDFS集群上的文件,源代碼編寫如下所示:HDFS文件刪除delete:刪除HDFS文件系統上指定文件的內容:第一個參數表示要刪除的文件名;第二參數表示是否遞歸刪除。將HDFS集群上文件名進行更改和移動,源代碼編寫如下所示:HDFS文件名更改和移動rename:文件移動和重命名:第一個參數為要移動或者重命名的文件;第二個參數為移動后或者重命名后的文件。本節介紹了HDFSAPI的編寫,包括Windows本地文件上傳,將HDFS上文件下載到Windows本地、刪除HDFS上的文件、以及移動或者重命名文件,相信大家對HDFSAPI編寫有了全新的認識,為我們后續學習大數據知識打下了堅實基礎。本節小結Hadoop大數據項目開發——認識MapReduce目錄content02MapReduce設計思想01MapReduce簡介03MapReduce特點MapReduce簡介在大數據時代,數據量非常大,不能把數據放在一個單機上運行,而是借助一個集群通過多臺機器同時并行處理大規模數據集,幫助我們獲得海量的計算能力;單機無法運行集群多臺機器并行處理MapReduce簡介開源實現谷歌公司最早提出分布式并行編程MapReduce,Hadoop平臺對它進行了開源實現,成為Hadoop平臺兩個核心組件之一。MapReduce簡介任何一個節點出現問題不會影響其他節點正常運行,又設置了冗余和容錯機制。整個集群可以隨意增加減少計算節點,計算節點只需要很廉價的PC機。只需要告訴Hadoop“做什么?”,整個系統框架自動實現分布式部署。Hadoop平臺對Google上的MapReduce進行了很多相關的優化處理:集群架構和容錯性硬件價格及擴展性編程和學習難度MapReduce設計思想Reduce函數Map函數屏蔽所有編程細節,把復雜的并行編程過程高度抽象為:MapReduce名稱的由來:MapReduce整個框架中核心設計只有這兩個函數,底層的細節都被隱藏掉了,所以它極大的降低了分布式并行編程的難度,這是MapReduce的突出優點。MapReduce設計思想策略理念函數兩個函數一個策略一個理念MapReduce的設計思想總結有:一個策略,一個理念,兩個函數。MapReduce設計思想一個策略:“分而治之”第一步:MapReduce采用分而治之;第二步:把非常龐大的數據集,切分成非常多的獨立小分片;第三步:然后為每一個分片單獨地啟動一個Map任務;最后:最終通過多個Map任務,并行地在多個機器上去處理。MapReduce設計思想一個理念:”計算向數據靠攏”機器:數據機器:數據機器:數據機器:計算在大數據計算設計時,采用“計算向數據靠攏”,移動計算比移動數據更加經濟,大大減少了整個網絡中數據傳輸開銷,大大提升整個分布式程序的處理性能。機器:數據MapReduce設計思想MapReduce把復雜的并行編程過程高度抽象為Map和Reduce兩個函數Map對一組數據元素進行某種重復式的處理,提取數據的特征。Reduce對Map的中間結果進行某種進一步的結果整理。兩個函數:Map函數和Reduce函數=+MapReduce設計思想統一構架,隱藏系統層細節通過抽象模型和計算框架把需要“做什么”與“怎么做”分開,為設計者提供一個高層的編程接口和框架。將具體完成并行計算任務相關的諸多系統層細節隱藏起來,交給計算框架去處理。MapReduce優點0203易于編程良好的擴展性高容錯性01只需要告訴Hadoop“做什么?”,整個系統框架自動實現分布式部署。整個集群可以隨意增加減少計算節點,計算節點只需要很廉價的PC機。任何一個節點出現問題不會影響其他節點正常運行,又設置了冗余和容錯機制。MapReduce不足不擅長實時計算不擅長流式計算不擅長有向圖計算性能局限應用局限MapReduce不足不擅長流式計算不擅長有向圖計算不擅長實時計算MapReduce無法在毫秒或者秒級內返回結果。321流式計算的輸入數據是動態的,而MapReduce的輸入數據集是靜態的,不能動態變化;MapReduce適用于海量數據的離線批處理;不適合數據事務處理或單一請求處理。多個應用程序存在依賴關系,后一個應用程序的輸入為前一個的輸出。在這種情況下,MapReduce并不是不能做,而是使用后,每個MapReduce作業的輸出結果都會寫入到磁盤,會造成大量的磁盤IO開銷,導致性能非常低。MapReduce不足Map任務和Reduce任務存在著嚴格的依賴關系,Map任務的中間結果存儲在本地磁盤上,Reduce任務需要從磁盤上獲取Map計算的中間結果并將其作為Reduce的輸入,這樣就會產生大量的磁盤IO開銷,使得計算機性能降低。性能局限MapReduce不適合一般的Web應用,因為這些應用只是簡單的數據訪問且每次訪問請求所需要的資源非常少,同時還需要滿足高并發訪問需求。應用局限本節小結MapReduce是針對大規模集群中的分布式文件進行并行處理的計算模型;MapReduce設計目標就是讓不熟悉分布式并行編程的開發人員,將自己的程序輕松運行在分布式系統上。Hadoop大數據項目開發——MapReduce工作流程目錄content02Reduce過程Map過程0405寫入文件01分片和格式化數據源03Shuffle過程MapReduce工作流程概述MapReduce編程簡單且功能強大。專門為并行處理大規模數據而設計。對于簡單數據處理,只需要執行Map任務。對于復雜任務,根據實際的業務需求設置合適的Reduce任務數。MapReduce工作流程MapReduce工作流程第一步:分片和格式化數據源將存儲在分布式文件系統中數據集切分成獨立的輸入分片。每一個輸入分片對應一個Map任務(有多少輸入分片就會存在多少Map任務)。輸入分片是邏輯概念。輸入分片中存儲了一些元數據信息。輸入分片處理成<key1,value1>形式的數據,再傳遞給Map任務。第二步:Map過程TWITTERSKYPEFACEBOOK經過map()函數處理后,獲得一系列<key2,value2>形式的輸出。Map過程利用map()函數來處理數據。map()函數中具體的數據處理方法由用戶自己定義。map()函數接收<key1,value1>形式的數據輸入。1234YOUTUBE第三步:Shuffle過程
Shuffle過程map()函數的輸出并不會直接交給Reduce任務,而是需要經過分區、排序、合并、溢寫、歸并等處理,將處理后的數據作為Reduce任務的輸入。這一系列處理過程稱為Shuffle。第三步:Shuffle過程
Map的Shuffle過程1.Map端的Shuffle過程(1)map()函數的輸出并不會立即寫入磁盤,MapReduce會為每個Map任務分配一個環形內存緩沖區(bufferinmemory),用于存儲map()函數的輸出。(2)在將環形內存緩沖區中的數據寫入磁盤之前,需要對數據進行分區、排序和合并(可選)操作。第三步:Shuffle過程
Map的Shuffle過程1.Map端的Shuffle過程分區:主要目的是將數據均勻地分配給Reduce任務,以實現MapReduce的負載均衡。排序:MapReduce的默認操作,主要是將Map任務的輸出按key進行排序。每個分區中的數據都是有序的。合并:排序結束后,合并操作可根據需求選擇是否要執行;合并操作是將具有相同key的<key,value>的value加起來,從而減少溢寫的數據量。第三步:Shuffle過程
Map的Shuffle過程1.Map端的Shuffle過程(3)環形內存緩沖區中的數據一旦達到閾值,后臺線程便開始把數據溢寫到本地磁盤的臨時文件(即溢寫文件)中。(4)系統需要將所有溢寫文件中的數據進行歸并,以生成一個大的溢寫文件。歸并操作就是將相同key的value歸并成一個集合,形成新的鍵值對。(5)文件歸并操作完成后生成最終的Map任務輸出文件,文件保存在Map任務所在節點的本地磁盤上,Map任務執行結束。第三步:Shuffle過程2.Reduce端的Shuffle過程(1)Map任務結束,Reduce任務啟動相同數量的復制線程并行復制Map任務的輸出文件。(2)當緩存中的數據達到閾值,即需要溢寫到磁盤時,Reduce任務會將復制數據進行歸并排序(MergeSort),生成溢寫文件。
Reduce的Shuffle過程Reduce過程Reduce任務接收歸并排序后的數據流,并對已有序的相同key的鍵值對調用一次reduce()函數。Reduce任務輸入是<key2,list(value2)>形式的中間結果,輸出的是<key3,value3>形式的計算結果。Reduce任務輸出結果經過輸出格式化后再輸出到文件系統中,并且每個作業輸出文件默認以“part-r-00000”開始,并用后5位數遞增的方式命名。123
Reduce過程寫入文件MapReduce框架會自動把ReduceTask生成的<key,value>傳入OutputFormat的write方法,實現文件的寫入操作。本節小結(2)Map過程(5)寫入文件(1)分片和格式化數據源(3)Shuffle過程(4)Reduce過程Hadoop大數據項目開發——單詞統計分析設計目錄content02設計思路01設計過程part-r-00000的內容如下:part-r-00001的內容如下:words1.txt的內容如下:thisisagoodpigthatisagoodbearwords2.txt的內容如下:thisisabadpigthatisabadbearMapReduce案例描述輸入文件是words1.txt和words2.txt兩個文本文件,文件內容僅有字符串和空格。輸出文件為part-r-00000和part-r-00001,文件內容是:文件中出現的單詞及單詞出現的次數。單詞統計?設計思路各個單詞之間的頻數不具有相關性,可以將不同的單詞分發到不同的節點上處理;在統計單詞數量任務中,可以將大的數據集切分成小的數據集,且各數據集之間相互獨立,方便并行處理;MapReduce單詞統計任務的解決思路符合MapReduce的編程思想。設計思路指定輸入文件所在的位置將兩個文件切分成兩個輸入分片,然后對輸入分片進行格式化,文件按行分解,從而形成以行偏移量為key、行內容為value的鍵值對。將鍵值對的value按空格分解成一個個單詞,生成<word,1>形式的鍵值對。輸入階段輸入分片及其格式化階段設計map()函數階段設計思路設計reduce()函數,將輸入的<word,list(value)>形式的數據進行匯總,最后生成以key為單詞、value為單詞頻數的鍵值對。系統默認的輸出格式為“單詞+空格+單詞頻數”的形式,若要輸出特定樣式的數據,需要對輸出結果進行格式化,需要進行指定。指定單詞統計程序的輸出結果文件位置。設計reduce()函數階段輸出格式化階段輸出階段設計過程1.輸入分片及其格式化:對輸入分片進行格式化操作,形成<key1,value1>形式的數據流,key1為偏移量,從0開始,每讀取一個字符就增加1;value1為每行文本內容。包括空格、換行符等設計過程map()函數將接收到的<key1,value1>形式的輸入數據流,按空格進行拆分,輸出結果為<key2,1>形式的數據。key2為字符串形式的單詞,value的值為1,表示單詞數為1。2.Map過程設計過程將多個Map任務的<key2,value2>形式的輸出,處理成<key2,list(value2)>形式的中間結果。3.Shuffle過程設計過程reduce()函數接收<key2,list(value2)>形式的數據流,對相同單詞的值集合進行計算,匯總出單詞出現的總次數。4.Reduce過程功能實現part-r-00000的內容如下:part-r-00001的內容如下:words1.txt的內容如下:thisisagoodpigthatisagoodbearwords2.txt的內容如下:thisisabadpigthatisabadbearMapReduce輸入分片及其格式化MapShuffleReduce單詞統計本節小結MapReduce編程規范單詞統計設計思路單詞統計設計過程Hadoop大數據項目開發——單詞統計功能代碼-Mapper實現目錄content02Reducer階段代碼編寫01Mapper階段代碼編寫03Drive階段代碼編寫pom.xml文件內容<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-common</artifactId><version>2.9.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>2.9.2</version></dependency>Mapper階段代碼publicclassWordCountMapperextendsMapper<LongWritable,Text,Text,IntWritable>{ @Override protectedvoidmap(LongWritablekey,Textvalue,Contextcontext) throwsIOException,InterruptedException{ Stringline=value.toString();//將Text類型轉成字符型 String[]words=line.split("");//切割單詞 for(Stringword:words){//遍歷words context.write(newText(word),newIntWritable(1)); } }}繼承Mapper類WordCountMapper類使用extends關鍵字繼承了Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>類,輸入Mapper后會自動補全。重寫map方法重寫map方法刪除此行重寫map方法Stringline=value.toString();//將Text類型轉成字符型String[]words=line.split("");//切割漢字for(Stringword:words){//遍歷words context.write(newText(word),newIntWritable(1));}map()方法編寫邏輯代碼:Hadoop大數據項目開發——單詞統計分析-mapper代碼實現目錄content02Reducer類的編寫01Mapper類的編寫03Driver類的編寫添加依賴:hadoop-commonhadoop-hdfshadoop-client實戰開發:WordCountMapperWordCountReducerWordCountMain/開發環境:mavenIDEA/Eclipse上傳運行:hadoopjarwordcount-1.0-SNAPSHOT.jar
/input/data.txt/output/wc單詞統計功能開發流程引入依賴<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-common</artifactId><version>2.9.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>2.9.2</version></dependency>本案例中的測試數據位于“G:/wordcount/input”的文件夾中。首先在新建項目中的pom.xml文件中引入依賴,如圖所示:Mapper類的編寫新建WordCountMapper類,該類繼承了org.apache.hadoop.mapreduce.Mapper類。WordCountMapper類是map()函數的執行者,用戶需要根據數據處理需求重寫map()方法。創建WordCountMapper類Mapper類的編寫importjava.io.IOException;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;publicclassWordCountMapperextendsMapper<LongWritable,Text,Text,IntWritable>{ @Override protectedvoidmap(LongWritablekey,Textvalue,Contextcontext) throwsIOException,InterruptedException{ Stringline=value.toString();//將Text類型轉成字符型 String[]words=line.split("");//切割單詞 for(Stringword:words){//遍歷words context.write(newText(word),newIntWritable(1)); } }}WordCountMapper類的代碼如圖所示:Mapper類的編寫上述代碼中可知,WordCountMapper類使用extends關鍵字繼承了Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>類,其中:KEYIN:是MapTask讀取到key的數據類型,是一行的起始偏移量的數據類型,使用長整型,在MapReduce中使用LongWritable。VALUEIN:是MapTask讀取到的數據的value的類型,是一行的內容的數據類型,本案例中一行內容的數據類型為文本型,在MapReduce中使用Text。KEYOUT:是用戶的自定義map方法要返回的結果Key-Value中的key的數據類型,在WordCount邏輯中,需要輸出的單詞是字符型,在MapReduce中使用Text。VALUEOUT:是用戶的自定義map方法要返回的結果Key-Value中value的數據類型,在wordcount邏輯中,需要輸出的單詞數量是整數,在MapReduce中使用IntWritable。在mapreduce中,map產生的數據需要傳輸給reduce,需要進行序列化和反序列化。而jdk中的原生序列化機制產生的數據量比較冗余,就會導致數據在mapreduce運行過程中傳輸效率低下。所以,hadoop專門設計了自己的序列化機制,那么,mapreduce中傳輸的數據類型就必須實現hadoop自己的序列化接口。hadoop為jdk中的常用基本類型Long,String,Integer,Float等數據類型封裝了自己的實現了hadoop序列化接口的類型:LongWritable,Text,IntWritable,Floa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 周個人工作總結模版
- 某通信公司產品策略概述
- 機動車輛保險理賠實務培訓課程
- 水源熱泵空調的工作原理與特點
- 學前兒童發展 課件 第9章 學前兒童人格的發展
- AutoCad教程總結模版
- 浙江省杭州市臨安市2025屆七年級數學第二學期期末經典模擬試題含解析
- 河北石家莊石門實驗學校2025屆七下數學期末綜合測試模擬試題含解析
- 2025屆北京十一學校數學八下期末學業質量監測模擬試題含解析
- 新概念第一冊L121-130短語總結模版
- 上海公務員筆試真題2024
- 2025-2030中國寵物凍干主糧市場需求量預測與營銷戰略規劃研究報告
- 流媒體播放器性能優化-全面剖析
- 移動護理管理平臺建設方案
- 新能源汽車充電系統故障診斷與維修技術研究
- 廣西壯族自治區2025年4月高三畢業班診斷學考試生物試卷及答案(廣西三模)
- 超星爾雅學習通《新媒體概論(浙江傳媒學院)》2025章節測試附答案
- 高++中語文++高考復習+語言文字運用之錯別字
- 企業法律訴訟應急預案
- BSL實驗室生物安全管理體系文件
- 窗戶加裝限位器施工方案
評論
0/150
提交評論