1、之所以選擇 HDFS 存儲數據,是因為 HDFS 具有以下優點:
(1) 高容錯性
1) 數據自動保存多個副本。它通過增加副本的形式,提高容錯性。
2) 某一個副本丟失以后,它可以自動恢復,這是由 HDFS 內部機制實現的,我們不必關心。
(2) 適合批處理
1) 它是通過移動計算而不是移動數據。
2) 它會把數據位置暴露給計算框架。
(3) 適合大數據處理
1) 數據規模:能夠處理數據規模達到 GB、TB、甚至PB級別的數據。
2) 文件規模:能夠處理百萬規模以上的文件數量,數量相當之大。
3) 節點規模:能夠處理10K節點的規模。
(4) 流式數據訪問
1) 一次寫入,多次讀取,不能修改,只能追加。
2) 它能保證數據的一致性。
(5) 可構建在廉價機器上
1) 它通過多副本機制,提高可靠性。
2) 它提供了容錯和恢復機制。比如某一個副本丟失,可以通過其它副本來恢復。
2、 HDFS 缺點:
(1) 不適合低延時數據訪問;
1) 比如毫秒級的來存儲數據,這是不行的,它做不到。
2) 它適合高吞吐率的場景,就是在某一時間內寫入大量的數據。但是它在低延時的情況 下是不行的,比如毫秒級以內讀取數據,這樣它是很難做到的。
改進策略
(2) 無法高效的對大量小文件進行存儲
1) 存儲大量小文件的話,它會占用 NameNode大量的內存來存儲文件、目錄和塊信息。這樣是不可取的,因為NameNode的內存總是有限的。
2) 小文件存儲的尋道時間會超過讀取時間,它違反了HDFS的設計目標。 改進策略
(3) 並發寫入、文件隨機修改
1) 一個文件只能有一個寫,不允許多個線程同時寫。
2) 僅支持數據 append(追加),不支持文件的隨機修改。