一:介紹
hadoop是項目的總稱,起源于作者兒子的一隻吃飽了的大象的名字。主要是由hdfs、mapreduce和hbase組成。
hdfs是google file system(gfs)【分布式存儲】的java開源實作。(有篇關于gfs的論文)
mapreduce是google mapreduce【并行計算執行架構】的java開源實作。(有篇關于mapreduce的論文)
hbase(列式存儲)是google bigtable的開源實作。·(有篇關于bigtable的論文)
hadoop的hdfs最初是為了解決nutch爬取網絡資料的海量存儲問題,mapreduce最初是為了解決多台機器存儲海量 資料後建索引複雜的問題
二:
hdfs:新增、删除、查詢檔案流程
hdfsclient對namecode發起請求(新增、删除、查詢),eg:新增檔案
1.namenode:
名位元組點(隻有一個),存儲檔案中繼資料,eg:檔案大小、權限、所有者、包含哪些塊block、block儲存在哪個datanode上(這個由datanode啟動時上報,隻是存在記憶體上,并不存在namenode的磁盤檔案fsp_w_picpath上)
存儲的磁盤檔案名為:fsp_w_picpath,此外還有個檔案名edits的檔案記錄着對metadata的記錄檔,eg:新增一個檔案等
2.secondarynamenode
根據設定的時間間隔(預設3600s),拷貝并合并fsp_w_picpath和edits為最新的fsp_w_picpath,再傳回給namenode節點伺服器(操作都是現在記憶體,再落地,是以記憶體的資料是最新的)
3.datanode:
資料節點(可以有多個),存放檔案内容,存放的時候,也同時會生成多個 檔案内容一模一樣的 副本集
4.hdfsclient
三:
hdfs優點:
1.高容錯性:資料自動儲存多個副本,副本丢失後,自動恢複
2.适合大資料處理:gb、tb甚至pb級别資料
3.可建構在廉價機器上:通過多副本提高可靠性、提供容錯和恢複機制
hdfs缺點:
1.不太适合 低延遲資料通路的要求(eg:毫秒級),因為hadoop上存儲資料量太多
2.不太适合大量小檔案的存取,因為namenode占用太多的記憶體
3.不太适合并發寫入、檔案随機修改(eg:網盤,網盤上檔案的内容是不能修改的)
五:hdfs資料存儲單元是block
一個檔案存儲方式是:按大小被切分成若幹個block,存儲到不同節點上,預設情況下每個block都有3(數值可修改)個副本,預設block大小為64mb,可配置,若檔案大小不到64mb,則單獨存成一個block
六:hdfs讀取流程
hdfs client -> open namenode,傳回block個數和位置等資訊給用戶端 -> 并發讀取檔案塊,組合成一個檔案傳回給用戶端 -> 關閉流
七:hdfs寫流程
hdfs client ->create,在namenode寫入資訊,eg:檔案大小、檔案分多少block,傳回給hdfs client ->寫入datanode,對于副本,背景啟動線程執行,hdfd client不負責副本的生成->告訴hdfs client完成,并把block分布在datanode的資訊告訴namenode
八:安裝
1、僞分布式:所有節點在同一台機器上
2、分布式:所有節點不是在同一台機器
九:hadoop分布式計算架構,什麼是分布式計算:移動計算而不移動資料
9.1:mapruduce:适合離線計算
1.map:任務的分解
2:reduce:結果的彙總
十:jobtracker tasktracker
十一: