1.用圖與自己的話,簡要描述Hadoop起源與發展階段。(作業3中剪過來)
Hadoop最早起源于Nutch。Nutch的設計目标是建構一個大型的全網搜尋引擎,包括網頁抓取、索引、查詢等功能,但随着抓取網頁數量的增加,遇到了嚴重的可擴充性問題——如何解決數十億網頁的存儲和索引問題。
2003年、2004年谷歌發表的兩篇論文為該問題提供了可行的解決方案。一個是分布式檔案系統(GFS),可用于處理海量網頁的存儲,另一個是分布式計算框MAPREDUCE,可用于處理海量網頁的索引計算問題。
Nutch的開發人員完成了相應的開源實作HDFS和MAPREDUCE,并從Nutch中剝離成為獨立項目HADOOP,到2008年1月,HADOOP成為Apache頂級項目,從此Hadoop演變成多個軟體的生态圈。
2006年Google發表了論文是關于BigTable的,這促使了後來的Hbase的發展。
是以,Hadoop及其生态圈的發展離不開Google的貢獻。
總而言之,狹義上來說,hadoop就是單獨指代hadoop這個軟體,廣義上來說,hadoop指代大資料的一個生态圈,包括很多其他的軟體。
(2)Hadoop不同版本1.x,2.x與3.x的差別
1.x版本系列:hadoop版本的第二代開源版本,主要修複0.x版本的一些bug等
2.x版本系列:架構産生重大變化,引入了yarn平台等許多新特性
3.x版本系列:對HDFS、MapReduce、YARN都有較大更新,還新增了Ozone key-value存儲。
(3)不同公司發行版本
1.免費開源版本apache:
優點:擁有全世界的開源貢獻者,代碼更新疊代版本快。
缺點:版本的更新、維護、相容性、更新檔都可能考慮不太周到,學習可以用,不适合實際生産工作。
2.免費開源版本hortonWorks:
hortonworks主要是雅虎主導Hadoop開發的副總裁,帶領二十幾個核心成員成立Hortonworks,核心産品軟體HDP(ambari),HDF免費開源,并且提供一整套的web管理界面,讓使用者可以通過web界面管理自己的叢集狀态。
3.軟體收費版本ClouderaManager:
cloudera主要是美國一家大資料公司在apache開源hadoop的版本上,通過自己公司内部的各種更新檔,實作版本之間的穩定運作,大資料生态圈的各個版本的軟體都提供了對應的版本,解決了版本的更新困難,版本相容性等各種問題,最适合實際生産環境。
2.用圖與自己的話,簡要描述名稱節點、資料節點的主要功能及互相關系、名稱節點的工作機制。
(1)描述HDFS名稱節點、資料節點的主要功能
在HDFS中,節點分為兩類:名稱節點、資料節點;
名稱節點:名稱節點負責管理分布式檔案系統的命名空間,它儲存了兩個核心的資料結構——FsImage、EditLog;
HDFS命名空間:目錄、檔案、塊。
HDFS命名空間的管理,是指對HDFS中目錄、檔案、塊做類似檔案系統的建立、修改、删除等基本操作。
FsImage:維護檔案系統樹 以及 檔案樹中的檔案和檔案夾的中繼資料;
EditLog:記錄針對檔案的建立、删除、重命名等這樣的更新操作;
FsImage、EditLog工作原理:
名稱節點運作期間,HDFS内的更新操作被寫入到EditLog檔案中,随着更新操作的不斷發生,EditLog也将不斷變大。
名稱節點在每次重新開機時,将FsImage加載到記憶體中,再逐條執行EditLog中的記錄,使FsImage保持最新狀态。
存在問題:EditLog過大時
名稱節點在啟動過程中處于“安全模式”,隻能對外提供讀操作,無法提供寫操作。當啟動過程結束之後,系統将退出安全模式,對外提供正常的讀寫操作。但是,若EditLog很大會使得啟動過程運作很慢,名稱節點長期處于安全模式下,無法對外提供寫操作。
解決問題:第二名稱節點SecondaryNameNode
SecondaryNameNode有兩個主要功能,針對此問題,它的功能主要是——完成EditLog與FsImage的合并操作,減小EditLog的檔案大小,以縮短名稱節點啟動時間。
每隔一段時間,SecondaryNameNode會與NameNode進行通信,請求NameNode停止使用EditLog檔案,讓NameNode将這之後新到達的寫操作寫入到一個新的檔案EditLog.new中;然後SecondaryNameNode将EditLog、FsImage拉回至本地,加載到記憶體中——即将FsImage加載到記憶體中,再逐條執行EditLog中的記錄,使FsImage保持最新。
以上,便是EditLog與FsImage的合并過程,合并完成之後,SecondaryNameNode将已經更新的FsImage檔案發送到NameNode,NameNode收到後,就用這個最新的FsImage檔案替換掉舊的FsImage,同時用EditLog.new檔案去替換EditLog檔案,這樣一替換,同時也減小的EditLog檔案的大小。
SecondaryNameNode的第二個功能:作為名稱節點的檢查點
從以上“合并過程”能看出,SecondaryNameNode會定期與NameNode通信,擷取舊檔案合并後得到一個FsImage的新檔案。SecondaryNameNode周期性的備份NameNode中的中繼資料資訊,當NameNode發生故障時,可用SecondaryNameNode中記錄的中繼資料資訊進行恢複。
但是,在合并、檔案替換期間的更新操作并沒有被寫到新的FsImage檔案中去,是以如果在這回期間發生故障,系統會丢失部分中繼資料資訊。
總而言之,SecondaryNameNode和NameNode記憶體需求相同,兩者是運作在不同的機器上的。
資料節點:是HDFS的工作節點,負責資料的存儲和讀取。
用戶端從HDFS讀取資料過程:在HDFS内部,一個檔案是被分片成了若幹個資料塊了的,這些資料塊被分布的存儲到若幹個資料節點上。
用戶端要擷取HDFS内的資料時,首先将檔案名發送給名稱節點;名稱節點根據檔案名找到對應資料塊資訊,再根據資料塊資訊,找到存儲了這些塊的資料節點位置資訊。
找到資料節點位置資訊後将這些資訊發送給用戶端,用戶端據此直接通路資料節點,并擷取資料。
在以上所述的通路過程中,名稱節點并不參與資料的傳輸,它隻是實作了類似索引的功能。
(2)描述HDFS互相關系、名稱節點的工作機制
(1)第一次啟動namenode格式化後,建立fsimage和edits檔案。如果不是第一次啟動,直接加載編輯日志(edits)和鏡像檔案(fsimage)到記憶體
(2)用戶端對中繼資料進行增删改的請求
(3)namenode記錄記錄檔,更新滾動日志
(4)namenode在記憶體中對資料進行增删改查
(1)Secondary NameNode詢問namenode是否需要checkpoint。直接帶回namenode是否檢查結果。
(2)Secondary NameNode請求執行checkpoint。
(3)namenode滾動正在寫的edits日志
(4)将滾動前的編輯日志和鏡像檔案拷貝到Secondary NameNode
(5)Secondary NameNode加載編輯日志和鏡像檔案到記憶體,并合并。
(6)生成新的鏡像檔案fsimage.chkpoint
(7)拷貝fsimage.chkpoint到namenode
(8)namenode将fsimage.chkpoint重新命名成fsimage
(1) 一個資料塊在 DataNode 上以檔案形式存儲在磁盤上,包括兩個檔案,一個是資料本身,一個是中繼資料包括資料塊的長度,塊資料的校驗和,以及時間戳;
(2) DataNode 啟動後向 NameNode 注冊,通過後,周期性(1小時)的向 NameNode 上報所有的塊資訊;
(3) 心跳是每3秒一次,心跳傳回結果帶有 NameNode 給該 DataNode 的指令如複制塊資料到另一台機器,或删除某個資料塊。如果超過10分鐘沒有收到某個 DataNode 的心跳,則認為該節點不可用;
(4) 叢集運作中可以安全加入和退出一些機器。
3.分别從以下這些方面,梳理清楚HDFS的 結構與運作流程,以圖的形式描述。
用戶端與HDFS
用戶端讀
用戶端寫
資料結點與叢集
資料結點與名稱結點
名稱結點與第二名稱結點
資料結點與資料結點
資料備援
資料存取政策
資料錯誤與恢複
4.簡述HBase與傳統資料庫的主要差別
①資料類型:Hbase隻有簡單的資料類型,隻保留字元串;傳統資料庫有豐富的資料類型。
②資料操作:Hbase隻有簡單的插入、查詢、删除、清空等操作,表和表之間是分離的,沒有複雜的表和表之間的關系;傳統資料庫通常有各式各樣的函數和連接配接操作。
③存儲模式:Hbase是基于列存儲的,每個列族都由幾個檔案儲存,不同列族的檔案是分離的,這樣的好處是資料即是索引,通路查詢涉及的列大量降低系統的I/O,并且每一列由一個線索來處理,可以實作查詢的并發處理;傳統資料庫是基于表格結構和行存儲,其沒有建立索引将耗費大量的I/O并且建立索引和物化試圖需要耗費大量的時間和資源。
④資料維護:Hbase的更新實際上是插入了新的資料;傳統資料庫隻是替換和修改。
⑤可伸縮性:Hbase可以輕松的增加或減少硬體的數目,并且對錯誤的相容性比較高;傳統資料庫需要增加中間層才能實作這樣的功能。
⑥事務:Hbase隻可以實作單行的事務性,意味着行與行之間、表與表之前不必滿足事務性;傳統資料庫是可以實作跨行的事務性。
5.梳理HBase的結構與運作流程,以用圖與自己的話進行簡要描述,圖中包括以下内容:
Master主伺服器的功能
Region伺服器的功能
Zookeeper協同的功能
Client用戶端的請求流程
四者之間的相系關系
與HDFS的關聯
6.完整描述Hbase表與Region的關系,三級尋址原理。
四者之間的相系關系:
①Hbase叢集有兩種伺服器:一個Master伺服器和多個RegionServer伺服器。
②Master服務負責維護表結構資訊和各種協調工作,比如建表、删表、移動region、合并等操作。
③用戶端擷取資料是由用戶端直連RegionServer的,是以Master服務挂掉之後依然可以查詢、存儲、删除資料,就是不能建新表了。
④RegionServer非常依賴Zookeeper服務,Zookeeper管理Hbase所有的RegionServer資訊,包括具體的資料段存放在那個RegionServer上。
⑤用戶端每次與Hbase連接配接,其實都是先于Zookeeper通信,查詢出哪個RegionServer需要連接配接,然後再連接配接RegionServer;用戶端從Zookeeper擷取了RegionServer的位址後,會直接從RegionServer擷取資料。
與HDFS的關聯:
RegionServer儲存的資料直接存儲在Hadoop的HDFS上。
1.下載下傳壓縮檔案
2.解壓
3.修改檔案夾名
4.修改檔案夾權限
5.配置環境變量
6.僞分布式配置檔案

7.啟動HDFS,啟動Hbase
8.進入shell界面
9.停止Hbase,停止HDFS運作
1.了解HBase表模型及四維坐标:行鍵、列族、列限定符和時間戳。
2.啟動HDFS,啟動HBase,進入HBaseShell指令行。
3.列出HBase中所有的表資訊list
4.建立表create
5.檢視表詳情desc
6.插入資料put
7.檢視表資料scan,get
08
WordCount程式任務:
程式
WordCount
輸入
一個包含大量單詞的文本檔案
輸出
檔案中每個單詞及其出現次數(頻數),
并按照單詞字母順序排序,
每個單詞和其頻數占一行,單詞和頻數之間有間隔
1.用你最熟悉的程式設計環境,編寫非分布式的詞頻統計程式。
讀檔案
分詞(text.split清單)
按單詞統計(字典,key單詞,value次數)
排序(list.sort清單)
