我們為什麼需要HBase?

我們肯定聽說過HBase,但是對於HBase的了解可能僅僅是它是Hadoop生態圈重要的一員,它是大數據技術圈一個很強的開源項目。然後內心os:它很屌,但是我用mysql/oracle。

一門技術的興起,一個優秀的開源項目的存在肯定是有它所存在的意義,正如大數據一樣,正是因為隨著時間的發展,隨著技術的發展導致我們每天的數據增量達到一個非常龐大的狀態,同時在數據之中又能挖掘到很多有用的信息。所以才有了大數據技術的飛速發展。那麼,我們為什麼需要HBase,什麼時候需要HBase呢?


HBase是什麼?

HBase(Hadoop Database) 是一個高可靠性,高性能,可伸縮,面向列的分散式資料庫(也許叫做存儲系統會更加貼切)。

就跟Hadoop本身也是起源與Google發布的GFS和MapReduce相關的論文一樣,HBase是Google BigTable的開源實現。它整體的架構與BigTable很類似。例如:

Google BigTableHBase利用GFS作為文件存儲系統利用HDFS作為文件存儲系統運行MapReduce處理存儲的海量數據同樣利用Hadoop MapReduce處理海量數據利用Chubby作為協同服務利用Zookeeper作為協同服務

HBase與Hadoop的關係非常緊密,Hadoop的HDFS提供了高可靠性的底層存儲支持,Hadoop MapReduce為HBase提供了高性能的計算能力,Zookeeper為HBase提供了穩定性及failover機制的保障。同時其他周邊產品諸如Hive可以與HBase相結合使在HBase進行數據統計處理變得簡單,Sqoop為HBase提供了方便的RDBMS數據導入功能,使傳統資料庫的數據向HBase中遷移變得容易,Spark等高性能的內存分散式計算引擎也可能幫助我們更加快速的對HBase中的數據進行處理分析。


大數據的水很深,但是範圍適中。初學者都是紮根於Hadoop的生態圈,HBase是必學技能之一

為什麼選擇HBase?而不是Mysql或者Oracle

當我們開始學習一門技術的時候總是習慣於將它們與已有的技術進行對比。當我們剛接觸python的時候會發現它的簡潔與效率,當我們剛接觸php的時候也會探尋為啥它是最好的語言沒有之一。。。

那麼HBase經常會和常見的關係型資料庫進行對比:

HBaseMysql or Oracle列式,Nosql資料庫行式,關係型資料庫只支持byte[]類型支持多種數據類型支持海量數據存儲支持大量數據存儲只支持基於rowkey的索引支持每秒百萬查詢吞吐量每秒數千查詢吞吐量事務只支持到row級別完整的事務適合時間序列或者隨機查詢適合複雜查詢,多表關聯等數據維護形式單一,更新支持多個版本存在數據增刪改查非常方便,直接修改原有數據


其實兩者的對比毫無意義,因為兩者適用於不同的場景

HBase作為一個NoSQL,不支持完整的事務性,而且僅僅支持基於RowKey的索引,在性能上不如memcached和redis。但是在海量數據,持久化存儲方便比內存類型的NoSQL強的多,作為文檔型NoSQL在分散式存儲上比mongoDB做切分和MapReduce分析也簡單方便的多。這一切都源於HBase本身基於Hadoop,可以簡單的通過增加廉價節點的方式進行擴展,對於數據本身就可以很好的進行水平切分,同時和HDFS,MapReduce,Spark等結合的很好。不僅可以方便的進行存儲同時可以更加方便的對數據進行處理和運算,這才是HBase最核心的特性。這些都是常見的關係型資料庫無法比擬的。比其他常見的NoSQL也要強出不少。

當然,HBase並不能解決所有的問題,所以才會有那麼多的NoSQL和SQL

HBase典型的應用場景就是不斷的插入新的信息。對於持續的大量的插入可以達到每秒百萬的吞吐量。對於已有的數據修改的頻率是很小的。

Google用自己的BigTable存儲互聯網上新生成的網頁,Facebook的messenger是基於HBase實現的。

舉個栗子

在大數據相關的應用之中,假設你要存儲用戶的地址和喜好。這些當然可以存儲到關係型資料庫之中,但是假設用戶從上海搬到了北京。那麼之前上海的地址就要update覆蓋掉嗎?這種應用場景下,我們需要計算分析用戶的整個人生周期的活動記錄和喜好,進而推測他的行為,收入,知識層次,信用等等。這些歷史行為是不能被丟棄的,所以HBase可以很好的適應這樣的場景。

摘自知乎:《HBase為什麼火?它適用於哪些業務場景》中向磊的回答。

對於海量小文件存儲HBase也是非常適合的。對比於支持文檔型數據存儲的MongoDB,HBase寫優先於隨機讀,MongoDB的寫性能不如讀性能。兩者雖然都支持MapReduce但是HBase對MapReduce的支持更好,同時HBase本身就支持水平切分,在數據分片上也有很大的優勢。同時HBase本身就支持多個版本,對於多版本的數據存儲也很方便。Mongo對於複雜查詢支持較好,但是我們HBase也有Phoenix。

HBase很厲害,我要用HBase!!!

歡迎大家學習我的實戰課程《HBase+SpringBoot實戰分散式文件存儲》,全面了解HBase,更好的使用HBase。

作者: 叄金

鏈接:imooc.com/article/26090

來源:慕課網

本文原創發佈於慕課網 ,轉載請註明出處,謝謝合作


推薦閱讀:

打造個人品牌 so easy !_慕課手記

有獎徵文002期|聊聊AI人工智慧 贏取2018 GMIC大會門票及IT書籍

有獎徵文|談一談你是如何走上擼碼這條不歸路的?

十年磨一劍,慕課網與長城會集結全球AI界頂尖資源聯合打造的「洞見·人工智慧公開課」即將啟幕!

數據那些概念(數據、信息、分析、挖掘、機器學習、大數據、AI)


推薦閱讀:

2017年大數據學習計劃
【新媒體運營】怎麼分析大數據,大數據怎麼做營銷
阿里巴巴大數據之路-數據計算層
Tesseract-OCR 字元識別---樣本訓練
知識分享 | 不超3分鐘看懂「PHM」!

TAG:HBase | 大數據 | NoSQL |