1. 程式人生 > >HBase知識體系探究與整理

HBase知識體系探究與整理

Web架構

業務日誌一般由Tomcat或Nginx生成(Tomcat業務日誌帶sessionid,Nginx不帶),而中大型網際網路公司的web架構一般由LVS(Linux虛擬伺服器)+Keepalived+Nginx+Tomcat組成。由Nginx單獨掛載Tomcat,用Keepalived做主備,使用者基數多的還會在前面掛智慧CDN。Nginx理論上可以併發連線五萬條請求,但實際上只有三萬左右。此時假如有五萬零一個或三萬零一個連線請求,我得等第一個連線響應完畢,於是就催生了LVS的需求,它相當於一個漏斗,預設也是五萬條,但它可以不斷的增加連線池,使負載加大。比如天貓商城在做活動、雙十一等都會用到LVS技術。

這裡寫圖片描述
LVS提供虛擬服務,nginx作為反向代理伺服器實現負載均衡,keepalived實現主從熱備,檢查RealServer的健康狀態及主備機之間的失效轉移。
VIP(Virtual IP)為192.168.0.16,使用者只需要訪問這個IP地址即可獲得網頁服務:
負載均衡主機+備機->keepalived與Web伺服器->realserver+nginx+tomcat

簡介

一般資料分析專案整體流程為:web架構->平臺->資料庫->BI(報表)
根據BI來觀察PV(page view)頁面瀏覽量,進一步判斷做完推廣是否有成效,怎樣調整更有意義,一般前期較為簡單,後續運維比較難。我們的平臺把統計結果存入資料庫(關係型|NoSQL型),前端再做報表展示。

  • HBase就是一種NoSQL,Google Bigtable的開源實現,提供高可靠性(有主備)、高效能(機器多)、面向列、可伸縮(可以動態增刪節點)的分散式儲存系統。它可以提供儲存和處理服務,即存+計算,MapReduce執行在HBase(底層基於HDFS)上。
  • eg.Google Bigtable用GFS作為其檔案儲存系統,它用Hadoop HDFS作為其檔案儲存系統;
    Google執行MapReduce處理Bigtable的海量資料,它用Hadoop MapReduce處理HBase中的海量資料;
    Google Bigtable用Chubby作為協同服務,它用Zookeeper作對應。
    注:Spark程式碼簡單,效能遠超MapReduce。在大資料行業,技術更新換代非常快。

與傳統資料庫的對比
傳統資料庫遇到的問題:
①資料量很大時無法儲存;②無很好的備份機制;③資料達到一定量開始緩慢,資料很大時基本無法支撐。
HBase優勢:
①線性擴充套件,隨資料量增多可擴充套件節點;②資料儲存在HDFS上,備份機制健全;③通過zookeeper協調查詢資料,訪問速度快。
HBase叢集中的角色:①HMaster,一個或多個主節點;②HRegionServer,多個從節點。

解析
我們通過my.ini檔案的datadir屬性找到MySQL表文件的路徑,進入檢視可發現數據庫就是資料夾,表就是檔案,底層是Windows或Linux檔案系統,MySQL無非就是做了解析和執行的軟體。HDFS是嵌在本地環境下的的分散式檔案系統,說白了就是把底下眾多硬碟串在一塊的軟體,和MySQL思想差不多。
而HBase列式思想,則把行式資料庫的列轉換成了行,同時如果列儲存了很多資料,它會幫我們做分塊並做索引,告訴我們從第0-5萬條記錄在哪一塊,從第5萬零一到十萬條記錄在哪一塊。
HBase類比MySQL,HDFS類比MySQL底下的檔案系統。列式的不能做多表關聯,它只適合存海量資料。

我們再來探究下為何催生了基於HDFS的HBase資料庫?
HDFS(分散式檔案系統)存檔案時會追加到一個檔案的尾部,只能儲存整個檔案。假如一個資料夾下有一百萬個小檔案,每個小檔案都是1KB,到底層儲存時(DataNode)不會佔用128M空間,但NameNode會被撐爆,元資料受不了。和HDFS差不多,它的架構也是主從,主HMaster、從HRegionServer。當一條條資料進來時,先快取到HRegionServer的記憶體,達到128M時將整塊寫到HDFS,這樣一塊元資料只有一條。HDFS不能做資料儲存,只能做檔案儲存,所以Hbase出現了。故當有一條條資料進來的場景時,就不要寫到HDFS了,而是寫到HBase叢集裡面。大表HBase+快取層,同時元資料存到zookeeper,不存在master。
要注意master是不存元資料的(不存任何資料),它只是管理者,只管理幾個HRegionServer掛掉之後資料遷移和表的資訊,不管資料資訊。所以當叢集正常運行了,HMaster掛了沒影響,但NameNode掛了就不行。最後說下Hadoop1和2的區別:第一代產品有1個NameNode+多個DataNode,第二代產品有多個NameNode以解決Hadoop1的單點問題。NameNode 主備之間還有DFSZKFailoverController做管理。

HBase安裝

①確保使用者是hadoop,將安裝包上傳到/home/hadoop下;
②解壓:su – hadooptar –zxvf 安裝包
③重新命名:mv hbase-version hbase;

安裝軟體為什麼要重新命名:升級新版本,環境變數不用重新配置

④修改環境變數:master:su – rootvim /etc/profile
新增內容:export HBASE_HOME=/home/hadoop/hbaseexport PATH=$PATH:$HBASE_HOME/bin
執行命令:source /etc/profilesu – hadoop
在其他機器上執行上述操作。
⑤修改配置檔案:su – hadoop
將配置檔案上傳到/home/hadoop/hbase/conf資料夾下。
配置檔案的配置元素很多,沒配就用預設的。每個檔案的解釋如下:

hbase-env.sh
export JAVA_HOME=/usr/jdk   //jdk安裝目錄
export HBASE_CLASSPATH=/home/hadoop/hadoop/conf   //hadoop配置檔案的位置
export HBASE_MANAGES_ZK=true   #如果使用獨立安裝的zookeeper這個地方就是false

hbase-site.xml
<configuration>
  <property>
  <name>hbase.master</name>     #hbasemaster的主機和埠
  <value>master1:60000</value>
  </property>
  <property>
  <name>hbase.master.maxclockskew</name>    #時間同步允許的時間差
  <value>180000</value>
  </property>
  <property>
  <name>hbase.rootdir</name>
  <value>HDFS:// hadoop-cluster1/hbase</value>#hbase共享目錄,持久化hbase資料
  </property>
  <property>
  <name>hbase.cluster.distributed</name>  #是否分散式執行,false即為單機
  <value>true</value>
  </property>
  <property>
  <name>hbase.zookeeper.quorum</name>#zookeeper地址
  <value>slave1, slave2,slave3</value>
  </property>
  <property>
  <name>hbase.zookeeper.property.dataDir</name>#zookeeper配置資訊快照的位置
  <value>/home/hadoop/hbase/tmp/zookeeper</value>
  </property>
</configuration>

Regionservers    //是從機器的域名
slave1
slave2
slave3

⑥.把hadoop的HDFS-site.xml和core-site.xml 放到hbase/conf下
cp /home/hadoop/hadoop/etc/hadoop/HDFS-site.xml /home/hadoop/hbase/conf
cp /home/hadoop/hadoop/etc/hadoop/core-site.xml /home/hadoop/hbase/conf
⑦傳送到其他機器
su - hadoop
scp –r /home/hadoop/hbase [email protected]:/home/hadoop
scp –r /home/hadoop/hbase [email protected]:/home/hadoop
scp –r /home/hadoop/hbase [email protected]:/home/hadoop
⑧啟動:su – hadoopstart-hbase.sh
⑨檢視
程序:jps
進入hbase shell:hbase shell
退出hbase shell:quit
頁面:http://master:60010/

HBase原理

這裡寫圖片描述
簡單來說,HRegionServer、HRegion、HLog、Store、MemStore、StoreFile、HFile都是類。
比如MemStore可能是類裡面的某個Map或List集合,故用記憶體儲存資料;StoreFile是Stream裝好的路徑,擁有input流;HRegion相當於類中有個路徑,檔案系統路徑(HLog)+記憶體版的集合(MemStore)+檔案版的路徑(StoreFile)。HRegionServer通過HDFS API將檔案寫到DataNode。

HBase讀慢寫快,讀是相對於寫的,還是比MySQL快。表分割槽,便於查詢,讀取速度快,多臺機器的IO得到充分利用。HRegionServer對資料有管理許可權,表資料被封裝到HRegion上,HRegion讓表可以分佈在n個機器上,HLog只能追加不能修改,寫完之後,再寫到MemStore,若機器宕機了,記憶體資料會丟失,此時HLog日誌的作用就出來了,可防止資料丟失問題。當MemStore達到閾值,將資料寫到StoreFile,再寫到HFile,HFile用於儲存在HDFS,進行了序列化。

資料有版本號,對同一id資料進行插入,若HLog有冗餘資料(eg.有些資料被刪除),不會被合併。HLog一定會同步到HDFS,什麼時候寫,隔多長時間寫。如果在還沒同步到HDFS,硬碟掛了,那資料會丟失。查資料會幫我們把資料綁在一起,返回最新版本給使用者,當合並之後才會查不到版本。很久以前的資料沒有版本,最近的資料有版本,就在於分塊是否被合併。

假如0到一萬條資料被分為好幾個分塊到不同的DataNode管理,當出現四個分塊(每塊64MB)且對檔案日誌做了追加後,資料冗餘因為有一些刪除資料,讀完檔案將所有資料進行一次合併,合併的過程中對增刪改查進行冗餘資料處理,並保留最近版本。合併後資料必然<256MB,當塊資料<256MB將原封不動寫回HDFS。繼續處理0到一萬條資料,當又有三個分塊達到64MB時,和原來的大塊(<256MB)進行合併(後>256MB),然後再分為兩個塊(都>168MB),再分佈到不同的DataNode。
讀相對慢

HMaser分配資料管理許可權,假如0到10萬被拆成兩塊,一塊五萬條
表拆分和合並,Region拆分合並
合:資料變小,且資料準確;
拆:資料越來越大,讀起來會變慢,拆成兩人管,資料讀起來變快。

Hmaster直接到HDFS API,當不涉及到表管理、表合併拆分時,HMaste掛掉沒事。 HRegionServer用來管理分割槽,一張表由多個Server管理,eg.A Server管理user表的前半部分,B Server管理了user表的後半部分,A Server又管理了admin表的前半部分,B Server管理admin表的後半部分。
資料拆分合並由資料大小觸發,運算量不大且不佔用HRegion的IO和網路請求,它直接連到HRegionServer,把資料塊拆分給兩個DataNode管後,只要修改.META表的索引列表。eg.table1從a到k歸哪臺機器管,從k到n又歸哪臺機器管。查資料直接找ip,這個過程不影響HRegionServer效能,因為他們之間沒有聯絡。
提升資料讀取和新增的效能:將垃圾資料清除+資料塊分給其他人管理
如果Server掛了,該.META表的IP,會把管理許可權給別人。再把HLog交給別人。
一個HRegionServer的HRegion的類有多個,每個HRegion管理表的一部分,HRegion0管理user0,HRegion管理user1,…
Store類也有多個StoreFile和HFile,把n個小檔案合併成大檔案,最終寫入HDFS,寫的過程麻煩。

ZooKeeper–> -ROOT-(單Region)–> .META.–> 使用者表
-ROOT-
包含.META.表所在的Region列表,該表只會有一個Region;
Zookeeper中記錄了-ROOT-表的location。
.META.
包含所有的使用者空間Region列表,以及RegionServer的伺服器地址。
這裡寫圖片描述

這裡寫圖片描述

寫資料時,通過zookeeper去找-ROOT-表,-ROOT-表(分表,資料(記憶體或檔案))在某臺HRegionServer上。-ROOT-表裡邊,找到META表N,然後到META表裡,可以找到tableN再到具體的server的ip,client直接定位IP,連線查資料。所有的-ROOT-表和.META.表都在記憶體,讀的時候相對較慢,所以才要合併拆分,讀的資料塊小,讀的時候就比較快。通過演算法實現常查詢的資料快取到記憶體,就更快了。

總結

資料寫流程:
①client通過Zookeeper定位該寫到哪臺HRegionServer;
②再向HRegionServer傳送寫請求;
③HRegionServer將資料寫到HLog(write ahead log)——資料的持久化和恢復;
④寫完HLog之後,HRegionServer再將資料寫到記憶體MemStore;
⑤反饋client寫成功。
資料Flush過程:
①當MemStore資料達到閾值(預設是64M),將資料刷到硬碟,將記憶體中的資料刪除,同時刪除HLog中的歷史資料;
②將資料儲存到HDFS中;
③在HLog中做標記點。
資料合併過程:
①當資料塊達到4塊,HMaster將資料塊載入到本地,進行合併;
②當合並的資料>256MB,進行拆分,將拆分後的Region分配給不同的HRegionServer管理;
③當HRegionServer宕機後,將HRegionServer上的HLog拆分,然後分配給不同的HRegionServer載入,修改.META.;
④注意:HLog同步到HDFS。
HBase的讀流程:
①通過zookeeper和-ROOT-、.META.表定位HRegionServer;
②資料從記憶體和硬碟合併後返回給client;
③資料塊會快取。
HMaster的職責:
①管理使用者對Table的增、刪、改、查操作;
②記錄Region在哪臺HregionServer上;
③在Region Split後,負責新Region的分配;
④新機器加入時,管理HRegionServer的負載均衡,調整Region分佈;
⑤在HRegionServer宕機後,負責失效HRegionServer 上的Regions遷移。
HRegionServer的職責:
①主要負責響應使用者I/O請求,向HDFS檔案系統中讀寫資料,是HBase中最核心的模組;
②管理了很多table的分割槽(Region)。
client職責:
HBase的Client使用HBase的RPC機制與HMaster和RegionServer進行通訊。
管理類操作:Client與HMaster進行RPC;
資料讀寫類操作:Client與HRegionServer進行RPC。

相關推薦

HBase知識體系探究整理

Web架構 業務日誌一般由Tomcat或Nginx生成(Tomcat業務日誌帶sessionid,Nginx不帶),而中大型網際網路公司的web架構一般由LVS(Linux虛擬伺服器)+Keepalived+Nginx+Tomcat組成。由Nginx單獨掛載T

IT職場人生系列之二十三 知識體系 專家雜家

                這是IT職場人生系列的第二十三篇。(序言,專欄目錄)專家與雜家專家與雜家之爭由來已久。挺專家者說:只有專一,才能學透學精;那些泛泛之輩,只能學到些皮毛,終究不能有所成就。挺雜家者說:只有廣泛,才能目光開闊;某些人天天鑽牛角尖,最後學成榆木疙瘩。招聘的時候也是。有人號稱精通七八種

HBase知識體系及偽分佈安裝

HBase簡介 HBase – Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉 價PC Server上搭建起大規模結構化儲存叢集。HBase利用Hadoop HDFS作為其檔案儲存系統,利用Hadoop的

Android知識體系總結之實戰經驗部分之Android多渠道打包apk簽名篇

1.基礎知識 1.1 什麼是打包?   打包就是根據簽名和其它標識生成安裝包。 1.2 簽名是什麼?   在Android中,簽名就是apk中儲存的一串特別的字串。它是用來標識不同的應用開發者,為什麼取名為簽名,就好像一個作家一樣,它完成的小說都要加上署名。因

史上最全的人工智慧知識體系大全圖譜 & 中國人工智慧發展現狀未來

人工智慧是目前最火熱的技術領域,也是一門極富挑戰性的科學,從事這項工作的人必須懂得計算機知識,數學、心理學,甚至哲學。人工智慧是包括十分廣泛的科學,它由不同的領域組成,如機器學習,計算機視覺等等,總的說來,人工智慧研究的一個主要目標是使機器能夠勝任通常需要人類智慧才能完成的複雜工作。那人工智慧知識體

超全整理!Python資料分析知識體系

自從1991年誕生以來,Python現在已經成為最受歡迎的動態程式語言之一,Python最大的特點是擁有一個巨大而活躍的科學計算社群。進入21世紀以來,在行業應用和學術研究中採用Python進行科學計算的勢頭越來越猛。 在資料分析和互動、探索性計算以及資料視覺

IT職場人生系列之二十三:知識體系(專家雜家)

這是IT職場人生系列的第二十三篇。(序言,專欄目錄)專家與雜家專家與雜家之爭由來已久。挺專家者說:只有專一,才能學透學精;那些泛泛之輩,只能學到些皮毛,終究不能有所成就。挺雜家者說:只有廣泛,才能目光開闊;某些人天天鑽牛角尖,最後學成榆木疙瘩。招聘的時候也是。有人號稱精通七八

JAVA初級程式設計師知識體系整理

        時間飛逝極快,一眨眼自己已經大三了,經過近3年的大學生活和學習,對於自己未來的方向輪廓已然漸漸清晰,當初既然選擇走JAVA方向,就應該持之以恆,堅持自己的方向不輕易改變,大三的我面臨著實習的考量,今天已經4月17號,7月之前要找到實習崗位,為此準備把這3年學的

自身知識體系的梳理總結

抽點時間來梳理一下自己的知識體系,主要的框架流程是:tcp/iphttpnginxphpmysql(包括分散式系統相關)redislinux(常用命令)面向物件,設計模式演算法專案其他一.tcp/ip知識點整理1.2. tcpip完整知識點擴充:1.4. tcpip的流量控制

產品生命週期背後的運營邏輯——《網際網路運營的知識體系整體邏輯》筆記(四)

引入期 目標:找到使用者痛點,做好功能分析,迅速上線驗證,種子使用者認可 ①通過市場調研的方法找到使用者痛點; ②根據使用者需求,做好需求分析;同時建立自媒體通道,為種子使用者和後期運營打基礎; ③迅速完成原型,做好設計,快速開發,做好產品測試,保證使用者體驗; ④獲取種子使用者,跟蹤並做好意見反

Atitit 知識圖譜解決方案:提供完整知識體系架構的搜尋知識結果overview

Atitit 知識圖譜解決方案:提供完整知識體系架構的搜尋與知識結果overview 網際網路正從僅包含網頁和網頁之間超連結的文件全球資訊網(Document Web)轉變成包含大量描述各種實體和實體之間豐富關係的資料全球資訊網(Data Web)。在這個背

專案管理9大知識體系5個具體階段(zz)

        驅動21世紀新型商務企業發展的原動力是什麼?有人答曰:專案管理。的確,專案管理作為一門新興的學科,發展之快已超過了我們的想象。美國Fortune雜誌甚至預言,專案經理將是21世紀的首選職業。讓我們共同走近專案管理。 “金字塔工程”到“北極星導彈計劃” 論起專案

大資料系列之資料庫Hbase知識整理(一)Hbase簡介,叢集搭建

1.Hbase簡介   HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲

我的程式設計之路——知識管理知識體系

Coder-Knowledge-GraphKnowledge Graph For Coder —— From My Daily Experience & Practice六年前筆者開始接觸到C語言,寫了第一行HelloWorld。三年前開始進入工作崗位進行實踐,前前後後參與了公司裡、學校裡也有十來個專

電腦科學技術本科知識體系

整個電腦科學就像人一樣,有兩條腿。一條叫做數學(基礎),一條叫做物理(基礎)。數學主要指的是離散數學,其中比較重要的是邏輯和證明、Turing論題和Churcher論題。邏輯系統用邏輯的方法描述這個世界,在寥寥數條公理和推理規則之上構築了整個邏輯系統、數論系統乃至電腦科學

jQuery 知識體系

markdown bin tails 進階 button 對象 內置函數 net ews jQuery基礎知識一 jQuery之知識二-選擇器 [jQuery知識]jQuery之知識三-過濾器 [jQuery知識]jQuery之知識四-DOM和CSS操作 [jQuery

Hadoop中Hbase體系結構

才會 right hmaster mar hbase 緩存 master 恢復數據 處理 HRegion 當一張表中的數據特別多的時候,HBase把表拆成多個塊,每個塊就是一個HRegion,每個region中包含這個表裏的所有行 HRegionServer 數據

Web前端知識體系精簡

以及 opera 詳解 css屬性 動態設置 等號 互聯 簡單 request   Web前端技術由html、css和javascript三大部分構成,是一個龐大而復雜的技術體系,其復雜程度不低於任何一門後端語言。而我們在學習它的時候往往是先從某一個點切入,然後不斷地接觸和

Web 前端知識體系精簡

flex布局 構造函數 項目 全局變量 src 描述 time xpl 解析 Web前端技術由html、css和javascript三大部分構成,是一個龐大而復雜的技術體系,其復雜程度不低於任何一門後端語言。而我們在學習它的時候往往是先從某一個點切入,然後不斷地接觸和學習新

快速建立個人知識體系

翻譯 ini 不回 好處 zabb 沒有響應 案例 二維 方法 最近建了一個運維架構知識體系的群,為什麽要創辦這麽一個群,對大家有什麽樣的好處? 我相信剛參加工作的都會碰到這樣的問題:新人剛入職領導交代一個不會,但是為了表現自己的能力不差,領導沒有看走眼,硬著頭皮也要完成下