一.hadoop是什麼
Hadoop被公認是一套行業大資料標準開源軟體,在分散式環境下提供了海量資料的處理能力。幾乎所有主流廠商都圍繞Hadoop開發工具、開源軟體、商業化工具和技術服務。今年大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明顯增加了Hadoop方面的投入。
二 .hadoop能幹什麼hadoop擅長日誌分析,facebook就用Hive來進行日誌分析,2009年時facebook就有非程式設計人員的30%的人使用HiveQL進行資料分析;淘寶搜尋中的自定義篩選也使用的Hive;利用Pig還可以做高階的資料處理,包括Twitter、LinkedIn 上用於發現您可能認識的人,可以實現類似Amazon.com的協同過濾的推薦效果。淘寶的商品推薦也是!在Yahoo!的40%的Hadoop作業是用pig執行的,包括垃圾郵件的識別和過濾,還有使用者特徵建模。(2012年8月25新更新,天貓的推薦系統是hive,少量嘗試mahout!)
三.hadoop的核心1.HDFS: Hadoop Distributed File System 分散式檔案系統
2.YARN: Yet Another Resource Negotiator 資源管理排程系統
3.Mapreduce:分散式運算框架
四.HDFS的架構主從結構:
主節點, namenode
從節點,有很多個: datanode
namenode負責:
接收使用者操作請求
維護檔案系統的目錄結構
管理檔案與block之間關係,block與datanode之間關係
datanode負責:
儲存檔案
檔案被分成block儲存在磁碟上
為保證資料安全,檔案會有多個副本
Secondary NameNode負責:
合併fsimage和edits檔案來更新NameNode的metedata
五.Hadoop的特點擴容能力(Scalable):能可靠地(reliably)儲存和處理千兆位元組(PB)資料。
成本低(Economical):可以通過普通機器組成的伺服器群來分發以及處理資料。這些伺服器群總計可達數千個節點。
高效率(Efficient):通過分發資料,hadoop可以在資料所在的節點上並行地(parallel)處理它們,這使得處理非常的快速。
可靠性(Reliable):hadoop能自動地維護資料的多份副本,並且在任務失敗後能自動地重新部署(redeploy)計算任務。
六.NameNode1.簡介
namenode是整個檔案系統的管理節點。他維護著整個檔案系統的檔案目錄樹,檔案/目錄的元資訊和每個檔案對應的資料塊列表。接收使用者的操作請求。
檔案包括:
fsimage:元資料映象檔案。儲存某一時段NameNode記憶體元資料資訊。
edits:操作日誌檔案。
fstime:儲存最近一次checkpoint的時間。
2.NameNode的工作特點
NameNode始終在記憶體中儲存metedata,用於處理“讀請求”,到有“寫請求”到來時,NameNode首先會寫editlog到磁碟,即向edits檔案中寫日誌,成功返回後,才會修改記憶體,並且向客戶端返回。
Hadoop會維護一個人fsimage檔案,也就是NameNode中metedata的映象,但是fsimage不會隨時與NameNode記憶體中的metedata保持一致,而是每隔一段時間通過合併edits檔案來更新內容。Secondary NameNode就是用來合併fsimage和edits檔案來更新NameNode的metedata的。
3.什麼時候checkpoint
fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,預設3600秒。
fs.checkpoint.size 規定edits檔案的最大值,一旦超過這個值則強制checkpoint,不管是否到達最大時間間隔。預設大小是64M。
七.SecondaryNameNode1.簡介
HA的一個解決方案。但不支援熱備。配置即可。
執行過程:從NameNode上下載元資料資訊(fsimage,edits),然後把二者合併,生成新的fsimage,在本地儲存,並將其推送到NameNode,替換舊的fsimage.
預設在安裝在NameNode節點上,但這樣...不安全!
2.工作流程
(1)secondary通知namenode切換edits檔案;
(2)secondary從namenode獲得fsimage和edits(通過http);
(3)secondary將fsimage載入記憶體,然後開始合併edits;
(4)secondary將新的fsimage發回給namenode;
(5)namenode用新的fsimage替換舊的fsimage;
八.DataNode提供真實檔案資料的儲存服務。
檔案塊(block):最基本的儲存單位。對於檔案內容而言,一個檔案的長度大小是size,那麼從檔案的0偏移開始,按照固定的大小,順序對檔案進行劃分並編號,劃分好的每一個塊稱一個Block。HDFS預設Block大小是128MB,以一個256MB檔案,共有256/128=2個Block.
dfs.block.size
不同於普通檔案系統的是,HDFS中,如果一個檔案小於一個數據塊的大小,並不佔用整個資料塊儲存空間;
Replication:多複本。預設是三個。
九.HDFS(1)讀過程
1.初始化FileSystem,然後客戶端(client)用FileSystem的open()函式開啟檔案
2.FileSystem用RPC呼叫元資料節點,得到檔案的資料塊資訊,對於每一個數據塊,元資料節點返回儲存資料塊的資料節點的地址。
3.FileSystem返回FSDataInputStream給客戶端,用來讀取資料,客戶端呼叫stream的read()函式開始讀取資料。
4.DFSInputStream連線儲存此檔案第一個資料塊的最近的資料節點,data從資料節點讀到客戶端(client)
5.當此資料塊讀取完畢時,DFSInputStream關閉和此資料節點的連線,然後連線此檔案下一個資料塊的最近的資料節點。
6.當客戶端讀取完畢資料的時候,呼叫FSDataInputStream的close函式。
7.在讀取資料的過程中,如果客戶端在與資料節點通訊出現錯誤,則嘗試連線包含此資料塊的下一個資料節點。
8.失敗的資料節點將被記錄,以後不再連線。
(2)寫過程
1.初始化FileSystem,客戶端呼叫create()來建立檔案
2.FileSystem用RPC呼叫元資料節點,在檔案系統的名稱空間中建立一個新的檔案,元資料節點首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案。
3.FileSystem返回DFSOutputStream,客戶端用於寫資料,客戶端開始寫入資料。
4.DFSOutputStream將資料分成塊,寫入data queue。data queue由Data Streamer讀取,並通知元資料節點分配資料節點,用來儲存資料塊(每塊預設複製3塊)。分配的資料節點放在一個pipeline裡。Data Streamer將資料塊寫入pipeline中的第一個資料節點。第一個資料節點將資料塊傳送給第二個資料節點。第二個資料節點將資料傳送給第三個資料節點。
5.DFSOutputStream為發出去的資料塊儲存了ack queue,等待pipeline中的資料節點告知資料已經寫入成功。
6.當客戶端結束寫入資料,則呼叫stream的close函式。此操作將所有的資料塊寫入pipeline中的資料節點,並等待ack queue返回成功。最後通知元資料節點寫入完畢。
7.如果資料節點在寫入的過程中失敗,關閉pipeline,將ack queue中的資料塊放入data queue的開始,當前的資料塊在已經寫入的資料節點中被元資料節點賦予新的標示,則錯誤節點重啟後能夠察覺其資料塊是過時的,會被刪除。失敗的資料節點從pipeline中移除,另外的資料塊則寫入pipeline中的另外兩個資料節點。元資料節點則被通知此資料塊是複製塊數不足,將來會再建立第三份備份。
好啦今天的分享就到這裡啦,小編每天更新兩篇文章,喜歡小編可以關注下,萬分感謝。