天天看點

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

網際網路大資料架構介紹(二)Hive,HBase

繼續上一節的hadoop,HDFS,yarn,MapReduce。這節繼續想下講,将資料倉庫Hive,和大資料的資料庫HBase

Hive

首先,我們要明确什麼是Hive,Hive是建構于Hadoop的HDFS和MapReduce上,的用于管理和查詢結構化/非結構化資料的資料倉庫。

Hive分别有三個部分組成:

1)使用HQL作為查詢接口

2)使用HDFS作為底層存儲

3)使用MapReduce作為執行層

現在,通俗一些說,Hive之是以産生。是因為使用MapReduce做過資料分析的人都知道,很多分析程式除業務邏輯不同外,程式流程基本一樣。在這種情況下,就需要hive這樣的用戶程式設計接口。是以Hive的意義其實是為了簡化編寫MapReduce程式而生的。

而且,需要注意的是,hive中的所有查詢除了”select * from table;”其他語句都是需要通過Map\Reduce的方式來執行的。由于要走Map\Reduce的過程,即使一個隻有1行1列的表,如果不是通過select * from table;方式來查詢的,可能也需要8、9秒。但hive比較擅長處理大量資料。當要處理的資料很多,并且Hadoop叢集有足夠的規模,這時就能展現出它的優勢。是以Hive與正常SQL的差別就如下圖:

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

【轉】:那麼,hive是什麼?

白話一點再加不嚴格一點,hive可以認為是map-reduce的一個包裝。hive的意義就是把好寫的hive的sql轉換為複雜難寫的map-reduce程式。

是以說Hive和SQL除了寫入的語句像之外,其他的都一點兒相同點的沒有。

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

具體的Hive實作如上圖所示:

Hive本身不存儲和計算資料,它完全依賴于HDFS和MapReduce,Hive中的表純邏輯,就是些表的定義等,也就是表的中繼資料(metastore中存儲)。使用SQL實作Hive是因為SQL大家都熟悉,轉換成本低,類似作用的Pig就不是SQL。hive支援mysql、oracle等任何支援JDBC(Java DataBase Connecter)連接配接方式的資料庫來存儲中繼資料,需要修改相應的配置項。使用JDBC連接配接資料庫做Metastore,并通過JDBC來通路Hive,是以說現在也就明白了為什麼要用SQL語言了。當然了,在Hive中不叫SQL語言,叫做HQL(Hive Query Language),畢竟不是完全的結構化資料,Hive還要處理非結構化資料,說以叫做HQL,HQL支援select、union all、join(left、right、mapjoin)like、where、各種聚合函數、支援json解析,并不能完全支援SQL。

Hive的基本架構

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

上圖可以很好的解釋Hive的整個結構,這裡的ETL( Extract-Transform-Load )過程,通俗些,就是将資料庫尋出成map/reduce可操作的格式,如TEXT或CSV,再put到HDFS中,也就是将好寫的hive的sql轉換為複雜難寫的map-reduce程式的核心部分。

介紹完Hive下邊将Hive進行以下簡單的總結:

1、hive是sql語言,通過資料庫的方式來操作hdfs檔案系統,為了簡化程式設計,底層計算方式為mapreduce。

2、hive是面向行存儲的資料庫。 hive其實就是一個分布式的關系型資料庫,因為底層是基于MapReduce的,是以更有利于分析資料,是以将其稱為一個資料倉庫。

3、Hive本身不存儲和計算資料,它完全依賴于HDFS和MapReduce,Hive中的表純邏輯。

4、Hive的用途主要是利用在報表方面。

附:下面大括号裡的一段是用來講解資料庫與資料倉庫的差別,如果懂就可以略過:

資料倉庫又是什麼,資料庫是面向事務的設計,資料倉庫是面向主題設計的。 資料庫一般存儲線上交易資料,資料倉庫存儲的一般是曆史資料。舉個簡單的例子:資料庫是事務系統的資料平台,客戶在銀行做的每筆交易都會寫入資料庫,被記錄下來,這裡,可以簡單地了解為用資料庫記帳。資料倉庫是分析系統的資料平台,它從事務系統擷取資料,并做彙總、加工,為決策者提供決策的依據。比如,某銀行某分行一個月發生多少交易,該分行目前存款餘額是多少。如果存款又多,消費交易又多,那麼該地區就有必要設立ATM了。官方一些的解釋他們的卻别: 
資料倉庫(Data Warehouse)是一個面向主題的(Subject Oriented)、內建的(Integrate)、相對穩定的(Non-Volatile)、反映曆史變化(Time Variant)的資料集合,用于支援管理決策。
資料倉庫(Data Warehouse)是一個面向主題的(Subject Oriented)、內建的(Integrate)、相對穩定的(Non-Volatile)、反映曆史變化(Time Variant)的資料集合,用于支援管理決策。
(1) 面向主題:指資料倉庫中的資料是按照一定的主題域進行組織。
(2)內建:指對原有分散的資料庫資料經過系統加工, 整理得到的消除源資料中的不一緻性。
(3)相對穩定:指一旦某個資料進入資料倉庫以後隻需要定期的加載、重新整理。
(4)反映曆史變化:指通過這些資訊,對企業的發展曆程和未來趨勢做出定量分析預測。
主要差別在于:
(1)資料庫是面向事務的設計,資料倉庫是面向主題設計的。
(2)資料庫一般存儲線上交易資料,資料倉庫存儲的一般是曆史資料。
(3)資料庫設計是盡量避免備援,資料倉庫在設計是有意引入備援。
(4)資料庫是為捕獲資料而設計,資料倉庫是為分析資料而設計。
           

Hbase(Hadoop DataBase)

介紹完Hive, 如果簡單的說Hive是将MapReduce進行了一層封裝,那麼Hbase就是将HDFS進行了一層封裝。他的本質是資料存儲,是個NoSql(Not Only SQL非關系型資料庫)資料庫;hbase部署于hdfs之上,并且克服了hdfs在随機讀寫方面的缺點。 從他的命名也可以看出,他是Hadoop的一個資料庫。

是以,Hbase的定義為一個分布式的基于列存儲的非關系型資料庫,HBase是為查詢而生的,它通過組織起節點內所有機器的內存,提供一個超大的內存Hash表 。并且因為他是部署于hdfs之上,是以差別于Hive,HBase的本質是資料存儲。

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

上圖就是整個大資料處理的過程,即可以看出Hbase和Hive之間的關系,當然Hive也可以直接作用于HDFS上。

HBase的基本架構

Hbase的基本架構如下圖,他主要由Zookeeper 、HMaster、HRegionServer這三部分構成,使用Zookeeper管理叢集,使用HDFS作為底層存儲。在架構層面上由HMaster(Zookeeper選舉産生的Leader)和多個HRegionServer組成,下面詳細介紹各個部分的作用,已經HBase的運作流程。

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

以下内容轉自http://www.linuxidc.com/Linux/2016-08/134185.htm:

【Client:使用HBase的RPC機制與HMaster和HRegionServer進行通信,送出請求和擷取結果。對于管理類操作,Client與HMaster進行RPC;對于資料讀寫類操作,Client與HRegionServer進行RPC。

Zookeeper:通過将叢集各節點狀态資訊注冊到Zookeeper中,使得HMaster可随時感覺各個HRegionServer的健康狀态,而且也能避免HMaster的單點問題。

HMaster:管理所有的HRegionServer,告訴其需要維護哪些HRegion,并監控所有HRegionServer的運作狀态。當一個新的HRegionServer登入到HMaster時,HMaster會告訴它等待配置設定資料;而當某個HRegion當機時,HMaster會把它負責的所有HRegion标記為未配置設定,然後再把它們配置設定到其他HRegionServer中。HMaster沒有單點問題,HBase可以啟動多個HMaster,通過Zookeeper的選舉機制保證叢集中總有一個HMaster運作,進而提高了叢集的可用性。

HRegion:當表的大小超過預設值的時候,HBase會自動将表劃分為不同的區域,每個區域包含表中所有行的一個子集。對使用者來說,每個表是一堆資料的集合,靠主鍵(RowKey)來區分。從實體上來說,一張表被拆分成了多塊,每一塊就是一個HRegion。我們用表名+開始/結束主鍵,來區分每一個HRegion,一個HRegion會儲存一個表中某段連續的資料,一張完整的表資料是儲存在多個HRegion中的。

HRegionServer:HBase中的所有資料從底層來說一般都是儲存在HDFS中的,使用者通過一系列HRegionServer擷取這些資料。叢集一個節點上一般隻運作一個HRegionServer,且每一個區段的HRegion隻會被一個HRegionServer維護。HRegionServer主要負責響應使用者I/O請求,向HDFS檔案系統讀寫資料,是HBase中最核心的子產品。HRegionServer内部管理了一系列HRegion對象,每個HRegion對應了邏輯表中的一個連續資料段。HRegion由多個HStore組成,每個HStore對應了邏輯表中的一個列族的存儲,可以看出每個列族其實就是一個集中的存儲單元。是以,為了提高操作效率,最好将具備共同I/O特性的列放在一個列族中。

HStore:它是HBase存儲的核心,由MemStore和StoreFiles兩部分組成。MemStore是記憶體緩沖區,使用者寫入的資料首先會放入MemStore,當MemStore滿了以後會Flush成一個StoreFile(底層實作是HFile),當StoreFile的檔案數量增長到一定門檻值後,會觸發Compact合并操作,将多個StoreFiles合并成一個StoreFile,合并過程中會進行版本合并和資料删除操作。是以,可以看出HBase其實隻有增加資料,所有的更新和删除操作都是在後續的Compact過程中進行的,這樣使得使用者的寫操作隻要進入記憶體就可以立即傳回,保證了HBaseI/O的高性能。當StoreFiles Compact後,會逐漸形成越來越大的StoreFile,當單個StoreFile大小超過一定門檻值後,會觸發Split操作,同時把目前的HRegion Split成2個HRegion,父HRegion會下線,新分出的2個子HRegion會被HMaster配置設定到相應的HRegionServer,使得原先1個HRegion的負載壓力分流到2個HRegion上。

HLog:每個HRegionServer中都有一個HLog對象,它是一個實作了Write Ahead Log的預寫日志類。在每次使用者操作将資料寫入MemStore的時候,也會寫一份資料到HLog檔案中,HLog檔案會定期滾動重新整理,并删除舊的檔案(已持久化到StoreFile中的資料)。當HMaster通過Zookeeper感覺到某個HRegionServer意外終止時,HMaster首先會處理遺留的 HLog檔案,将其中不同HRegion的HLog資料進行拆分,分别放到相應HRegion的目錄下,然後再将失效的HRegion重新配置設定,領取到這些HRegion的HRegionServer在加載 HRegion的過程中,會發現有曆史HLog需要處理,是以會Replay HLog中的資料到MemStore中,然後Flush到StoreFiles,完成資料恢複。

ROOT表和META表

HBase的所有HRegion中繼資料被存儲在.META.表中,随着HRegion的增多,.META.表中的資料也會增大,并分裂成多個新的HRegion。為了定位.META.表中各個HRegion的位置,把.META.表中所有HRegion的中繼資料儲存在-ROOT-表中,最後由Zookeeper記錄-ROOT-表的位置資訊。所有用戶端通路使用者資料前,需要首先通路Zookeeper獲得-ROOT-的位置,然後通路-ROOT-表獲得.META.表的位置,最後根據.META.表中的資訊确定使用者資料存放的位置,如下圖所示。

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

-ROOT-表永遠不會被分割,它隻有一個HRegion,這樣可以保證最多隻需要三次跳轉就可以定位任意一個HRegion。為了加快通路速度,.META.表的所有HRegion全部儲存在記憶體中。用戶端會将查詢過的位置資訊緩存起來,且緩存不會主動失效。如果用戶端根據緩存資訊還通路不到資料,則詢問相關.META.表的Region伺服器,試圖擷取資料的位置,如果還是失敗,則詢問-ROOT-表相關的.META.表在哪裡。最後,如果前面的資訊全部失效,則通過ZooKeeper重新定位HRegion的資訊。是以如果用戶端上的緩存全部是失效,則需要進行6次網絡來回,才能定位到正确的HRegion。

讀寫操作流程

寫操作

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

步驟1:Client通過Zookeeper的排程,向HRegionServer發出寫資料請求,首先寫一份資料到HLog檔案中,HLog檔案會定期滾動重新整理,并删除舊的檔案,接着在HRegion中寫資料。

步驟2:資料被寫入HRegion的MemStore,直到MemStore達到預設門檻值。

步驟3:MemStore中的資料被Flush成一個StoreFile。

步驟4:随着StoreFile檔案的不斷增多,當其數量增長到一定門檻值後,觸發Compact合并操作,将多個StoreFile合并成一個StoreFile,同時進行版本合并和資料删除。

步驟5:StoreFiles通過不斷的Compact合并操作,逐漸形成越來越大的StoreFile。

步驟6:單個StoreFile大小超過一定門檻值後,觸發Split操作,把目前HRegion Split成2個新的HRegion。父HRegion會下線,新Split出的2個子HRegion會被HMaster配置設定到相應的HRegionServer 上,使得原先1個HRegion的壓力得以分流到2個HRegion上。

讀操作

步驟1:client通路Zookeeper,查找-ROOT-表,擷取.META.表資訊。

步驟2:從.META.表查找,擷取存放目标資料的HRegion資訊,進而找到對應的HRegionServer。

步驟3:通過HRegionServer擷取需要查找的資料。

步驟4:HRegionserver的記憶體分為MemStore和BlockCache兩部分,MemStore主要用于寫資料,BlockCache主要用于讀資料。讀請求先到MemStore中查資料,查不到就到BlockCache中查,再查不到就會到StoreFile上讀,并把讀的結果放入BlockCache。

HBase資料模型

HBase是一個類似于BigTable的分布式資料庫,它是一個稀疏的長期存儲的(存在HDFS上)、多元度的、排序的映射表。這張表的索引是行關鍵字、列關鍵字和時間戳。HBase的資料都是字元串,沒有類型。

網際網路大資料架構介紹(二)Hive,HBase網際網路大資料架構介紹(二)Hive,HBase

可以将一個表想象成一個大的映射關系,通過行鍵、行鍵+時間戳或行鍵+列(列族:列修飾符),就可以定位特定資料。由于HBase是稀疏存儲資料的,是以某些列可以是空白的。上表給出了com.cnn.www網站的資料存放邏輯視圖,表中僅有一行資料,行的唯一辨別為“com.cnn.www”,對這行資料的每一次邏輯修改都有一個時間戳關聯對應。表中共有四列:contents:html、anchor:cnnsi.com、anchor:my.look.ca、mime:type,每一列以字首的方式給出其所屬的列族。

行鍵(RowKey)是資料行在表中的唯一辨別,并作為檢索記錄的主鍵。在HBase中通路表中的行隻有三種方式:通過某個行鍵通路、給定行鍵的範圍通路、全表掃描。行鍵可以是任意字元串(最大長度64KB)并按照字典序進行存儲。對于那些經常一起讀取的行,需要對鍵值精心設計,以便它們能放在一起存儲。

在下一節,将繼續介紹spark、sqoop的相關内容。。。