Google?bigtable?開源實現(xiàn)? ?---2008年---->&n">

欧美大成WWW永久网站婷_丝袜黄色一区在线视频网站_亚洲男人天堂久久_熟妇淫乱91视频_中文人妻免费无码区_亚洲成人色av一区_91精品尤物福利国产色欲_免费欧美日韩精品在线_国产精品爱v免费观看网站_边摸边做超爽毛片18禁

第四周 大數(shù)據(jù)學習-深圳市模具廠

2019-10-20 09:11:29


第四周   

              Hbase 。

              Hbase  -> Google bigtable 開源實現(xiàn)   ---2008年---->  apache hadoop 下面的項目   

                               采用的公司 :    Facebook           Intel       yahoo     baidu     alibaba      tencent   360  等等   nosql 數(shù)據(jù)庫

                               

                           image.png


      image.png


                SQL (Structured Query Language) 數(shù)據(jù)庫,指關系型數(shù)據(jù)庫。

                                                                       主要代表:SQL Server,Oracle,MySQL(開源),PostgreSQL(開源)。

          NoSQL(Not Only SQL)泛指非關系型數(shù)據(jù)庫。

                                                                       主要代表:MongoDB,Redis,CouchDB。 supersech      hbase , kylin ,  chiohouse   phesto


               關系型數(shù)據(jù)庫的特點:    面向行的,    Nosql 是面向列的。  

               高并發(fā)狀態(tài)下:      分庫分表    讀寫分離   帶來數(shù)據(jù)一致性問題 ,海量數(shù)據(jù)實現(xiàn)出來很復雜,后期遷移也很復雜。

               高可用,可靠性,可伸縮性的措施: 主備 、 主從 、 多主。   本身的可擴展性很差。   增加節(jié)點或者宕機要做遷移。  

               Hbase 首先是一個大表。


1.關系型數(shù)據(jù)庫理論 - ACID

            ACID,是指數(shù)據(jù)庫管理系統(tǒng)(DBMS)在寫入或更新資料的過程中,為保證事務(transaction)是正確可靠的,

                      所必須具備的四個特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、

                      隔離性(isolation,又稱獨立性)、持久性(durability)。

                      A – Atomicity – 原子性

                                             一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環(huán)節(jié)。

                                             事務在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務開始前的狀態(tài),就像這個事務從來沒有被執(zhí)行過一樣。

                      C – Consistency – 一致性

                                             在事務開始之前和事務結束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規(guī)則,

                                              這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預定的工作。

                      I – Isolation – 隔離性

                                             數(shù)據(jù)庫允許多個并發(fā)事務同時對其數(shù)據(jù)進行讀寫和修改的能力,隔離性可以防止多個事務并發(fā)執(zhí)行時

                                             由于交叉執(zhí)行而導致數(shù)據(jù)的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、

                                             讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。

                      D – Durability – 持久性

                                             事務處理結束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。

       關系型數(shù)據(jù)庫嚴格遵循ACID理論。

       但當數(shù)據(jù)庫要開始滿足橫向擴展、高可用、模式自由等需求時,需要對ACID理論進行取舍,不能嚴格遵循ACID。

       以CAP理論和BASE理論為基礎的NoSQL數(shù)據(jù)庫開始出現(xiàn)。

 

2.分布式系統(tǒng)理論

 

2.1 分布式系統(tǒng)介紹

 

分布式系統(tǒng)的核心理念是讓多臺服務器協(xié)同工作,完成單臺服務器無法處理的任務,尤其是高并發(fā)或者大數(shù)據(jù)量的任務。分布式是NoSQL數(shù)據(jù)庫的必要條件。

 

分布式系統(tǒng)由獨立的服務器通過網(wǎng)絡松散耦合組成的。每個服務器都是一臺獨立的PC機,服務器之間通過內(nèi)部網(wǎng)絡連接,內(nèi)部網(wǎng)絡速度一般比較快。因為分布式集群里的服務器是通過內(nèi)部網(wǎng)絡松散耦合,各節(jié)點之間的通訊有一定的網(wǎng)絡開銷,因此分布式系統(tǒng)在設計上盡可能減少節(jié)點間通訊。此外,因為網(wǎng)絡傳輸瓶頸,單個節(jié)點的性能高低對分布式系統(tǒng)整體性能影響不大。比如,對分布式應用來說,采用不同編程語言開發(fā)帶來的單個應用服務的性能差異,跟網(wǎng)絡開銷比起來都可以忽略不計。

 

因此,分布式系統(tǒng)每個節(jié)點一般不采用高性能的服務器,而是使用性能相對一般的普通PC服務器。提升分布式系統(tǒng)的整體性能是通過橫向擴展(增加更多的服務器),而不是縱向擴展(提升每個節(jié)點的服務器性能)實現(xiàn)。

 

分布式系統(tǒng)最大的特點是可擴展性,它能夠適應需求變化而擴展。企業(yè)級應用需求經(jīng)常隨時間而不斷變化,這也對企業(yè)級應用平臺提出了很高的要求。企業(yè)級應用平臺必須要能適應需求的變化,即具有可擴展性。比如移動互聯(lián)網(wǎng)2C應用,隨著互聯(lián)網(wǎng)企業(yè)的業(yè)務規(guī)模不斷增大,業(yè)務變得越來越復雜,并發(fā)用戶請求越來越多,要處理的數(shù)據(jù)也越來越多,這個時候企業(yè)級應用平臺必須能夠適應這些變化,支持高并發(fā)訪問和海量數(shù)據(jù)處理。分布式系統(tǒng)有良好的可擴展性,可以通過增加服務器數(shù)量來增強分布式系統(tǒng)整體的處理能力,以應對企業(yè)的業(yè)務增長帶來的計算需求增加。

 

2.2 分布式存儲的問題 – CAP理論

 

如果我們期待實現(xiàn)一套嚴格滿足ACID的分布式事務,很可能出現(xiàn)的情況就是系統(tǒng)的可用性和嚴格一致性發(fā)生沖突。在可用性和一致性之間永遠無法存在一個兩全其美的方案。由于NoSQL的基本需求就是支持分布式存儲,嚴格一致性與可用性需要互相取舍,由此延伸出了CAP理論來定義分布式存儲遇到的問題。

 

CAP理論告訴我們:一個分布式系統(tǒng)不可能同時滿足一致性(C:Consistency)、可用性(A:Availability)、分區(qū)容錯性(P:Partitiontolerance)這三個基本需求,并且最多只能滿足其中的兩項。

 

對于一個分布式系統(tǒng)來說,分區(qū)容錯是基本需求,否則不能稱之為分布式系統(tǒng)。因此架構師需要在C和A之間尋求平衡。

 


HBase 的物理存儲

HBase 表中的所有行都是按照行鍵的字典序排列的。

因為一張表中包含的行的數(shù)量非常多,有時候會高達幾億行,所以需要分布存儲到多臺服務器上。

因此,當一張表的行太多的時候,HBase 就會根據(jù)行鍵的值對表中的行進行分區(qū),每個行區(qū)間構成一個“分區(qū)(Region)”,

包含了位于某個值域區(qū)間內(nèi)的所有數(shù)據(jù),如圖 1 所示。

HBase的Region存儲模式圖

                   圖 1  HBase的Region存儲模式圖




Region 是按大小分割的,每個表一開始只有二個 Region,隨著數(shù)據(jù)不斷插入到表中,Region 不斷增大,

當增大到一個閾值的時候,Region 就會等分為兩個新的 Region。

當表中的行不斷增多時,就會有越來越多的 Region,如圖 2 所示。



 HBase的Region分裂示意
                                   圖 2  HBase的Region分裂示意


Region 是 HBase 中數(shù)據(jù)分發(fā)和負載均衡的最小單元,默認大小是 100MB 到 200MB。

不同的 Region 可以分布在不同的 Region Server 上,但一個 Region 不會拆分到多個 Region Server 上。

每個 Region Server 負責管理一個 Region 集合。

如圖 3 所示。



HBase的Region分布模式
                                                                圖 3  HBase的Region分布模式



Region 是 HBase 在 Region Server 上數(shù)據(jù)分發(fā)的最小單元,但并不是存儲的最小單元。

事實上,每個 Region 由一個或者多個 Store 組成,每個 Store 保存一個列族的數(shù)據(jù)。

每個 Store 又由一個 memStore 和 0 至多個 Store File 組成,如圖 4 所示。

Store File 以 HFile 格式保存在 HDFS 上。


HBase的Region存儲模式
                                                                       圖 4  HBase的Region存儲模式

HBase 的邏輯架構

在分布式的生產(chǎn)環(huán)境中,HBase 需要運行在 HDFS 之上,以 HDFS 作為其基礎的存儲設施。

HBase 的上層是訪問數(shù)據(jù)的 Java API 層,供應用訪問存儲在 HBase 中的數(shù)據(jù)。

HBase 的集群主要由 Master、Region Server 和 Zookeeper 組成,

具體模塊如圖 5 所示。

HBase的系統(tǒng)架構

                                                                 圖 5  HBase的系統(tǒng)架構



1)Master

Master 主要負責表和 Region 的管理工作。

表的管理工作主要是負責完成增加表、刪除表、修改表和查詢表等操作。

Region 的管理工作更復雜一些,Master 需要負責分配 Region 給 Region Server,協(xié)調(diào)多個 Region Server,檢測各個 Region Server 的狀態(tài),并平衡 Region Server 之間的負載。

當 Region 分裂或合并之后,Master 負責重新調(diào)整 Region 的布局。如果某個 Region Server 發(fā)生故障,Master 需要負責把故障 Region Server 上的 Region 遷移到其他 Region Server 上。

HBase 允許多個 Master 結點共存,但是這需要 Zookeeper 進行協(xié)調(diào)。當多個 Master 結點共存時,只有一個 Master 是提供服務的,其他的 Master 結點處于待命的狀態(tài)。

當正在工作的 Master 結點宕機時,其他的 Master 則會接管 HBase 的集群。



2)RegionServer

HBase 有許多個 Region Server,每個 Region Server 又包含多個 Region。Region Server 是 HBase 最核心的模塊,負責維護 Master 分配給它的 Region 集合,并處理對這些 Region 的讀寫操作。

Client 直接與 Region Server 連接,并經(jīng)過通信獲取 HBase 中的數(shù)據(jù)。

HBase 釆用 HDFS 作為底層存儲文件系統(tǒng),Region Server 需要向 HDFS 寫入數(shù)據(jù),并利用 HDFS 提供可靠穩(wěn)定的數(shù)據(jù)存儲。

Region Server 并不需要提供數(shù)據(jù)復制和維護數(shù)據(jù)副本的功能。


3)Zookeeper

Zookeeper 的作用對 HBase 很重要。


首先,Zookeeper 是 HBase Master 的高可用性(High Available,HA)解決方案。

也就是說,Zookeeper 保證了至少有一個 HBase Master 處于運行狀態(tài)。

Zookeeper 同時負責 Region 和 Region Server 的注冊。

HBase 集群的 Master 是整個集群的管理者,它必須知道每個 Region Server 的狀態(tài)。

HBase 就是使用 Zookeeper 來管理 Region Server 狀態(tài)的。

每個 Region Server 都向 Zookeeper 注冊,由 Zookeeper 實時監(jiān)控每個 Region Server 的狀態(tài),并通知給 Master。


這樣,Master 就可以通過 Zookeeper 隨時感知各個 Region Server 的工作狀態(tài)。


需要搭建 ZooKepper 集群 , 采取奇數(shù)作為基礎, 要不斷選取出唯一的領導者 。


然后在搭建 Hbase 集群。



image.png

image.png



Hlog = Mysql 中的 bingLog

image.png



Hbase 邏輯架構

image.png


image.png



安裝 Hbase


1、下載軟件從   hbase.apache.com   

2、上傳到 \bigdata\tools

3、tar -zxvf hbase-1.2.3tar.gz

4、cd /bigdata/tools/hbase1.2.3/config

5、vi hbase-env.sh

      export ...


6、vi  hbase-site.xml



image.png

image.png

image.png


image.png

我們上課說的:    start-hbase.sh

              查看:     jsp                         或者      http://192.168.1.119:16030


              安裝一個插件 Phoenix , 就可以用 mysql 數(shù)據(jù)庫的命令看了   , 等于是一個 shell .

              API可以在 Java后端做軟件查看 。

              

           

第四周, 盧老師筆記--------------------------------------------------------------------------------------------------


HBase 是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng)。

利用PC搭建大規(guī)模的結構化存儲集群。


HBase -> Google Bigtable開源實現(xiàn)。GFS <- HDFS 2006 powerset jim

2008  Apache Hadoop 


Facebook

Intel

Yahoo

baidu

alibaba

tencent

360


回顧一下傳統(tǒng)關系型數(shù)據(jù)庫

1、有事務的保障 ACID 原子性、一治性、隔離性、持久性

2、豐富的數(shù)據(jù)類型和sql操作

3、嚴格的數(shù)據(jù)類型,及行式存儲


關系型數(shù)據(jù)庫在高并發(fā)、大數(shù)據(jù)應對方式:

高并發(fā):

措施:分庫分表 、讀寫分離

帶來數(shù)據(jù)一致性問題

海量數(shù)據(jù):

措施:分庫分表

實現(xiàn)復雜,后期遷移復雜

路由自定義

高可用、可靠、可伸縮、

措施:主備、主從、多主

本身擴展性差,增加節(jié)點宕機需要做數(shù)據(jù)遷移


HBase特點:

大表:一個表有上億行,上百萬列

面向列:面向列族的存儲,列族獨立檢索

稀疏:對于空(null)的列,不占用空間

。。。



分布式數(shù)據(jù)庫hbase特點:

基于列式高效存儲

強一致數(shù)據(jù)訪問

高可靠

高性能

可伸縮,自由切分、遷移

Schema free


RowKey

:與nosql數(shù)據(jù)庫一樣,row key是用來檢索記錄的主鍵。

而且可以訪問hbase table中行,只有三方法:

1、通過單個row key進行訪問

2、通過row key的range進行訪問

3、全表掃描

row key行鍵,64kb,實際應用長度一般10~100ytes,在hbase內(nèi)部,row key保存為字節(jié)數(shù)組。存儲時,數(shù)據(jù)按row key的字典順序排序存儲。



Columns family

列族:

hbase表中的每個列,都歸屬于某個列族。

列族是表的schema的一部分,而列不是,必須在使用表之前進行定義。

列名都以列族作為前綴。

courses:history, courses:math都屬于courses這個列族。



Time Stamp

時間戳:

hbase中通過row和columns確定的為一個存儲單元:cell

每個cell都保存著同一份數(shù)據(jù)的多個版本。版本通過時間戳來做索引。時間戳的類型是64位整型。

時間戳也可以由hbase系統(tǒng)進行賦值,可以精確到毫秒,當然也可以由客戶顯示賦值。

每個cell中,不同版本的數(shù)據(jù)按時間倒序排序,最新的數(shù)據(jù)排在最前面。為了避免數(shù)據(jù)存在過多版本造成的管理負擔,hbase提供兩種回收方式,一是保存數(shù)據(jù)最后的n個版本,二保存最近一段時間內(nèi)版本(比如最近7天),用戶可以針對每個列族進行設置。




Cell

由row key + column ,version唯一確定單元,cell中的數(shù)據(jù)是沒有類型的,全是字節(jié)碼形式存儲。

Cell的內(nèi)容是不可分割的字節(jié)數(shù)組。

無類型、字節(jié)碼。



物理存儲

在hbase table中所有的行都按row key的字典序排列。

table在行的方向上分割為多個hregion


Region按大小分割的,每個表一開始只有一個region,隨著數(shù)據(jù)不斷插入表,region不斷增大,當增大到一定閥值時候,Hregion就會分成兩個新hregion



HRegion是Hbase中分布式存儲和負載均衡的最小單元,最小單元就表示不同的Hregion可以分布在不同的hregion server上,但一個hregion是不會折分到多個server


Store:

Hregion雖然是分布式存儲的最小單元,但并不是存儲的最小元,在下層還有store,而store是以hfile的格式保存在hdfs上。





HFile:

1、Data Block

保存表中的數(shù)據(jù),這部分可以被壓縮。


2、Meta Block

保存用戶自定義的kv對,可以被壓縮


3、Data Block Index

Data Block索引,每條索引的key是被索引的block的第一條記錄的key


4、Meta Block Index

Meta Block索引.


5、Trailer

是定長的,保存每一段的偏移量。在讀取一個hfile時,會首先讀取Trailer,Trailer保存了每個段的起始位置,然后,DataBlockIndex會被讀取到內(nèi)存中,這樣,當檢索某個key時,不需要掃描整個HFile,而只需要從內(nèi)存中找到key所在的blok,通過一次磁盤io,可以將整個block讀取到內(nèi)存中,再找到需要的key。DataBlockInde采用LRu機制淘汰。

HFile的DataBlock,MetaBlock通常采用壓縮方式進行存儲,壓縮后可以減少磁盤io,相應的cpu的開支也會減少。


6、File Info

是HFile的元信息,不被壓縮,用記可以在這一段添加自己的元信息。


目前HFile的壓縮支持兩種方式:GZip、Lzo


Hlog:

Hlog類似于mysql 中的binlog,用來做災難恢復,hlog記錄了所有數(shù)據(jù)的變更,一但數(shù)據(jù)修改,都可以在log里面進行恢復。


注意:每個Region Server維護一個Hlog,而不是每個Region一個


這樣不同的Region的日志會混合在一起,這樣做的目的,是不斷追加單個文件相對于同時寫多個文件而言,可以減少磁盤尋址次數(shù)。所以可以提高對table的寫的性能。


Hlog 文件就是一個hadoop squence file ,squence file的key是hlogkey的對象,hlogkey記錄了寫入數(shù)據(jù)的歸屬信息。除了table和region名字之外,同時還包括sequence number和time stamp,time stamp是寫入時間,sequence number和的起始值為0,或者是最近一次存儲文件 系統(tǒng)的sequence number。



Client:

訪問hbase接口,維護著region位置的緩存信息。


Zookeeper:

保證任何時候,集群中只有一個master

存儲所有Region的尋址入口。

實時監(jiān)控Region Server的狀態(tài),將上下線信息通知master

存儲hbase的schema,包括有哪些table,每個table有哪些column family


Master

為Region Server分配region

負載region server的負載均衡

發(fā)現(xiàn)失效的region server并重新分析其上的region

GFS上的垃圾文件回收

處理schema更新請求。




Region Server

維護master分配給它的region,處理io請求

負責切分過大的region,可以看到client訪問hbase上數(shù)據(jù)的過程并不需要master參與。



HBase安裝部署與配置:

單機、集群

1、上傳hbase安裝包

2、解壓hbase文件  tar -zxvf hbase-1.2.3.tar.gz

3、cd /bigdata/tools/hbase1.2.3/conf

4、修改hbase-env.sh

export JAVA_HOME=/bigdata/tools/jdk1.7

export HBASE_CLASSPATH=/bigdata/tools/hbase1.2.3/conf

export HBASE_MANAGERS_ZK=true


5、修改hbase-site.xml

hbase.rootdir

hdfs://192.168.1.119:9000/hbase



hbase.cluster.distributed

true




6、配置region servers文件及hbase環(huán)境變量

regionservers文件增加集群節(jié)點ip

192.168.1.119

192.168.1.120

192.168.1.121


配置hbase環(huán)境變量

export HBASE_HOME=/bigdata/tools/hbase1.2.3/

export PATH=$PATH:/bigdata/tools/hbase1.2.3/bin


source /etc/profile



7、啟動hbase  

start-hbase.sh


8、查看hbase進程

jsp

DataNode

SecondaryNamenode

NameNode

ResourceManger

NodeManager

HRegionServer

Hmaster

JobTracker

TaskTracker

QuorumpeerMain


9、通過http頁面進行查看

http://192.168.1.119:16030


hbase shell基本用法:

1、建立一個表scores,有兩個列族,grad和courese

create 'scores','grade','courese'


2、查看hbase中的所有的表:

list


3、查看表結構:

describe 'scores'


4、按設計的表結構插入值:

put 'scores','tom','grade','5'

put 'scores','tom','courese:math','97'

put 'scores','Jim','courese:art','87'

put 'scores','Jim','grade','4'


5、根據(jù)鍵值查詢數(shù)據(jù)

get 'scores','Jim'

get 'scores','Jim','grade'


6、查看表中所有數(shù)據(jù)

scan 'scores'


7、刪除指定數(shù)據(jù)

delete 'scores','Jim','grage'



8、修改表結構

disable 'scores'

alter 'scores', NAME=>'info'

enable 'scores'


9、統(tǒng)計行數(shù)

count 't1'


10、刪除表

disable 'scores'

drop 'scores'



API


1、初始化配置

publice class HBaseTest{

private static Configuration conf = null;

Cinfuguration HBASE_CONF = new Configuration()

HBASE_CONF.set('hbase.master','192.168.1.119:60000')

HBASE_CONF.set('hbase.zookeeper.quorum','hsslave1,hsslave2,hsslave3')

.set('hbase.zookeeper.property.clientport','2181')

conf = HBaseconfiguration.create(HBASE_CONF)


}


2、創(chuàng)建一張表



public static void createTable(String tableName,String[] familys)throws Exception{

HBaseAdmin admin = new HBaseAdmin(conf)

HTableDescripor tableDes = new HTbaleDescriptor(tableName)

tableDes.addFamily(new HColumnDescriptor(familys[i]))

admin.createTable(tableDes)

}



3、插入一條數(shù)據(jù)


4、刪除一行數(shù)據(jù)


5、查詢一條記錄


6、查詢所有數(shù)據(jù)


3、刪除一張表


-------------------------------------------------------------------------------------------

  



首頁
產(chǎn)品
新聞
聯(lián)系