一、MR和關係型數據node
MR和傳統的關係型數據庫處理的數據是不一樣,傳統關係型數據庫處理的是較結構化數據,對於半結構化和非機構話數據處理的還不是很好,MR正好對關係型數據不擅長領域作了補充,MR輸入的鍵值並非數據的固有屬性,而是由分析數據人員來選擇的,就目前看來他們是互補的關係,MR經過HIVE實現了hadoop固有的SQL,不過mr的適應性更強一些,不過隨着之後的發展關係型數據庫也會慢慢不斷髮展的。另一個值得注意的就是MR是基於數據流的數據處理,處理的是一種非結構化的數據,比SQL結構性數據更具備適用性,是這種編程更加具備伸縮性。數據庫
二、MR的核心是實現數據本地化,因爲MR是基於數據流式處理,因此帶寬資源就顯得尤其重要。編程
三、因爲MR採用的是無共享的框架,各節點之間都是相對獨立的,因此MR能夠檢測出節點失敗的狀況,在MR過程當中,R階段是要以M的結果爲輸入的,因此若是R沒有獲取到M的結果的時候會從新執行。在MR過程當中,R的output輸出目錄是不能存在的,不然沒法執行,一個長時間執行後的結果被覆蓋是一件很懊惱的事情。緩存
四、MR過程當中有兩個很重要的角色JobTracker和TaskTracker,能夠打個比喻,J至關於管理員(負責分配任務),管理者一批員工T(負責執行任務),員工執行任務要從J那邊獲得任務編號才能夠進行任務執行。網絡
五、hadoop將輸入數據分紅等長的數據分片,每個分片都是一個map任務,並由用戶自定義的函數MR來處理分片中的的每一條記錄。框架
六、決定整個做業時間的主要因素分爲兩種一、管理分片的時間二、map建立任務的時間函數
七、數據本地優化,各節點執行map,各個節點存有的數據分片越趨向於HDFS分塊能夠得到最佳性能,這樣確保了單個節點的最大輸出塊。輸出塊的大小根據硬件和集羣的實際狀況而定,磁盤的讀取量。R階段並不具有本地化的優點,他的輸入一般是來自M的結果,所以須要經過網絡進行傳輸發送到任務R節點上,這裏就涉及到帶寬問題了,由於咱們應該儘可能減小M向R的輸入,經過一些其餘的手段如COMBINER或者並行輸入或者經過壓縮數據流的手段等。oop
八、hadoop目前不適用的場景 一、低時間延遲的 能夠考慮Storm 或者Spark 二、大量小文件,主要緣由是全部的數據塊元數據信息都存放在namenode文件夾下,這樣大量的小文件會形成namenode文件內存被佔用 三、多用戶寫入,任意修改的,由於hadoop設計的初衷是爲了一次寫入,屢次讀取的。性能
九、HDFS的數據塊大於磁盤的塊是爲了減小尋址。優化
十、namenode管理着全部datanode的域名空間,他維護着文件系統及整棵樹的文件目錄,這些信息被永久的保存在本地磁盤上,namenode也記錄着各個節點的數據信息,可是他並不保存在本地磁盤上,隨着每次重啓都要重構節點信息。更要命的是namenode是單節點,一個集羣只有一個namenode因此一旦namenode出現問題,整個集羣癱瘓了,若是使用keepalived的話,能夠做爲輔助節點,可是不免仍是會有數據的丟失。聽說hadoop2.x已經解決了這個問題。
十一、HDFS客戶端經過DistributedFileSystem 得到一個FsDataInputStream對象,從na
menode那裏獲取到datanode的文件位置信息。DFSoutputStream處理datanode和namenode之間的通訊。
十二、一致模型:在讀取數據的時候,FSDdataoutputstream獲得的數據是按塊來顯示的就是說,塊在讀取的時候不能當即顯示須要等該塊讀完了,這樣就形成了數據緩存,一旦集羣發生故障數據塊丟失生產環境下是不容許的,HDFS提供了一個方法來強制全部的緩存與數據節點保持同步即對FSDataOutPutStream調用sync(),能保證到目前爲止寫入數據的一致性,不過這樣會對應用增長一些額外的性能開銷,因此引用該方法還須要根據集羣性能的均衡而定。
1三、並行複製,典型的應用就是兩個HDFS之間的傳輸,該方法能夠從hadoop文件系統複製大量的數據,也能夠將大量數據從hadoop複製出來。這裏咱們能夠優化儘可能的減小MAP構建,儘可能讓他多複製。