1. 程式人生 > >Hadoop生態系統之Hive和HBase and Zookeeper

Hadoop生態系統之Hive和HBase and Zookeeper

今天來說一下Hadoop生態系統中的Zookeeper,HBase,Hive,說到Zookeeper簡單來說其實就是Hadoop分散式框架的一個協調服務,也就是分散式應用都需要一個主控協調器或者控制器來管理物理分佈的子程序.那再說的明白點就是:Zookeeper在hadoop生態系統中的叢集擔任著非常重要的責任.叢集中的資源調配或者是服務的切換,都得需要他去管理.所以說在Hadoop生態系統中Hadoop是一頭大象,而Zookeeper卻是一個動物園的管理員.至於圖這裡就不展示了.百度一搜就有的.對了.告訴大家一個祕訣,學習Hadoop生態系統的前期,自己從網上下載一張這樣的圖解.特別有用.####特別推薦啊####

好了,言歸正傳啊.這個Zookeeper他包含一個簡單的原語集,分散式應用可以通過它,來實現一些同步服務,配置的服務和命名服務等.我們都知道Hadoop2.0時代迎來了高可用.那麼Zookeeper怎麼才能做到高可用那?那麼他的機制裡邊有一個leader和一些Follower當這個leader掛掉的時候這些Follower就會通過特殊的機制選出一個leader來.那麼究竟這個leader和Follower到底是什麼那,他們到底是幹什麼的那?我們可以這樣倒著想.我們剛才說Zookeeper是一個協調機制,那麼他既然要去維持這個生態系統,那麼他就要主控HDFS中的nameNode因為控制住了nameNode就真正的做到了協調者的這個角色.所以他要保證整個叢集,要有一個活躍的nameNode這樣才能夠儲存到dataNode上資訊.才能夠完成MapReduce和yarn機制.(服務).那麼這個leader中就有這樣一個機制,(他是監控整個叢集的,如果說一個叢集七臺機器的話,我就會有兩臺搭載nameNode兩臺搭載resourceManager然後如果說其中一臺的nameNode掛掉了,然後這個Leader和Follower就會有一個具體的選舉機制,然後再選舉另外一臺nameNode的機器,以保證正常的資料支援.)而Zookeeper中也有一個叫qjournal的機制目的在於(我們都知道在nameNode上有一個叫editsLog這個日誌檔案是要和nameNode的映象檔案去合併,從而達到更新nameNode.然後這個editsLog就存在於在這個qjournal這樣的每一個edits檔案就叫做一個qjournalnode,而zookeeper叢集中也有一個叫ZKFC的機制目的就在於一個nameNode為active一個為Standby當active掛掉的時候ZKFC會告訴Zookeeper 並且執行一些Kill active服務的機制 從而達到Standby上任的這樣一個目的)
我們剛才說過Zookeeper是一個搭建叢集的服務,因為他是一個協調框架.所以在搭建叢集的時候需要給他配置兩個配置檔案(具體是什麼,自己去上百度搜索,那速度嗖嗖的)    

繼續來說一下HBase首先他是一個分散式,版本化,面向列的資料庫.構建在Hadoop上和Zookeeper上.可以用HBase技術在廉價的PC Server上搭建起大規模的結構化儲存叢集.HBase利用Hadoop中的HDFS作為其檔案系統用Zookeeper作為協調工具.用Hadoop中的MapReduce作為其的計算系統來為他處理海量資料.HBase中的主鍵是用來檢索記錄的主鍵,訪問HBase table中的行,而HBase中的列族,一個列族可以包含多個列,列中的資料都是以二進位制的形式存在的,沒有資料型別.列也稱為:列名和列的識別符號,行有一個叫行標的識別符號.這樣就可以把一條資料根據列來顯示出來.'+'像十字架一樣相交的才是資料.啟動HBase:HBase如果啟動一個單節點的是不需要任何配置檔案的這裡我們只說單節點的配置檔案,後序會引出來叢集.先要進入/bin檔案,然後先啟動服務,  ./start-hbase.sh  之後在啟動客戶端, ./hbase shell這樣一執行這樣一個面向列的資料庫就啟動了.對了,忘了宣告一點,HBase是按住ctrl加backspace才是從後往前刪除,如果單單是按住backspace的話是從前往後刪除的.歸根到底其實HBase就是一個存放資料的載體,就比如Windows用的NTFS檔案系統,怎麼才能讀到其中所有的資料那,那麼我就會用一個數據庫去訪問本地的資源或者連線網路通過網路讓外部的計算機可以通過伺服器中的資料庫來訪問我的本地資源,那麼同樣別的計算機也可以通過網路流來向我傳輸一些檔案.這樣整體的一個數據訪問系統的目的就達到了.那麼同樣的道理,我在Hadoop生態系統上,用HBase資料庫的目的也是在於我Hadoop可以獲取資料,然後再交給MapReduce去計算得到使用者想要的資料.以上均為個人理解,如果有什麼差別之處,望指明.


最後來說一下Hive:Hive是建立在Hadoop上的資料倉庫基礎架構,它提供了一系列的工具,可以用來進行提取轉化載入這是一種可以儲存 查詢和分析儲存在Hadoop中的大規模資料的機制.Hive定義了簡單的類SQL語言,稱為QL,同時這個語言也允許熟悉MapReduce處理過程中無法mapper和reducer無法完成的複雜的分析工作.Hive的系統架構是:使用者介面:包括Java中連線資料庫的JDBC/ODBC,WebUI,CLI.元資料的儲存一般放在MySql或者derby資料庫中(derby很迷你,但是漏洞很多比如他是一個單例的他是用Java編寫的一個數據庫儲存系統),直譯器,編譯器,優化器,執行器,Hadoop:利用HDFS來進行儲存,利用MapReduce來計算海量資料.總結一下,Hive主要是在MapReduce處理不了的時候派上用場.因為什麼東西不是萬能的,總會有弊端的,所以說,在MapReduce無法完成的任務的之後,還有Hive去為你排憂艱難.這是最基本的用處.還有一個用處就是我們在文上也說過了,它是一個數據倉庫,也就是說用來儲存資料的,說到儲存資料了,我們就會想到資料庫,但是他和資料庫最根本的區別就是一點:他是把資料存放在HDFS上的,但是資料庫是一個自我的資料儲存系統,所以說兩者不可混淆,當然了,你只需要記住Hive是把資料存放在HDFS上的但是他還能夠幫助MapReduce來計算資料,所以他要 依託著Hadoop的.而HBase卻是一個存放資料的載體,而他的功能是寫入是資料和讀出來資料,這是他倆的根本的區別.OK The End Today.我剛學習的時候也總是理解不清楚,但是有貴人指路,終於可以在這裡給你們寫文件了.這是多麼艱難的一件事情啊.所以說遇到問題要積極的面對而且自己心裡要知道,這是在學習的時候最應該遇到的,該踩的坑都踩了,那麼你就牛逼了.Be strong , Believe in who you are;