Hadoop的一些問題

關係數據庫已經流行很多年,並且Hadoop已經有了HDFS和MapReduce,爲什麼需要HBase?

  • Hadoop可以很少地解決大規模數據的離線批量處理問題,但是,受限於hadoop MapReduce編程框架的高延遲數據處理機制,使得hadoop無法滿足大規模數據實施處理應用的需求
  • HDFS面向批量訪問模式,不是隨機訪問模式。
  • 傳統的通用關係型數據庫無法應對在數據規模劇增時導致的系統擴展性和性能問題(分庫分表也不能很好的解決)
  • 傳統關係數據庫在數據結構變化時一般需要停機維護,空列浪費存儲空間
  • 因此,業界出現了一類面向半結構化數據存儲和處理的高擴展、低寫入、查詢延遲的系統,例如,鍵值數據庫、文檔數據庫和列族數據庫(如BigTable和HDase)
  • Hbase已經成功應用於互聯網服務領域和傳統行業的衆多在線模式數據分析處理系統中

HBase與傳統的關係數據庫的區別主要體現在哪幾個方面?

  1. 數據類型:關係數據庫採用關係模型,具有豐富的數據類型和存儲方式,HBase則採用而更加簡單的數據模型,它把數據存儲爲未經解釋的字符串。

  2. 數據操作:關係數據庫中包含了豐富的操作,其中會涉及複雜的奪標連接,HBase操作則不存在複雜的表與表之間的關係,則只有簡單的插入,查詢,刪除已,清空等,因爲HBase在涉及上就避免了複雜的表與表之間的關係。

  3. 存儲模式:關係數據庫是基於行模式存儲的。HBase是基於列存儲的,每個列族都由幾個文件保存,不同列族的文件是分離的。

  4. 數據索引:關係數據庫通常可以針對不同列構建複雜的多個索引,以提高數據訪問的性能。HBase只有一個索引-----行鍵,通過巧妙的設計HBase的所有方法,或者通過行鍵訪問,或者通過行鍵掃描,從而整個系統不會慢下來。

  5. 數據維護:在關係數據庫中,更新操作會用最新的當前值去替換記錄中的原來的舊值,舊值被覆蓋夠就不會存在,而在HBase中執行更新操作時,不糊並不會刪除數據舊的版本,而是生成一個新的版本,舊的有的版本保留。

  6. 可伸縮性:關係數據庫很難實現橫向擴展,縱向擴展的空間也比較有限。相反,HBase和BigTable這些分佈式數據就是爲了實現靈活的水平擴展而開發的,能夠輕易地通過在集羣中增加或減少硬件數量來實現性能的伸縮。

    HBase訪問接口有很多,請說明一下Native Java API接口、Pig接口和Hive接口的特點以及它們應用的場合。

類型 特點 場合
Native JAVA API 最常規和高效的訪問方式 適合Hadoop MapReduce作業並行批處理HBase表數據
HBase Shell Hbase的命令行工具,最簡單的接口 適合HBase管理使用
THrift Gateway 利用Thrift序列化技術,支持C++,PHP,Python等多種語言 適合其他異構系統在線訪問HBase表數據
REST Gateway 解除了語言的限制 支持REST風格的Http API訪問HBase
Pig 使用PigLatin流式編程語言來處理HBase中的數據 適合做數據統計
Hise 簡單 當需要以類似SQL語言方式來訪問HBase的時候
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章