天天看點

04 06 07 08 040607hbase

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.僞分布式配置檔案

04 06 07 08 040607hbase

7.啟動HDFS,啟動Hbase

04 06 07 08 040607hbase
04 06 07 08 040607hbase

8.進入shell界面

04 06 07 08 040607hbase

9.停止Hbase,停止HDFS運作

04 06 07 08 040607hbase

1.了解HBase表模型及四維坐标:行鍵、列族、列限定符和時間戳。

2.啟動HDFS,啟動HBase,進入HBaseShell指令行。

04 06 07 08 040607hbase
04 06 07 08 040607hbase

3.列出HBase中所有的表資訊list

04 06 07 08 040607hbase

4.建立表create

04 06 07 08 040607hbase

5.檢視表詳情desc

04 06 07 08 040607hbase

6.插入資料put

04 06 07 08 040607hbase

7.檢視表資料scan,get

04 06 07 08 040607hbase

08

WordCount程式任務:

程式

WordCount

輸入

一個包含大量單詞的文本檔案

輸出

檔案中每個單詞及其出現次數(頻數),

并按照單詞字母順序排序,

每個單詞和其頻數占一行,單詞和頻數之間有間隔

1.用你最熟悉的程式設計環境,編寫非分布式的詞頻統計程式。

讀檔案

分詞(text.split清單)

按單詞統計(字典,key單詞,value次數)

排序(list.sort清單)

04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase
04 06 07 08 040607hbase