大數據存儲與處理第三講課件_第1頁
大數據存儲與處理第三講課件_第2頁
大數據存儲與處理第三講課件_第3頁
大數據存儲與處理第三講課件_第4頁
大數據存儲與處理第三講課件_第5頁
已閱讀5頁,還剩163頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1本講內容原理Hadoop基本架構HDFS文件系統MapReduce分布式計算框架實踐安裝與配置編寫MapReduce程序介紹背景Hadoop起源成功的案例1本講內容原理Hadoop基本架構實踐安裝與配置介紹背景12你發現:目前的硬盤容量1T,速度100MB/s

。你發現:要把現在的硬盤數據刷一遍,要兩個多小時,太可怕了。設想:硬盤讀取速度永遠滿足要求!2你發現:目前的硬盤容量1T,速度100MB/s。你發現:而Hadoop就是一個并行處理海量數據的工具。我們只能采用并行計算而Hadoop就是我們只能采用并行計算一個分布式文件系統和并行執行環境(框架)讓用戶便捷地處理海量數據Apache軟件基金會下面的一個開源項目目前Yahoo!是最主要的貢獻者4Hadoop是什么?一個分布式文件系統和并行執行環境(框架)4Hadoop是什么4ApacheLucene開源的高性能全文檢索工具包ApacheNutch開源的Web搜索引擎Google三大論文MapReduce/GFS/BigTableApacheHadoop大規模數據處理5Hadoop起源ApacheLucene5Hadoop起源5擴容能力(Scalable):能可靠地(reliably)存儲和處理千兆字節(PB)數據。成本低(Economical):可以通過普通機器組成的服務器群來分發以及處理數據。這些服務器群總計可達數千個節點。高效率(Efficient):通過分發數據,hadoop可以在數據所在的節點上并行地(parallel)處理它們,這使得處理非常的快速。可靠性(Reliable):hadoop能自動地維護數據的多份復制,并且在任務失敗后能自動地重新部署(redeploy)計算任務。6Hadoop的特點擴容能力(Scalable):能可靠地(reliably)存67Hadoop越來越火據估計,到2015年,全世界一半以上的數據將涉及Hadoop那我們就來看看一些成功的案例:不是可以解決數據中心和數據管理方面所有難題的靈丹妙藥7Hadoop越來越火據估計,到2015年,全世界一半以上的7雅虎北京全球軟件研發中心IBMFacebookAmazonYahoo!中國移動研究院英特爾研究院百度、騰訊、新浪、搜狐、淘寶8誰在用Hadoop?雅虎北京全球軟件研發中心8誰在用Hadoop?8YahooHadoop應用揭秘中國移動聯通海量上網日志數據9Hadoop應用案例YahooHadoop應用揭秘9Hadoop應用案例92010年10月時:Yahoo目前有超過38000臺服務器,有超過4000個以上的服務器集群,數據總量達到了170PB,每日的數據增量在10TB以上。10YahooHadoop應用揭秘2010年10月時:Yahoo目前有超過38000臺服務器,10Yahoo的Hadoop應用包含有搜索、日志處理(Analytics,Reporting,Buzz)、用戶建模、內容優化,垃圾郵件過濾器以及廣告計算等。如何利用Hadoop對海量數據進行優化處理是Yahoo正在致力于工作的內容。以網絡分析為例,Yahoo目前有超過100億個網頁,1PB的網頁數據內容,2萬億條鏈接,每日面臨這300TB的數據輸出。“在應用Hadoop前,實施這一過程我們大概需要1個月的時間,但應用后僅需要1周時間”11YahooHadoop應用揭秘Yahoo的Hadoop應用包含有搜索、日志處理(Analy11“再以Yahoo搜索為例,我們的服務器上保留有用戶三年來的搜索記錄,這個數據是由超過10TB的自然語言文本庫所組成”,“如果數據重整,我們在應用Hadoop前需要1個月的時間進行處理,而在有了Hadoop后僅僅需要30分鐘。”Hadoop也非萬能,它采用Java實現,Java的IO處理雖然沒有性能瓶頸,但是對于CPU密集型的任務是一個麻煩,因此,有些算法效率不會提高很多。12YahooHadoop應用揭秘“再以Yahoo搜索為例,我們的服務器上保留有用戶三年來的搜12中國移動大云在中國移動內部,Hadoop已經成為一個重要的數據挖掘工具,中國移動已經把Hadoop的群用來進行閉環的數據挖掘,和傳統算法的數據挖掘性能相比,有很大的提升,而且成本非常低。13中國移動中國移動大云13中國移動1314Hadoop生態系統HDFSMapReduceHivePigHbaseZookeeper14Hadoop生態系統HDFSMapReduceHiveP1415Hadoop基本架構——物理分布的Hadoop集群15Hadoop基本架構——物理分布的Hadoop集群1516Hadoop基本架構——物理部署16Hadoop基本架構——物理部署16為以流式數據訪問模式存儲超大文件而設計的文件系統超大文件指的是幾百MB,幾百GB,幾百TB,甚至幾百PB流式數據訪問HDFS建立的思想是:一次寫入、多次讀取模式是最高效的。商用硬件HDFS不需要運行在昂貴并且高可靠的硬件上。17HDFS文件系統——設計目標為以流式數據訪問模式存儲超大文件而設計的文件系統17HDFS17硬件錯誤是常態,因此需要冗余。程序采用“數據就近”原則分配節點執行。18HDFS文件系統——設計基礎與目標硬件錯誤是常態,因此需要冗余。18HDFS文件系統——設計基18存儲并管理PB級數據處理非結構化數據注重數據處理的吞吐量(延遲不敏感)應用模式為:write-once-read-many存取模式(無數據一致性問題)19HDFS文件系統——能做什么?存儲并管理PB級數據19HDFS文件系統——能做什么?19存儲小文件(不建議使用)大量的隨機讀(不建議使用)需要對文件的修改(不支持)多用戶寫入(不支持)20HDFS文件系統不適合做什么?存儲小文件(不建議使用)20HDFS文件系統不適合做什么?20文件切分成塊(默認大小64M),以塊為單位,每個塊有多個副本存儲在不同的機器上,副本數可在文件生成時指定(默認3)NameNode是主節點,存儲文件的元數據如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件的塊列表以及塊所在的DataNode等等DataNode在本地文件系統存儲文件塊數據,以及塊數據的校驗和可以創建、刪除、移動或重命名文件,當文件創建、寫入和關閉之后不能修改文件內容。21HDFS文件系統——文件文件切分成塊(默認大小64M),以塊為單位,每個塊有多個副本2122HDFS文件系統——文件22HDFS文件系統——文件2223HDFS文件系統——文件23HDFS文件系統——文件2324HDFS文件系統——主要組件的功能namenodedatanode

存儲元數據存儲文件內容元數據保存在內存中文件內容保存在磁盤保存文件,block,datanode之間的映射關系維護了blockid到datanode本地文件的映射關系24HDFS文件系統——主要組件的功能namenodedat24Namenode是一個中心服務器,單一節點(簡化系統的設計和實現),負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。文件操作,NameNode負責文件元數據的操作,DataNode負責處理文件內容的讀寫請求,跟文件內容相關的數據流不經過NameNode,只會詢問它跟那個DataNode聯系,否則NameNode會成為系統的瓶頸25HDFS文件系統——NameNodeNamenode是一個中心服務器,單一節點(簡化系統的設計和25副本存放在那些DataNode上由NameNode來控制,根據全局情況做出塊放置決定,讀取文件時NameNode盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取時延Namenode全權管理數據塊的復制,它周期性地從集群中的每個Datanode接收心跳信號和塊狀態報告(Blockreport)。接收到心跳信號意味著該Datanode節點工作正常。塊狀態報告包含了一個該Datanode上所有數據塊的列表。26HDFS文件系統——NameNode副本存放在那些DataNode上由NameNode來控制,根26一個數據塊在DataNode以文件存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳DataNode啟動后向NameNode注冊,通過后,周期性(1小時)的向NameNode上報所有的塊信息。心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如復制塊數據到另一臺機器,或刪除某個數據塊。如果超過10分鐘沒有收到某個DataNode的心跳,則認為該節點不可用。集群運行中可以安全加入和退出一些機器27HDFS文件系統——DataNode一個數據塊在DataNode以文件存儲在磁盤上,包括兩個文件2728HDFS文件系統——系統架構28HDFS文件系統——系統架構28一個名字節點和多個數據節點數據復制(冗余機制)存放的位置(機架感知策略)故障檢測數據節點心跳包(檢測是否宕機)塊報告(安全模式下檢測)數據完整性檢測(校驗和比較)名字節點(日志文件,鏡像文件)空間回收機制29HDFS文件系統——保障可靠性的措施一個名字節點和多個數據節點29HDFS文件系統——保障可靠性29HDFS如何寫文件?WritepacketCreatefileWritepacketWritepacketSendackSendackSendackClosefileHDFS如何寫文件?WritepacketCreatef30客戶端聯系namenode,在namenode命名空間中創建一個新文件,此時,namenode會檢查文件是否存在和客戶端是否有權限創建新文件,檢查通過,就會創建一條記錄。然后客戶端寫文件時,會取得合適的3個datanodes形成一個管線DataStreamer將數據包流式的傳輸到管線中第一個datanode,第一個datanode存儲數據包并發送的第二個datanode,第二個datanode存儲數據包并發送的第三個datanode。當收到管道中所有datanodes的確認信息后對應數據包才會從確認隊列中刪除。如此反復,直到所有的數據包,都寫完,最后向namenode報告寫入完成。31客戶端聯系namenode,在namenode命名空間中創建3132HDFS如何讀文件?ReadblockOpenfileClosefileGetblocklocation32HDFS如何讀文件?ReadblockOpenfil32客戶端聯系NameNode,得到所有數據塊信息,以及數據塊對應的所有數據服務器的位置信息嘗試從某個數據塊對應的一組數據服務器中選出一個,進行連接數據被一個包一個包發送回客戶端,等到整個數據塊的數據都被讀取完了,就會斷開此鏈接,嘗試連接下一個數據塊對應的數據服務器,整個流程,依次如此反復,直到所有想讀的都讀取完了為止。Namenode并不實際參與數據傳輸。33讀文件流程客戶端聯系NameNode,得到所有數據塊信息,以及數據塊對33冗余備份策略機架策略心跳機制安全模式校驗和回收站元數據保護34HDFS的可靠性——回顧冗余備份策略34HDFS的可靠性——回顧343535什么是MapReduce?語言支持:JavaC++(throughpipes)scriptlanguages(throughstreaming)分布式技術框架3535什么是MapReduce?語言支持:分布式技術框架處理海量數據(>1TB)上百/上千CPU實現并行處理簡單地實現以上目的移動計算比移動數據更劃算36MapReduce設計目的——大規模數據處理處理海量數據(>1TB)36MapReduce設計目的——大36自動實現分布式并行計算容錯提供狀態監控工具模型抽象簡潔,程序員易用計算劃到大量機器上組件間不允許任意數據共享,避免保保持同步而產生的通信開銷,所有在MapReduce上的數據不可變節點間通信只在產生新輸出

37MapReduce——特性自動實現分布式并行計算37MapReduce——特性3738MapReduce示例TheweatherisgoodThisguyisagoodmanTodayisgoodGoodmanisgoodthe1weather1is1good1today1is1good1this1guy1is1a1good1man1good1man1is1good1a1good1good1good1good1good1man1man1the1weather1today1guy1is1is1is1is1this1a1good5guy1is4man2the1this1today1weather138MapReduce示例TheweatherThis38mapping任務平等,Mapper無特定標識,處理任意輸入每個mapper本地進行中間值交換,同鍵值送到同一個reducer。唯一的結點通信數據傳送由平臺處理39MapReduce數據流39MapReduce數據流3940MapReduce數據流40MapReduce數據流4041從Map到Reducer數據整體傳輸過程41從Map到Reducer數據整體傳輸過程41輸入塊InputSplit:文件拆分成塊Mapred-default.xml設置塊大小輸入格式定義了組成mapping階段的map任務列表,每個任務對應一個輸入塊。據InputSplit地址分配任務(最大任務數mapred.tasktracker.map.tasks.maximum)42MapReduce數據流——輸入輸入塊InputSplit:文件拆分成塊42MapReduc42每個map任務都有一個用來寫入數據的循環內存緩沖區。這個緩沖區默認大小是100M當緩沖區中的數據量達到一定閥值(默認0.8),系統將會啟動一個后臺進程把緩沖區的數據spill到磁盤,spill過程中,map的輸出會繼續寫入到緩沖區,但如果緩沖區已滿,map就會被阻塞直到spill完成。43MapReduce數據流——Map結果輸出每個map任務都有一個用來寫入數據的循環內存緩沖區。這個緩沖43當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩沖區,并進行預排序,以提升效率。44MapReduce數據流——shuffle和sort當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩44當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩沖區,并進行預排序,以提升效率。45MapReduce數據流——shuffle和sort當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩45Partitons:每一個reduce節點會分派到中間輸出的鍵集合中的一個不同的子集合Partitioner類決定鍵值對去向,默認分類器計算鍵哈希值Spill線程把緩沖區數據寫到磁盤前,會對它進行一個二次快速排序,首先根據數據屬性的partition排序,然后每個partition中再按照key排序輸出包括一個索引文件和數據文件46MapReduce數據流——PartitonsPartitons:每一個reduce節點會分派到中間輸出的46如果設定了combiner,將在排序輸出的基礎上運行Combiner就是一個minreduce,它在執行map的節點本身執行,先對map的輸出做一次簡單的reduce,使得map的輸出更緊湊,更少的數據被寫入磁盤和傳輸給reduce47MapReduce數據流——combiner如果設定了combiner,將在排序輸出的基礎上運行47Ma47每當內存中的數據到達spill閥值的時候,都會產生一個新的spill文件,所以在map任務寫完它的最后一個輸出記錄時,可能會有多個spill文件。在map任務完成前,所有的spill文件將會被歸并排序為一個索引文件和數據文件。當spill文件歸并完畢后,map將刪除所有的臨時spill文件,并告知tasktracker任務完成。48MapReduce數據流——map輸出結束每當內存中的數據到達spill閥值的時候,都會產生一個新的s48Map的輸出文件放置在map任務的tasktracker的本地磁盤上,它是運行reduce任務的tasktracker所需要的輸入數據。Reduce任務的輸入數據分布在集群的多個map任務的輸出中,map任務可能會在不同的時間內完成,只有有其中的一個map任務完成,reduce任務就會開始拷貝它的輸出,這個階段稱之為拷貝階段Reduce任務擁有多個拷貝線程,可以并行的獲取map輸出,線程數默認是549MapReduce數據流——copyMap的輸出文件放置在map任務的tasktracker的本49拷貝來的數據疊加在磁盤上,有一個后臺線程會將它們合并為了更大的排序文件,節省后期的歸并時間。當所有的map輸出都拷貝后,reduce任務進入排序節點,這個階段會對所有的map輸出進行歸并排序,這個工作會重復多次假設有50個map輸出,并且歸并因子是10,則需要5次歸并,沒每次會把10個文件歸并為一個,最終生成5個中間文件。之后,系統不再把5個中間文件歸并成一個文件,而是排序后直接交給reduce函數,省去了向磁盤寫入數據這一步。50MapReduce數據流——copy拷貝來的數據疊加在磁盤上,有一個后臺線程會將它們合并為了更大50每個reduce任務都會創建一個Reducer實例reducer的reduce()方法只會調用一次,它會接收一個鍵和關聯到鍵的所有值的一個迭代器,迭代器會以一個未定義的順序返回關聯到同一個鍵的值。51MapReduce數據流——Reduce每個reduce任務都會創建一個Reducer實例51Map51鍵值對通過OutputCollector被寫到輸出文件中,寫入的方式由輸出格式控制。每一個reducer會把結果輸出寫在公共文件夾中一個單獨的文件內,這些文件的命名一般是part-nnnnn,nnnnn是關聯到某個reduce任務的partition的id52MapReduce數據流——輸出輸出格式描述TextOutputFormat默認的輸出格式,以"key\tvalue"的方式輸出行SequenceFileOutputFormat輸出二進制文件,適合于讀取為子MapReduce作業的輸入NullOutputFormat忽略收到的數據,即不做輸出

鍵值對通過OutputCollector被寫到輸出文件中,寫5253單一Reduce處理53單一Reduce處理5354多Reduce處理54多Reduce處理5455無Redue處理55無Redue處理5556MapReduce工作原理56MapReduce工作原理56JobTracker一直在等待JobClient提交作業TaskTracker每隔3秒向JobTracker發送心跳詢問有沒有任務可做,如果有,讓其派發任務給它執行這是一道pull過程:slave主動向master拉生意57MapReduce工作原理JobTracker一直在等待JobClient提交作業575758Hadoop中的MapReduce58Hadoop中的MapReduce5859MapReduce作業執行流程59MapReduce作業執行流程59默認為先進先出作業隊列調度支持公平調度支持容量調度60作業調度機制默認為先進先出作業隊列調度60作業調度機制60推測執行:既如果jobtracker發現拖后腿的任務,會再啟動相同的備份任務,然后那個先執行完成就會去kill掉另外一個。因此在監控網頁上經常能看到正常執行完成的作業有被kill的任務。推測執行默認打開,但是如果是代碼的問題,并不能解決問題,而且會使集群更慢,通過mapred-side.xml配置文件中設置mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution可為map任務或reduce任務開啟或者關閉推測執行。重用jvm,可以省去啟動新的jvm消耗時間,mapred-side.xml文件中設置mapred.job.reuse.jvm.num.tasks單個jvm最大執行的任務數(1,>1或-1表示沒有限制)忽略模式:任務在讀取任務數據失敗2次之后,會把數據位置報告給jobtracker,然后重新啟動該任務并在遇到所記錄的壞數據位置時直接跳過(默認關閉,同SkipBadRecord方法打開)61任務執行優化推測執行:既如果jobtracker發現拖后腿的任務,會再啟61硬件故障是指jobtracker故障或tasktracker故障Jobtracker是單點,若發生故障目前hadoop還無法處理,唯有選擇最牢靠的硬件作為jobtrackerJobtracker通過心跳信號(周期1分鐘)了解tasktracker是否發生故障或者負載過于嚴重Jobtracker將從任務節點列表中移除發生故障的tasktracker。如果故障節點在執行map任務并且尚未完成,jobtracker會要求其他節點重新執行此map任務如果故障節點在執行reduce任務并且尚未完成,jobtracker會要求其他節點重新執行尚未完成的reduce任務。62錯誤處理機制——硬件故障硬件故障是指jobtracker故障或tasktracker62由于代碼bug或進程崩潰引起任務失敗Jvm自動退出,向tasktracker父進程發生錯誤信息,錯誤信息也會寫入日志Tasktracker監聽程序會發現進程退出,或者進程很久沒有更新信息送回,將任務標記為失敗標記任務失敗后,任務計數器減1以便接受新的任務,并通過心跳信號通知jobtracker任務失敗的信息Jobtracker獲悉任務失敗后,將把該任務重新放入調度隊列,重新分配出去執行如果一個任務失敗超過4次(可配置),將不會再執行,同時宣告任務作業失敗。63錯誤處理機制——任務失敗由于代碼bug或進程崩潰引起任務失敗63錯誤處理機制——任務6364大綱原理Hadoop基本架構HDFS文件系統MapReduce分布式計算框架實踐安裝與配置編寫MapReduce程序介紹背景Hadoop起源成功的案例64大綱原理Hadoop基本架構實踐安裝與配置介紹背景64Hadoop安裝配置編寫MapReduce程序65實踐Hadoop安裝配置65實踐65支持平臺GNU/LinuxWindows(Cygwin)必需軟件JDK1.6以上SSH無密碼訪問66必要條件支持平臺66必要條件66格式化HDFSHadoopnamenode-format運行腳本start-all.shstart-dfs.shstart-mapred.shjps命令查詢java進程67啟動系統格式化HDFS67啟動系統67通過瀏覽器和http訪問jobtracker所在節點的50030端口監控jobtracker通過瀏覽器和http訪問namenode所在節點的50070端口監控集群68通過Web了解hadoop的狀況通過瀏覽器和http訪問jobtracker所在節點的5006869Jobtracker69Jobtracker6970NameNode70NameNode70命令行方式操作71HDFS文件操作命令行方式操作71HDFS文件操作71Hadoop沒有當前目錄的概念,72列出HDFS下的文件Hadoop沒有當前目錄的概念,72列出HDFS下的文件7273上傳文件到HDFS73上傳文件到HDFS7374將HDFS文件復制到本地74將HDFS文件復制到本地7475查看HDFS基本統計信息75查看HDFS基本統計信息75在新節點安裝好hadoop把namenode的相關配置文件復制到該節點修改masters和slaves文件,添加該節點設置ssh無密碼登陸該節點單獨啟動該節點上的datanode和tasktracker(hadoop-daemon.shstartdatanode/tasktracker)運行start-balancer.sh進行數據負載均衡76怎么添加節點在新節點安裝好hadoop76怎么添加節點76Page1:theweatherisgood.Page2:goodweatherisgood.77舉例:單詞計數(key,value)(the,1)(weather,1)(is,1)(good,1)(key,value)(good,1)(weather,1)(is,1)(good,1)(key,value)(the,1)(weather,2)(is,2)(good,3)Map1Map2ReducePage1:theweatherisgood.77舉77voidmap(LongWritablekey,Textvalue,OutputCollector<Text,IntWritable>output,Reporterreporter){

Stringline=value.toString();

StringTokenizert=newStringTokenizer(line);while(t.hasMoreTokens()){

word.set(t.nextToken());

output.collect(word,one);

}

}78Map函數voidmap(LongWritablekey,Te78voidreduce(Textkey,Iterator<IntWritable>values,OutputCollector<Text,IntWritable>output,Reporterreporter){

intsum=0;

while(values.hasNext()){

sum+=value.next().get();}output.collect(key,newIntWritable(sum));}79Reduce函數voidreduce(Textkey,Iterat79重寫Map/Reduce函數設置Job屬性打包程序并向JobTracker提交監控程序進度得到最終結果80程序運行重寫Map/Reduce函數80程序運行80日志分析排序搜索廣告計算,廣告優化、分析,點擊流分析,鏈接分析搜索關鍵字進行內容分類搜索引擎,創建索引word計數,統計值計算,統計數據,過濾,分析,查詢垃圾數據分析數據分析機器學習數據挖掘大規模圖像轉換(紐約時報使用Hadoop和EC2在36個小時內將4TB的TIFF圖像—包括405K大TIFF圖像,3.3MSGML文章和405KXML文件—轉換為800K適合在Web上使用的PNG圖像。)81MapReduce的應用日志分析81MapReduce的應用81習題1:基本操作上傳文件到HDFS查看/設置文件的備份數刪除文件、文件夾習題2:查看文件查看文件狀態查看文件內容習題3:使用JavaAPI讀取文件內容82練習一:使用HadoopHDFS習題1:基本操作82練習一:使用HadoopHDFS82習題1:基本操作運行示例代碼wordcount查看任務結果殺死任務習題2:查看任務狀態命令行查看web頁面查看83練習二:maprduce習題1:基本操作83練習二:maprduce83習題3:閱讀理解wordcount代碼習題4:編寫MapReduce邏輯:分布式Grep習題5:編寫MapReduce邏輯:Join84練習二:maprduce習題3:閱讀理解wordcount代碼84練習二:maprd8485本講內容原理Hadoop基本架構HDFS文件系統MapReduce分布式計算框架實踐安裝與配置編寫MapReduce程序介紹背景Hadoop起源成功的案例1本講內容原理Hadoop基本架構實踐安裝與配置介紹背景8586你發現:目前的硬盤容量1T,速度100MB/s

。你發現:要把現在的硬盤數據刷一遍,要兩個多小時,太可怕了。設想:硬盤讀取速度永遠滿足要求!2你發現:目前的硬盤容量1T,速度100MB/s。你發現:而Hadoop就是一個并行處理海量數據的工具。我們只能采用并行計算而Hadoop就是我們只能采用并行計算一個分布式文件系統和并行執行環境(框架)讓用戶便捷地處理海量數據Apache軟件基金會下面的一個開源項目目前Yahoo!是最主要的貢獻者88Hadoop是什么?一個分布式文件系統和并行執行環境(框架)4Hadoop是什么88ApacheLucene開源的高性能全文檢索工具包ApacheNutch開源的Web搜索引擎Google三大論文MapReduce/GFS/BigTableApacheHadoop大規模數據處理89Hadoop起源ApacheLucene5Hadoop起源89擴容能力(Scalable):能可靠地(reliably)存儲和處理千兆字節(PB)數據。成本低(Economical):可以通過普通機器組成的服務器群來分發以及處理數據。這些服務器群總計可達數千個節點。高效率(Efficient):通過分發數據,hadoop可以在數據所在的節點上并行地(parallel)處理它們,這使得處理非常的快速。可靠性(Reliable):hadoop能自動地維護數據的多份復制,并且在任務失敗后能自動地重新部署(redeploy)計算任務。90Hadoop的特點擴容能力(Scalable):能可靠地(reliably)存9091Hadoop越來越火據估計,到2015年,全世界一半以上的數據將涉及Hadoop那我們就來看看一些成功的案例:不是可以解決數據中心和數據管理方面所有難題的靈丹妙藥7Hadoop越來越火據估計,到2015年,全世界一半以上的91雅虎北京全球軟件研發中心IBMFacebookAmazonYahoo!中國移動研究院英特爾研究院百度、騰訊、新浪、搜狐、淘寶92誰在用Hadoop?雅虎北京全球軟件研發中心8誰在用Hadoop?92YahooHadoop應用揭秘中國移動聯通海量上網日志數據93Hadoop應用案例YahooHadoop應用揭秘9Hadoop應用案例932010年10月時:Yahoo目前有超過38000臺服務器,有超過4000個以上的服務器集群,數據總量達到了170PB,每日的數據增量在10TB以上。94YahooHadoop應用揭秘2010年10月時:Yahoo目前有超過38000臺服務器,94Yahoo的Hadoop應用包含有搜索、日志處理(Analytics,Reporting,Buzz)、用戶建模、內容優化,垃圾郵件過濾器以及廣告計算等。如何利用Hadoop對海量數據進行優化處理是Yahoo正在致力于工作的內容。以網絡分析為例,Yahoo目前有超過100億個網頁,1PB的網頁數據內容,2萬億條鏈接,每日面臨這300TB的數據輸出。“在應用Hadoop前,實施這一過程我們大概需要1個月的時間,但應用后僅需要1周時間”95YahooHadoop應用揭秘Yahoo的Hadoop應用包含有搜索、日志處理(Analy95“再以Yahoo搜索為例,我們的服務器上保留有用戶三年來的搜索記錄,這個數據是由超過10TB的自然語言文本庫所組成”,“如果數據重整,我們在應用Hadoop前需要1個月的時間進行處理,而在有了Hadoop后僅僅需要30分鐘。”Hadoop也非萬能,它采用Java實現,Java的IO處理雖然沒有性能瓶頸,但是對于CPU密集型的任務是一個麻煩,因此,有些算法效率不會提高很多。96YahooHadoop應用揭秘“再以Yahoo搜索為例,我們的服務器上保留有用戶三年來的搜96中國移動大云在中國移動內部,Hadoop已經成為一個重要的數據挖掘工具,中國移動已經把Hadoop的群用來進行閉環的數據挖掘,和傳統算法的數據挖掘性能相比,有很大的提升,而且成本非常低。97中國移動中國移動大云13中國移動9798Hadoop生態系統HDFSMapReduceHivePigHbaseZookeeper14Hadoop生態系統HDFSMapReduceHiveP9899Hadoop基本架構——物理分布的Hadoop集群15Hadoop基本架構——物理分布的Hadoop集群99100Hadoop基本架構——物理部署16Hadoop基本架構——物理部署100為以流式數據訪問模式存儲超大文件而設計的文件系統超大文件指的是幾百MB,幾百GB,幾百TB,甚至幾百PB流式數據訪問HDFS建立的思想是:一次寫入、多次讀取模式是最高效的。商用硬件HDFS不需要運行在昂貴并且高可靠的硬件上。101HDFS文件系統——設計目標為以流式數據訪問模式存儲超大文件而設計的文件系統17HDFS101硬件錯誤是常態,因此需要冗余。程序采用“數據就近”原則分配節點執行。102HDFS文件系統——設計基礎與目標硬件錯誤是常態,因此需要冗余。18HDFS文件系統——設計基102存儲并管理PB級數據處理非結構化數據注重數據處理的吞吐量(延遲不敏感)應用模式為:write-once-read-many存取模式(無數據一致性問題)103HDFS文件系統——能做什么?存儲并管理PB級數據19HDFS文件系統——能做什么?103存儲小文件(不建議使用)大量的隨機讀(不建議使用)需要對文件的修改(不支持)多用戶寫入(不支持)104HDFS文件系統不適合做什么?存儲小文件(不建議使用)20HDFS文件系統不適合做什么?104文件切分成塊(默認大小64M),以塊為單位,每個塊有多個副本存儲在不同的機器上,副本數可在文件生成時指定(默認3)NameNode是主節點,存儲文件的元數據如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件的塊列表以及塊所在的DataNode等等DataNode在本地文件系統存儲文件塊數據,以及塊數據的校驗和可以創建、刪除、移動或重命名文件,當文件創建、寫入和關閉之后不能修改文件內容。105HDFS文件系統——文件文件切分成塊(默認大小64M),以塊為單位,每個塊有多個副本105106HDFS文件系統——文件22HDFS文件系統——文件106107HDFS文件系統——文件23HDFS文件系統——文件107108HDFS文件系統——主要組件的功能namenodedatanode

存儲元數據存儲文件內容元數據保存在內存中文件內容保存在磁盤保存文件,block,datanode之間的映射關系維護了blockid到datanode本地文件的映射關系24HDFS文件系統——主要組件的功能namenodedat108Namenode是一個中心服務器,單一節點(簡化系統的設計和實現),負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。文件操作,NameNode負責文件元數據的操作,DataNode負責處理文件內容的讀寫請求,跟文件內容相關的數據流不經過NameNode,只會詢問它跟那個DataNode聯系,否則NameNode會成為系統的瓶頸109HDFS文件系統——NameNodeNamenode是一個中心服務器,單一節點(簡化系統的設計和109副本存放在那些DataNode上由NameNode來控制,根據全局情況做出塊放置決定,讀取文件時NameNode盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取時延Namenode全權管理數據塊的復制,它周期性地從集群中的每個Datanode接收心跳信號和塊狀態報告(Blockreport)。接收到心跳信號意味著該Datanode節點工作正常。塊狀態報告包含了一個該Datanode上所有數據塊的列表。110HDFS文件系統——NameNode副本存放在那些DataNode上由NameNode來控制,根110一個數據塊在DataNode以文件存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳DataNode啟動后向NameNode注冊,通過后,周期性(1小時)的向NameNode上報所有的塊信息。心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如復制塊數據到另一臺機器,或刪除某個數據塊。如果超過10分鐘沒有收到某個DataNode的心跳,則認為該節點不可用。集群運行中可以安全加入和退出一些機器111HDFS文件系統——DataNode一個數據塊在DataNode以文件存儲在磁盤上,包括兩個文件111112HDFS文件系統——系統架構28HDFS文件系統——系統架構112一個名字節點和多個數據節點數據復制(冗余機制)存放的位置(機架感知策略)故障檢測數據節點心跳包(檢測是否宕機)塊報告(安全模式下檢測)數據完整性檢測(校驗和比較)名字節點(日志文件,鏡像文件)空間回收機制113HDFS文件系統——保障可靠性的措施一個名字節點和多個數據節點29HDFS文件系統——保障可靠性113HDFS如何寫文件?WritepacketCreatefileWritepacketWritepacketSendackSendackSendackClosefileHDFS如何寫文件?WritepacketCreatef114客戶端聯系namenode,在namenode命名空間中創建一個新文件,此時,namenode會檢查文件是否存在和客戶端是否有權限創建新文件,檢查通過,就會創建一條記錄。然后客戶端寫文件時,會取得合適的3個datanodes形成一個管線DataStreamer將數據包流式的傳輸到管線中第一個datanode,第一個datanode存儲數據包并發送的第二個datanode,第二個datanode存儲數據包并發送的第三個datanode。當收到管道中所有datanodes的確認信息后對應數據包才會從確認隊列中刪除。如此反復,直到所有的數據包,都寫完,最后向namenode報告寫入完成。115客戶端聯系namenode,在namenode命名空間中創建115116HDFS如何讀文件?ReadblockOpenfileClosefileGetblocklocation32HDFS如何讀文件?ReadblockOpenfil116客戶端聯系NameNode,得到所有數據塊信息,以及數據塊對應的所有數據服務器的位置信息嘗試從某個數據塊對應的一組數據服務器中選出一個,進行連接數據被一個包一個包發送回客戶端,等到整個數據塊的數據都被讀取完了,就會斷開此鏈接,嘗試連接下一個數據塊對應的數據服務器,整個流程,依次如此反復,直到所有想讀的都讀取完了為止。Namenode并不實際參與數據傳輸。117讀文件流程客戶端聯系NameNode,得到所有數據塊信息,以及數據塊對117冗余備份策略機架策略心跳機制安全模式校驗和回收站元數據保護118HDFS的可靠性——回顧冗余備份策略34HDFS的可靠性——回顧118119119什么是MapReduce?語言支持:JavaC++(throughpipes)scriptlanguages(throughstreaming)分布式技術框架3535什么是MapReduce?語言支持:分布式技術框架處理海量數據(>1TB)上百/上千CPU實現并行處理簡單地實現以上目的移動計算比移動數據更劃算120MapReduce設計目的——大規模數據處理處理海量數據(>1TB)36MapReduce設計目的——大120自動實現分布式并行計算容錯提供狀態監控工具模型抽象簡潔,程序員易用計算劃到大量機器上組件間不允許任意數據共享,避免保保持同步而產生的通信開銷,所有在MapReduce上的數據不可變節點間通信只在產生新輸出

121MapReduce——特性自動實現分布式并行計算37MapReduce——特性121122MapReduce示例TheweatherisgoodThisguyisagoodmanTodayisgoodGoodmanisgoodthe1weather1is1good1today1is1good1this1guy1is1a1good1man1good1man1is1good1a1good1good1good1good1good1man1man1the1weather1today1guy1is1is1is1is1this1a1good5guy1is4man2the1this1today1weather138MapReduce示例TheweatherThis122mapping任務平等,Mapper無特定標識,處理任意輸入每個mapper本地進行中間值交換,同鍵值送到同一個reducer。唯一的結點通信數據傳送由平臺處理123MapReduce數據流39MapReduce數據流123124MapReduce數據流40MapReduce數據流124125從Map到Reducer數據整體傳輸過程41從Map到Reducer數據整體傳輸過程125輸入塊InputSplit:文件拆分成塊Mapred-default.xml設置塊大小輸入格式定義了組成mapping階段的map任務列表,每個任務對應一個輸入塊。據InputSplit地址分配任務(最大任務數mapred.tasktracker.map.tasks.maximum)126MapReduce數據流——輸入輸入塊InputSplit:文件拆分成塊42MapReduc126每個map任務都有一個用來寫入數據的循環內存緩沖區。這個緩沖區默認大小是100M當緩沖區中的數據量達到一定閥值(默認0.8),系統將會啟動一個后臺進程把緩沖區的數據spill到磁盤,spill過程中,map的輸出會繼續寫入到緩沖區,但如果緩沖區已滿,map就會被阻塞直到spill完成。127MapReduce數據流——Map結果輸出每個map任務都有一個用來寫入數據的循環內存緩沖區。這個緩沖127當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩沖區,并進行預排序,以提升效率。128MapReduce數據流——shuffle和sort當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩128當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩沖區,并進行預排序,以提升效率。129MapReduce數據流——shuffle和sort當map開始產生輸出時,并不是簡單的寫入到磁盤,先是寫入到緩129Partitons:每一個reduce節點會分派到中間輸出的鍵集合中的一個不同的子集合Partitioner類決定鍵值對去向,默認分類器計算鍵哈希值Spill線程把緩沖區數據寫到磁盤前,會對它進行一個二次快速排序,首先根據數據屬性的partition排序,然后每個partition中再按照key排序輸出包括一個索引文件和數據文件130MapReduce數據流——PartitonsPartitons:每一個reduce節點會分派到中間輸出的130如果設定了combiner,將在排序輸出的基礎上運行Combiner就是一個minreduce,它在執行map的節點本身執行,先對map的輸出做一次簡單的reduce,使得map的輸出更緊湊,更少的數據被寫入磁盤和傳輸給reduce131MapReduce數據流——combiner如果設定了combiner,將在排序輸出的基礎上運行47Ma131每當內存中的數據到達spill閥值的時候,都會產生一個新的spill文件,所以在map任務寫完它的最后一個輸出記錄時,可能會有多個spill文件。在map任務完成前,所有的spill文件將會被歸并排序為一個索引文件和數據文件。當spill文件歸并完畢后,map將刪除所有的臨時spill文件,并告知tasktracker任務完成。132MapReduce數據流——map輸出結束每當內存中的數據到達spill閥值的時候,都會產生一個新的s132Map的輸出文件放置在map任務的tasktracker的本地磁盤上,它是運行reduce任務的tasktracker所需要的輸入數據。Reduce任務的輸入數據分布在集群的多個map任務的輸出中,map任務可能會在不同的時間內完成,只有有其中的一個map任務完成,reduce任務就會開始拷貝它的輸出,這個階段稱之為拷貝階段Reduce任務擁有多個拷貝線程,可以并行的獲取map輸出,線程數默認是5133MapReduce數據流——copyMap的輸出文件放置在map任務的tasktracker的本133拷貝來的數據疊加在磁盤上,有一個后臺線程會將它們合并為了更大的排序文件,節省后期的歸并時間。當所有的map輸出都拷貝后,reduce任務進入排序節點,這個階段會對所有的map輸出進行歸并排序,這個工作會重復多次假設有50個map輸出,并且歸并因子是10,則需要5次歸并,沒每次會把10個文件歸并為一個,最終生成5個中間文件。之后,系統不再把5個中間文件歸并成一個文件,而是排序后直接交給reduce函數,省去了向磁盤寫入數據這一步。134MapReduce數據流——copy拷貝來的數據疊加在磁盤上,有一個后臺線程會將它們合并為了更大134每個reduce任務都會創建一個Reducer實例reducer的reduce()方法只會調用一次,它會接收一個鍵和關聯到鍵的所有值的一個迭代器,迭代器會以一個未定義的順序返回關聯到同一個鍵的值。135MapReduce數據流——Reduce每個reduce任務都會創建一個Reducer實例51Map135鍵值對通過OutputCollector被寫到輸出文件中,寫入的方式由輸出格式控制。每一個reducer會把結果輸出寫在公共文件夾中一個單獨的文件內,這些文件的命名一般是part-nnnnn,nnnnn是關聯到某個reduce任務的partition的id136MapReduce數據流——輸出輸出格式描述TextOutputFormat默認的輸出格式,以"key\tvalue"的方式輸出行SequenceFileOutputFormat輸出二進制文件,適合于讀取為子MapReduce作業的輸入NullOutputFormat忽略收到的數據,即不做輸出

鍵值對通過OutputCollector被寫到輸出文件中,寫136137單一Reduce處理53單一Reduce處理137138多Reduce處理54多Reduce處理138139無Redue處理55無Redue處理139140MapReduce工作原理56MapReduce工作原理140JobTracker一直在等待JobClient提交作業TaskTracker每隔3秒向JobTracker發送心跳詢問有沒有任務可做,如果有,讓其派發任務給它執行這是一道pull過程:slave主動向master拉生意141MapReduce工作原理JobTracker一直在等待JobClient提交作業57141142Hadoop中的MapReduce58Hadoop中的MapReduce142143MapReduce作業執行流程59MapReduce作業執行流程143默認為先進先出作業隊列調度支持公平調度支持容量調度144作業調度機制默認為先進先出作業隊列調度60作業調度機制144推測執行:既如果jobtracker發現拖后腿的任務,會再啟動相同的備份任務,然后那個先執行完成就會去kill掉另外一個。因此在監控網頁上經常能看到正常執行完成的作業有被kill的任務。推測執行默認打開,但是如果是代碼的問題,并不能解決問題,而且會使集群更慢,通過mapred-side.xml配置文件中設置mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution可為map任務或reduce任務開啟或者關閉推測執行。重用jvm,可以省去啟動新的jvm消耗時間,mapred-side.xml文件中設置mapred.job.reuse.jvm.num.tasks單個jvm最大執行的任務數(1,>1或-1表示沒有限制)忽略模式:任務在讀取任務數據失敗2次之后,會把數據位置報告給jobtracker,然后重新啟動該任務并在遇到所記錄的壞數據位置時直接跳過(默認關閉,同SkipBadRecord方法打開)145任務執行優化推測執行:既如果jobtracker發現拖后腿的任務,會再啟145硬件故障是指jobtracker故障或tasktracker故障Jobtracker是單點,若發生故障目前hadoop還無法處理,唯有選擇最牢靠的硬件作為jobtrackerJobtracker通過心跳信號(周期1分鐘)了解tasktracker是否發生故障或者負載過于嚴重Jobtracker將從任務節點列表中移除發生故障的tasktracker。如果故障節點在執行map任務并且尚未完成,jobtracker會要求其他節點重新執行此map任務如果故障節點在執行reduce任務并且尚未完成,jobtracker會要求其他節點重新執行尚未完成的reduce任務。146錯誤處理機制——硬件故障硬件故障是指jobtracker故障或tasktracker146由于代碼bug或進程崩潰引起任務失敗Jvm自動退出,向tasktracker父進程發生錯誤信息,錯誤信息也會寫入日志Tasktracker監聽程序會發現進程退出,或者進程很久沒有更新信息送回,將任務標記為失敗標記任務失敗后,任務計數器減1以便接受新的任務,并通過心跳信號通知jobtracker任務失敗的信息Jobtracker獲悉任務失敗后,將把該任務重新放入調度隊列,重新分配出去執行如果一個任務失敗超過4次(可配置),將不會再執行,同時宣告任務作業失敗。147錯誤處理機制——任務失敗由于代碼bug或進程崩潰引起任務失敗63錯誤處理機制——任務147148大綱原理Hadoop基本架構HDFS文件系統MapReduce分布式計算框架實踐安裝與配置編寫MapReduce程序介紹背景Hadoop起源成功的案例64大綱原理Hadoop基本架構實踐安裝與配置介紹背景148Hadoop安裝配置編寫MapReduce程序149實踐Hadoop安裝配置65實踐149支持平臺GNU/LinuxWindows(Cygwin)

溫馨提示

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

評論

0/150

提交評論