精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:大數據業界動態 → 正文

如何使用HBase?大數據存儲的兩個實戰場景

責任編輯:zsheng |來源:企業網D1Net  2018-09-05 09:44:13 本文摘自:魔據教育

HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,適用于結構化的存儲,底層依賴于Hadoop的HDFS,利用HBase技術可在廉價PCServer上搭建起大規模結構化存儲集群。因此HBase被廣泛使用在大數據存儲的解決方案中。

為何使用HBase

HBase的優點:

- 列可以動態增加,并且列為空就不存儲數據,節省存儲空間。

- Hbase自動切分數據,使得數據存儲自動具有水平scalability。

- Hbase可以提供高并發讀寫操作的支持。

HBase的缺點:

- 不能支持條件查詢,只支持按照Row key來查詢。

- HBase并不適合傳統的事物處理程序或關聯分析,不支持復雜查詢,一定程度上限制了它的使用,但是用它做數據存儲的優勢也同樣非常明顯。

因為HBase存儲的是松散的數據,所以如果你的應用程序中,數據表每一行的結構是有差別的,那么可以考慮使用HBase。因為HBase的列可以動態增加,并且列為空就不存儲數據,所以如果你需要經常追加字段,且大部分字段是NULL值的,那可以考慮HBase。因為HBase可以根據Rowkey提供高效的查詢,所以如果你的數據(包括元數據、消息、二進制數據等)都有著同一個主鍵,或者你需要通過鍵來訪問和修改數據,使用HBase是一個很好地選擇。

如何使用HBase

場景一:賣家操作日志

賣家操作日志,顧名思義是用來記錄商家操作的系統,從而可以保證商家可以精確查詢自己的各種操作。京東有幾十萬的商家時時刻刻的進行著各種操作,因此賣家操作日志的特點是:數據量大、實時性強、增多查少。

 

\

 

圖1

 

\

 

圖2

我們在做賣家操作日志初期,將所有的操作日志存放在ES中,操作日志的數據量是非常大的,但尷尬的是我們當時所能申請到的ES資源有限。當把大量的數據存儲到有限的ES集群中時便導致了性能的下降。在這種情況下,我們選擇了只在ES集群中存儲最近三個月的數據,對其提供靈活的查詢,而長期的數據存儲使用HBase來進行。這樣的話我們便可以實現對近期操作靈活展現,對長期數據也有精確備份。

場景二:京麥消息日志的存儲

京麥消息日志的存儲是屬于京麥筋斗云系統(用于打造京麥消息生態系統閉環)不可或缺的一部分。其中包含消息的全鏈路追蹤以及消息的統計分析。京麥消息每天都會有幾千萬的消息量,如何對消息進行追蹤和統計便成為了一個至關重要的問題。消息追蹤要求實時性、多維度精確查詢,因此我們選擇將最近一周的消息日志存儲在ES。統計分析要求我們有足夠多的數據,因此我們在將數據存儲在ES中的同時也存儲在HBase中一份。最終再定期將HBase中的數據導入到京東的數據集市中,這樣我們便可以很方便的對京麥消息進行統計分析。

HBase的數據結構

 

\

 

要使用HBase我們首先要了解HBase的數據結構:

HBase會存儲系列的行記錄,行記錄有三個基本類型的定義:Row Key、Time Stamp、Column Family。

Row Key

與NoSQL數據庫一樣,Row Key是用來檢索記錄的主鍵。訪問HBase table中的行,只有三種方式:

通過單個Row Key訪問。

通過Row Key的range全表掃描。

Row Key可以是任意字符串(最大長度是64KB,實際應用中長度一般為 10 ~ 100bytes),在HBase內部,Row Key保存為字節數組。

在存儲時,數據按照Row Key的字典序(byte order)排序存儲。設計Key時,要充分排序存儲這個特性,將經常一起讀取的行存儲到一起(位置相關性)。

Column Family

HBase表中每個列都必須屬于某個列族,列族必須作為表模式定義的一部分預先給出(有點像關系型數據庫中的列名,定義完一般情況下就不會再去修改);

列名以列族作為前綴,每個列族都可以有多個列成員。新的列族成員(也就是列)可以隨后按需,動態加入。

Hbase把同一列族里面的數據存儲在同一目錄下,由幾個文件保存。

Time Stamp

在HBase每個cell存儲單元對同一份數據有多個版本,根據唯一的時間戳來區分每個版本之間的差異,不同版本的數據按照時間倒序排序,最新的數據版本排在最前面。

簡述HBase的架構原理

1. HBase的模塊

 

\

 

Master

HBase Master用于協調多個Region Server,偵測各個Region Server之間的狀態,并平衡Region Server之間的負載。HBase Master還有一個職責就是負責分配Region給Region Server。HBase允許多個Master 節點共存,但是這需要Zookeeper的幫助。不過當多個Master節點共存時,只有一個Master是提供服務的,其他的Master節點處于待命的狀態。當正在工作的Master節點宕機時,其他的Master則會接管 HBase 的集群。

Region Server

對于一個Region Server而言,其包括了多個Region。Region Server的作用只是管理表格,以及實現讀寫操作。Client 直接連接Region Server,并通信獲取HBase中的數據。對于Region而言,則是真實存放HBase數據的地方,也就說Region是HBase可用性和分布式的基本單位。如果當一個表格很大,并由多個CF組成時,那么表的數據將存放在多個Region之間,并且在每個Region中會關聯多個存儲的單元(Store)。

Zookeeper

對于HBase而言,Zookeeper的作用是至關重要的。首先Zookeeper是作為HBase Master的HA解決方案。也就是說,是Zookeeper保證了至少有一個HBase Master處于運行狀態。并且Zookeeper負責Region和Region Server的注冊。其實Zookeeper發展到目前為止,已經成為了分布式大數據框架中容錯性的標準框架。不光是HBase,幾乎所有的分布式大數據相關的開源框架,都依賴于Zookeeper實現HA。

2. HBase的原理

 

\

 

首先我們需要知道HBase的集群是通過Zookeeper來進行機器之前的協調,也就是說HBase Master與Region Server之間的關系是依賴Zookeeper來維護。當一個Client需要訪問HBase集群時,Client需要先和Zookeeper來通信,然后才會找到對應的Region Server。每一個 Region Server管理著很多個Region。對于HBase來說,Region是HBase并行化的基本單元。因此,數據也都存儲在Region中。

這里我們需要特別注意,每一個Region都只存儲一個Column Family的數據,并且是該CF中的一段(按Row 的區間分成多個Region)。Region所能存儲的數據大小是有上限的,當達到該上限時(Threshold),Region會進行分裂,數據也會分裂到多個Region中,這樣便可以提高數據的并行化,以及提高數據的容量。

每個Region包含著多個Store對象。每個Store包含一個MemStore,和一個或多個HFile。MemStore便是數據在內存中的實體,并且一般都是有序的。當數據向Region寫入的時候,會先寫入MemStore。當MemStore中的數據需要向底層文件系統傾倒(Dump)時(例如MemStore中的數據體積到達MemStore配置的最大值),Store便會創建StoreFile,而StoreFile就是對HFile一層封裝。所以MemStore中的數據會最終寫入到HFile中,也就是磁盤IO。由于HBase底層依靠HDFS,因此HFile都存儲在HDFS之中。這便是整個HBase工作的原理簡述。

使用HBase時應注意的問題

基于Hbase的系統設計與開發中,需要考慮的因素不同于關系型數據庫,Hbase模式本身很簡單,但賦予你更多調整的空間,有一些模式寫性能很好,但讀取數據時表現不好,或者正好相反,類似傳統數據庫基于范式的OR建模,在實際項目中考慮Hbase設計模式是,我們需要從以下幾方面內容著手:

這個表應該有多少個列簇

列簇使用什么數據

每個列簇應有多少個列

列名應該是什么,盡管列名不必在建表時定義,但是讀寫數據時是需要的

單元應該存放什么數據

每個單元存儲什么時間版本

行健結構是什么,應該包括什么信息

總結

現如今各種數據存儲方案層出不窮,本文僅僅是結合兩個實戰場景就基于HBase的大數據存儲做了簡單的分析,并對HBase的原理做了簡單的闡述。如何使用好HBase,甚至于如何選擇一個最優的數據存儲方案,還需要我們根據場景需要具體分析和設計

關鍵字:數據存儲

本文摘自:魔據教育

x 如何使用HBase?大數據存儲的兩個實戰場景 掃一掃
分享本文到朋友圈
當前位置:大數據業界動態 → 正文

如何使用HBase?大數據存儲的兩個實戰場景

責任編輯:zsheng |來源:企業網D1Net  2018-09-05 09:44:13 本文摘自:魔據教育

HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,適用于結構化的存儲,底層依賴于Hadoop的HDFS,利用HBase技術可在廉價PCServer上搭建起大規模結構化存儲集群。因此HBase被廣泛使用在大數據存儲的解決方案中。

為何使用HBase

HBase的優點:

- 列可以動態增加,并且列為空就不存儲數據,節省存儲空間。

- Hbase自動切分數據,使得數據存儲自動具有水平scalability。

- Hbase可以提供高并發讀寫操作的支持。

HBase的缺點:

- 不能支持條件查詢,只支持按照Row key來查詢。

- HBase并不適合傳統的事物處理程序或關聯分析,不支持復雜查詢,一定程度上限制了它的使用,但是用它做數據存儲的優勢也同樣非常明顯。

因為HBase存儲的是松散的數據,所以如果你的應用程序中,數據表每一行的結構是有差別的,那么可以考慮使用HBase。因為HBase的列可以動態增加,并且列為空就不存儲數據,所以如果你需要經常追加字段,且大部分字段是NULL值的,那可以考慮HBase。因為HBase可以根據Rowkey提供高效的查詢,所以如果你的數據(包括元數據、消息、二進制數據等)都有著同一個主鍵,或者你需要通過鍵來訪問和修改數據,使用HBase是一個很好地選擇。

如何使用HBase

場景一:賣家操作日志

賣家操作日志,顧名思義是用來記錄商家操作的系統,從而可以保證商家可以精確查詢自己的各種操作。京東有幾十萬的商家時時刻刻的進行著各種操作,因此賣家操作日志的特點是:數據量大、實時性強、增多查少。

 

\

 

圖1

 

\

 

圖2

我們在做賣家操作日志初期,將所有的操作日志存放在ES中,操作日志的數據量是非常大的,但尷尬的是我們當時所能申請到的ES資源有限。當把大量的數據存儲到有限的ES集群中時便導致了性能的下降。在這種情況下,我們選擇了只在ES集群中存儲最近三個月的數據,對其提供靈活的查詢,而長期的數據存儲使用HBase來進行。這樣的話我們便可以實現對近期操作靈活展現,對長期數據也有精確備份。

場景二:京麥消息日志的存儲

京麥消息日志的存儲是屬于京麥筋斗云系統(用于打造京麥消息生態系統閉環)不可或缺的一部分。其中包含消息的全鏈路追蹤以及消息的統計分析。京麥消息每天都會有幾千萬的消息量,如何對消息進行追蹤和統計便成為了一個至關重要的問題。消息追蹤要求實時性、多維度精確查詢,因此我們選擇將最近一周的消息日志存儲在ES。統計分析要求我們有足夠多的數據,因此我們在將數據存儲在ES中的同時也存儲在HBase中一份。最終再定期將HBase中的數據導入到京東的數據集市中,這樣我們便可以很方便的對京麥消息進行統計分析。

HBase的數據結構

 

\

 

要使用HBase我們首先要了解HBase的數據結構:

HBase會存儲系列的行記錄,行記錄有三個基本類型的定義:Row Key、Time Stamp、Column Family。

Row Key

與NoSQL數據庫一樣,Row Key是用來檢索記錄的主鍵。訪問HBase table中的行,只有三種方式:

通過單個Row Key訪問。

通過Row Key的range全表掃描。

Row Key可以是任意字符串(最大長度是64KB,實際應用中長度一般為 10 ~ 100bytes),在HBase內部,Row Key保存為字節數組。

在存儲時,數據按照Row Key的字典序(byte order)排序存儲。設計Key時,要充分排序存儲這個特性,將經常一起讀取的行存儲到一起(位置相關性)。

Column Family

HBase表中每個列都必須屬于某個列族,列族必須作為表模式定義的一部分預先給出(有點像關系型數據庫中的列名,定義完一般情況下就不會再去修改);

列名以列族作為前綴,每個列族都可以有多個列成員。新的列族成員(也就是列)可以隨后按需,動態加入。

Hbase把同一列族里面的數據存儲在同一目錄下,由幾個文件保存。

Time Stamp

在HBase每個cell存儲單元對同一份數據有多個版本,根據唯一的時間戳來區分每個版本之間的差異,不同版本的數據按照時間倒序排序,最新的數據版本排在最前面。

簡述HBase的架構原理

1. HBase的模塊

 

\

 

Master

HBase Master用于協調多個Region Server,偵測各個Region Server之間的狀態,并平衡Region Server之間的負載。HBase Master還有一個職責就是負責分配Region給Region Server。HBase允許多個Master 節點共存,但是這需要Zookeeper的幫助。不過當多個Master節點共存時,只有一個Master是提供服務的,其他的Master節點處于待命的狀態。當正在工作的Master節點宕機時,其他的Master則會接管 HBase 的集群。

Region Server

對于一個Region Server而言,其包括了多個Region。Region Server的作用只是管理表格,以及實現讀寫操作。Client 直接連接Region Server,并通信獲取HBase中的數據。對于Region而言,則是真實存放HBase數據的地方,也就說Region是HBase可用性和分布式的基本單位。如果當一個表格很大,并由多個CF組成時,那么表的數據將存放在多個Region之間,并且在每個Region中會關聯多個存儲的單元(Store)。

Zookeeper

對于HBase而言,Zookeeper的作用是至關重要的。首先Zookeeper是作為HBase Master的HA解決方案。也就是說,是Zookeeper保證了至少有一個HBase Master處于運行狀態。并且Zookeeper負責Region和Region Server的注冊。其實Zookeeper發展到目前為止,已經成為了分布式大數據框架中容錯性的標準框架。不光是HBase,幾乎所有的分布式大數據相關的開源框架,都依賴于Zookeeper實現HA。

2. HBase的原理

 

\

 

首先我們需要知道HBase的集群是通過Zookeeper來進行機器之前的協調,也就是說HBase Master與Region Server之間的關系是依賴Zookeeper來維護。當一個Client需要訪問HBase集群時,Client需要先和Zookeeper來通信,然后才會找到對應的Region Server。每一個 Region Server管理著很多個Region。對于HBase來說,Region是HBase并行化的基本單元。因此,數據也都存儲在Region中。

這里我們需要特別注意,每一個Region都只存儲一個Column Family的數據,并且是該CF中的一段(按Row 的區間分成多個Region)。Region所能存儲的數據大小是有上限的,當達到該上限時(Threshold),Region會進行分裂,數據也會分裂到多個Region中,這樣便可以提高數據的并行化,以及提高數據的容量。

每個Region包含著多個Store對象。每個Store包含一個MemStore,和一個或多個HFile。MemStore便是數據在內存中的實體,并且一般都是有序的。當數據向Region寫入的時候,會先寫入MemStore。當MemStore中的數據需要向底層文件系統傾倒(Dump)時(例如MemStore中的數據體積到達MemStore配置的最大值),Store便會創建StoreFile,而StoreFile就是對HFile一層封裝。所以MemStore中的數據會最終寫入到HFile中,也就是磁盤IO。由于HBase底層依靠HDFS,因此HFile都存儲在HDFS之中。這便是整個HBase工作的原理簡述。

使用HBase時應注意的問題

基于Hbase的系統設計與開發中,需要考慮的因素不同于關系型數據庫,Hbase模式本身很簡單,但賦予你更多調整的空間,有一些模式寫性能很好,但讀取數據時表現不好,或者正好相反,類似傳統數據庫基于范式的OR建模,在實際項目中考慮Hbase設計模式是,我們需要從以下幾方面內容著手:

這個表應該有多少個列簇

列簇使用什么數據

每個列簇應有多少個列

列名應該是什么,盡管列名不必在建表時定義,但是讀寫數據時是需要的

單元應該存放什么數據

每個單元存儲什么時間版本

行健結構是什么,應該包括什么信息

總結

現如今各種數據存儲方案層出不窮,本文僅僅是結合兩個實戰場景就基于HBase的大數據存儲做了簡單的分析,并對HBase的原理做了簡單的闡述。如何使用好HBase,甚至于如何選擇一個最優的數據存儲方案,還需要我們根據場景需要具體分析和設計

關鍵字:數據存儲

本文摘自:魔據教育

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 清苑县| 沧源| 靖边县| 贵港市| 太湖县| 宜兰县| 高唐县| 柘城县| 舞钢市| 卢湾区| 凤翔县| 措勤县| 梧州市| 长寿区| 孟津县| 兴海县| 汤阴县| 新营市| 西丰县| 日照市| 芒康县| 呼伦贝尔市| 梨树县| 田东县| 三穗县| 芷江| 新巴尔虎左旗| 神农架林区| 南召县| 汝城县| 建瓯市| 梨树县| 东乡族自治县| 太湖县| 汉阴县| 高唐县| 荣昌县| 澄城县| 海安县| 泰来县| 杨浦区|