版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
物聯(lián)網(wǎng)大數(shù)據(jù)處理技術(shù)與實(shí)踐InternetofThings
BigDataprocessingTechnologyandPractice物聯(lián)網(wǎng)大數(shù)據(jù)存儲(chǔ)與管理云文件系統(tǒng)的關(guān)鍵技術(shù)1NoSQL數(shù)據(jù)庫(kù)關(guān)鍵技術(shù)2PARTONE1云文件系統(tǒng)的關(guān)鍵技術(shù)師傅領(lǐng)進(jìn)門(mén),學(xué)藝在自身。------中國(guó)諺語(yǔ)物聯(lián)網(wǎng)大數(shù)據(jù)存儲(chǔ)與管理本書(shū)前面已經(jīng)分析了這些數(shù)據(jù)的特點(diǎn),針對(duì)其存儲(chǔ)與管理,以下幾個(gè)特點(diǎn)對(duì)物聯(lián)網(wǎng)大數(shù)據(jù)的存儲(chǔ)與管理帶來(lái)如下挑戰(zhàn):物聯(lián)網(wǎng)大數(shù)據(jù)的海量性物聯(lián)網(wǎng)大數(shù)據(jù)的高維度和部分稀疏特性物聯(lián)網(wǎng)數(shù)據(jù)的時(shí)空相關(guān)性物聯(lián)網(wǎng)數(shù)據(jù)的序列性與動(dòng)態(tài)流式特性HDFS的目標(biāo)和基本假設(shè)條件由于系統(tǒng)是由大量廉價(jià)商用設(shè)備連接而成的,即使每一部分的故障概率都很低,連接在一起使用總的故障概率也將大幅提高。因此在系統(tǒng)中硬件故障成為大概率事件,這就意味著硬件故障成為常態(tài),快速地檢測(cè)故障并從故障中恢復(fù)成為系統(tǒng)設(shè)計(jì)的核心目標(biāo)之一。(2)流式數(shù)據(jù)存取
HDFS設(shè)計(jì)注重?cái)?shù)據(jù)存取的高吞吐量而不是數(shù)據(jù)訪問(wèn)的低延時(shí),系統(tǒng)以流式數(shù)據(jù)存取為主,批處理為主要使用方式,而不是一般文件系統(tǒng)中常用的交互使用方式。因此系統(tǒng)面向的應(yīng)用是以大規(guī)模流量數(shù)據(jù)訪問(wèn)為主的應(yīng)用,對(duì)于需要大量低延時(shí)隨機(jī)數(shù)據(jù)訪問(wèn)的應(yīng)用來(lái)說(shuō)并不合適。(1)
硬件失敗HDFS的目標(biāo)和基本假設(shè)條件(4)簡(jiǎn)單的一致性模型
HDFS被設(shè)計(jì)用來(lái)存取規(guī)模巨大的文件,文件大小以GB甚至TB為單位,而不是KB或MB級(jí)的小型文件。單個(gè)集群能夠支撐上千萬(wàn)的這種大規(guī)模數(shù)據(jù)文件,因此文件系統(tǒng)必須能夠管理成千上萬(wàn)的可擴(kuò)展數(shù)據(jù)節(jié)點(diǎn),并且具有高數(shù)據(jù)傳輸帶寬。
系統(tǒng)面向的多數(shù)應(yīng)用具有一次寫(xiě)、多次讀的特點(diǎn),文件一經(jīng)創(chuàng)建,在寫(xiě)入數(shù)據(jù)并且關(guān)閉之后就不再需要改變,而且數(shù)據(jù)通常只有一個(gè)寫(xiě)入主體,這個(gè)特點(diǎn)簡(jiǎn)化了數(shù)據(jù)一致性問(wèn)題,使數(shù)據(jù)讀取的高吞吐量成為可能。(3)大數(shù)據(jù)集
HDFS的目標(biāo)和基本假設(shè)條件HDFS使用Java語(yǔ)言開(kāi)發(fā)而成,具有先天的可移植性,同時(shí)在設(shè)計(jì)上也注重了系統(tǒng)的可移植性,因此很容易從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái),這個(gè)特點(diǎn)有利于它的廣泛使用。(5)異構(gòu)軟硬件平臺(tái)的可移植性HDFS體系架構(gòu)HDFS系統(tǒng)最底層是由商用PC或商用服務(wù)器構(gòu)成的廉價(jià)集群,這些PC的操作系統(tǒng)可以是Linux或Windows,但在實(shí)際部署中使用Linux的居多,因?yàn)長(zhǎng)inux是開(kāi)源的,使用費(fèi)用低,而且在必要的時(shí)候可以修改。HDFS運(yùn)行在操作系統(tǒng)之上,以TCP/IP作為通信協(xié)議對(duì)集群進(jìn)行統(tǒng)一管理。
HDFS邏輯分層結(jié)構(gòu)HDFS體系架構(gòu)HDFS物理部署實(shí)例如右圖所示,是一個(gè)HDFS物理部署實(shí)例,在這個(gè)實(shí)例中集群由兩個(gè)機(jī)架組成,每個(gè)機(jī)架都有一個(gè)交換機(jī)和16臺(tái)商用計(jì)算機(jī),兩個(gè)機(jī)架由一個(gè)交換機(jī)連接,整個(gè)集群共有32臺(tái)計(jì)算機(jī),其中一臺(tái)作為主節(jié)點(diǎn)(稱為NameNode),一臺(tái)作為備用主節(jié)點(diǎn)(稱為SecondaryNameNode),其他作為數(shù)據(jù)節(jié)點(diǎn)(稱為DataNode)。HDFS體系架構(gòu)HDFS系統(tǒng)管理示意圖文件數(shù)據(jù)以塊(Block)為單位存儲(chǔ)在DataNode中,文件元數(shù)據(jù)管理Block的標(biāo)識(shí)BlockID和對(duì)應(yīng)的存儲(chǔ)位置。當(dāng)NameNode出現(xiàn)故障時(shí),SecondaryNameNode提供備用的管理能力NameNode管理整個(gè)集群的文件元數(shù)據(jù),執(zhí)行文件系統(tǒng)命名空間的所有操作,包括打開(kāi)、關(guān)閉、重命名、創(chuàng)建文件和目錄,為文件分配數(shù)據(jù)塊并指定文件到數(shù)據(jù)塊的映射客戶端對(duì)文件系統(tǒng)的訪問(wèn)首先從NameNode獲得元數(shù)據(jù),但是客戶端不會(huì)從NameNode中直接得到文件數(shù)據(jù),客戶端需要從文件元數(shù)據(jù)中解析得到文件數(shù)據(jù)塊的位置,然后直接從DataNode中讀取,HDFS對(duì)用戶訪問(wèn)不設(shè)限制SecondaryNameNode是為了增強(qiáng)系統(tǒng)的可靠性而配置的,為NameNode提供備用的管理能力。DataNode負(fù)責(zé)響應(yīng)客戶端對(duì)文件數(shù)據(jù)的讀寫(xiě)請(qǐng)求。性能保障
為了提高NameNode的處理速度,HDFS的元數(shù)據(jù)都存放在內(nèi)存中,所有對(duì)元數(shù)據(jù)的操作都是對(duì)內(nèi)存進(jìn)行讀寫(xiě),相對(duì)于存放在磁盤(pán)上其處理速度大幅提高。這樣做的前提是元數(shù)據(jù)的數(shù)據(jù)量相對(duì)較小,內(nèi)存能夠放得下通過(guò)以下兩個(gè)方法可以增加內(nèi)存中元數(shù)據(jù)的存儲(chǔ)量:第一當(dāng)然是增加內(nèi)存,但是內(nèi)存不能無(wú)限擴(kuò)展;第二是采用一些壓縮算法,壓縮元數(shù)據(jù)的體積,比如對(duì)文件名采用前綴壓縮算法可以減少文件名所占用的空間
元數(shù)據(jù)全部存放于NameNode的內(nèi)存中有一個(gè)明顯的缺點(diǎn)就是,當(dāng)NameNode發(fā)生故障時(shí)元數(shù)據(jù)將全部丟失,必須對(duì)元數(shù)據(jù)進(jìn)行持久化處理,也就是保存在磁盤(pán)上,以便于故障后的恢復(fù)。(1)元數(shù)據(jù)操作
性能保障
HDFS采用機(jī)架感知的技術(shù)合理安排數(shù)據(jù)塊的位置,使數(shù)據(jù)存取效率更高。機(jī)架感知技術(shù)的原理是,相比于不同機(jī)架上的計(jì)算機(jī),同一個(gè)機(jī)架上的計(jì)算機(jī)網(wǎng)絡(luò)距離更短,傳輸速度更快通基于機(jī)架感知原理,HDFS的數(shù)據(jù)塊復(fù)制策略是,數(shù)據(jù)塊的第一個(gè)副本寫(xiě)在與客戶端同一個(gè)機(jī)架的DataNode上,如果客戶端不在集群范圍內(nèi)則寫(xiě)在與客戶端網(wǎng)絡(luò)距離最近、網(wǎng)絡(luò)傳輸速度最高的節(jié)點(diǎn)上,數(shù)據(jù)塊的第二個(gè)副本由第一個(gè)副本傳輸?shù)酵粰C(jī)架的不同DataNode上,第三個(gè)副本由第二個(gè)副本傳輸?shù)讲煌瑱C(jī)架的DataNode上。這樣做使第一個(gè)和第二個(gè)副本可以很快地復(fù)制完成,但是為了防止由于機(jī)架的故障使數(shù)據(jù)不可用,所以第三個(gè)副本需要放在不同的機(jī)架上。對(duì)于數(shù)據(jù)塊的讀取基于機(jī)架感知技術(shù)同樣首先計(jì)算客戶端與不同數(shù)據(jù)塊的網(wǎng)絡(luò)距離,選擇從距離最近的DataNode上讀取數(shù)據(jù)。(2)數(shù)據(jù)塊的讀寫(xiě)
性能保障
機(jī)架感知技術(shù)的核心是網(wǎng)絡(luò)距離的計(jì)算,不同DataNode的網(wǎng)絡(luò)距離可以根據(jù)統(tǒng)一編址的IP地址計(jì)算,也可以根據(jù)統(tǒng)一命名的網(wǎng)絡(luò)名稱來(lái)計(jì)算。HDFS對(duì)整個(gè)集群的數(shù)據(jù)塊分布還會(huì)采用再平衡的策略進(jìn)行管理,當(dāng)集群中某些DataNode的存儲(chǔ)空間剩余很多而有些存儲(chǔ)空間剩余很少時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)整數(shù)據(jù)塊的分配,通過(guò)數(shù)據(jù)塊的遷移使整個(gè)集群的數(shù)據(jù)塊分布趨向均勻。(2)數(shù)據(jù)塊的讀寫(xiě)
機(jī)架感知節(jié)點(diǎn)組織圖性能保障(3)智能信息檢索
DataNode會(huì)周期性地向NameNode發(fā)送心跳信號(hào),NameNode處理這些信息,將近期沒(méi)有發(fā)送心跳信號(hào)的DataNode標(biāo)記出來(lái),并且不再將數(shù)據(jù)塊的讀寫(xiě)請(qǐng)求分配給這些節(jié)點(diǎn),同時(shí)這些節(jié)點(diǎn)上的數(shù)據(jù)塊也不再可用,相應(yīng)文件元數(shù)據(jù)中的數(shù)據(jù)塊副本數(shù)減少,NameNode會(huì)定期檢查數(shù)據(jù)塊的副本數(shù)量,當(dāng)小于配置的數(shù)量時(shí)會(huì)啟動(dòng)復(fù)制功能,使數(shù)據(jù)塊的副本數(shù)量達(dá)到配置的要求。數(shù)據(jù)塊在讀取、寫(xiě)入或傳輸過(guò)程中可能由于各種原因造成數(shù)據(jù)損壞,客戶端在寫(xiě)數(shù)據(jù)塊的時(shí)候會(huì)同時(shí)生成數(shù)據(jù)塊的校驗(yàn)和,校驗(yàn)和會(huì)寫(xiě)進(jìn)一個(gè)單獨(dú)的隱藏文件,當(dāng)客戶端從DataNode中讀取數(shù)據(jù)時(shí)會(huì)同時(shí)讀取數(shù)據(jù)塊的校驗(yàn)和進(jìn)行檢驗(yàn),如果不匹配,客戶端會(huì)選擇數(shù)據(jù)塊其他的副本,從而保證了數(shù)據(jù)的正確性。
性能保障(4)垃圾回收
當(dāng)文件被刪除或數(shù)據(jù)塊副本配置數(shù)減小時(shí)會(huì)產(chǎn)生一些廢棄的數(shù)據(jù)塊,對(duì)于這兩種情況系統(tǒng)有不同的回收方式。當(dāng)一個(gè)文件被用戶刪除以后,HDFS不會(huì)立刻將它安全刪除,而是將它移動(dòng)到/trash目錄下,在文件從/trash刪除之前用戶還可以恢復(fù)它,被刪除的文件存放在/trash中的時(shí)間是可配置的,默認(rèn)是6個(gè)小時(shí)。系統(tǒng)會(huì)自動(dòng)掃描/trash目錄,將其中超過(guò)配置時(shí)間的文件刪除,刪除相應(yīng)的元數(shù)據(jù),釋放相應(yīng)的數(shù)據(jù)塊,這意味著文件被真正刪除,用戶將無(wú)法再恢復(fù)它。當(dāng)一個(gè)文件所配置的副本數(shù)減小時(shí),NameNode會(huì)挑選出可以刪除的數(shù)據(jù)塊,數(shù)據(jù)塊的刪除操作通過(guò)心跳信號(hào)傳遞給它所在的DataNode,相應(yīng)的DataNode收到信號(hào)后執(zhí)行刪除操作,釋放指定的數(shù)據(jù)塊空間。
為了方便HDFS的使用,系統(tǒng)提供了多種應(yīng)用接口,常用的有命令行接口、JavaAPI、Web接口等。
(5)訪問(wèn)接口
PARTTWO2NoSQL數(shù)據(jù)庫(kù)關(guān)鍵技術(shù)NoSQL數(shù)據(jù)庫(kù)的優(yōu)勢(shì)靈活的數(shù)據(jù)模型NoSQL數(shù)據(jù)庫(kù)中數(shù)據(jù)可以按照它實(shí)際應(yīng)用中建模的形態(tài)進(jìn)行保存NoSQL數(shù)據(jù)庫(kù)可以在運(yùn)行時(shí)任意增加或減少字段改變數(shù)據(jù)模型NoSQL數(shù)據(jù)庫(kù)的優(yōu)勢(shì)靈活的查詢分析NoSQL數(shù)據(jù)庫(kù)提供更靈活的查詢方式和更強(qiáng)大的查詢語(yǔ)言,人們可以使用NoSQL數(shù)據(jù)庫(kù)提供的查詢接口和查詢語(yǔ)言構(gòu)建任意復(fù)雜的查詢結(jié)果NoSQL數(shù)據(jù)庫(kù)還為特定查詢提供了方便,比如在面向圖的數(shù)據(jù)庫(kù)中,為人們提供了方便圖分析的各種查詢,如圖的遍歷、圖的最短路徑、圖的連通性分析等NoSQL數(shù)據(jù)庫(kù)的優(yōu)勢(shì)數(shù)據(jù)的版本管理NoSQL數(shù)據(jù)庫(kù)都提供數(shù)據(jù)版本管理的功能(不是全部),版本管理最常見(jiàn)的是軟件和文檔的版本管理NoSQL數(shù)據(jù)庫(kù)本身就支持對(duì)數(shù)據(jù)項(xiàng)的版本管理,不需要額外設(shè)計(jì),一個(gè)數(shù)據(jù)項(xiàng)可以根據(jù)配置保留多個(gè)歷史數(shù)據(jù)值,當(dāng)然也可以配置成像關(guān)系數(shù)據(jù)庫(kù)那樣只保存一個(gè)數(shù)據(jù)值NoSQL數(shù)據(jù)庫(kù)的優(yōu)勢(shì)良好的可擴(kuò)展性NoSQL數(shù)據(jù)庫(kù)通過(guò)放松對(duì)一致性的要求來(lái)實(shí)現(xiàn)分區(qū)容忍性的目標(biāo),很容易地將記錄分散存儲(chǔ)在多個(gè)服務(wù)器上,而且通過(guò)構(gòu)造適當(dāng)?shù)乃惴梢詫?shí)現(xiàn)將記錄均勻地分布存儲(chǔ)在服務(wù)器NoSQL數(shù)據(jù)庫(kù)一般采用MapReduce計(jì)算模型(下一章將涉及),這種計(jì)算模型可以充分利用分布式計(jì)算的優(yōu)點(diǎn),將運(yùn)算部署在靠近數(shù)據(jù)的服務(wù)器上進(jìn)行,一般情況下是將查詢計(jì)算分布部署在擁有數(shù)據(jù)的服務(wù)器上,可以很容易地實(shí)現(xiàn)數(shù)據(jù)的大規(guī)模并行搜索NoSQL數(shù)據(jù)庫(kù)的優(yōu)勢(shì)大數(shù)據(jù)量和高性能NoSQL數(shù)據(jù)庫(kù)良好的擴(kuò)展性帶來(lái)了可以線性增加的存儲(chǔ)容量和計(jì)算能力,因此能夠處理大規(guī)模的數(shù)據(jù)存儲(chǔ)并提供高性能的數(shù)據(jù)吞吐能力NoSQL數(shù)據(jù)庫(kù)支持并行計(jì)算的特點(diǎn)使得它可以很容易地利用增加的服務(wù)器的計(jì)算能力,這已經(jīng)在前面進(jìn)行了分析NoSQL數(shù)據(jù)庫(kù)的劣勢(shì)NoSQL數(shù)據(jù)庫(kù)的劣勢(shì)一共有如下的五方面:1)查詢的復(fù)雜性2)事務(wù)性和一致性3)關(guān)系完整性4)訪問(wèn)控制5)標(biāo)準(zhǔn)化NoSQL數(shù)據(jù)庫(kù)的劣勢(shì)查詢的復(fù)雜性NoSQL數(shù)據(jù)庫(kù)的靈活性帶來(lái)學(xué)習(xí)難度:不同NoSQL數(shù)據(jù)庫(kù)有獨(dú)特的查詢語(yǔ)言和接口,增加了學(xué)習(xí)和應(yīng)用的難度。SQL標(biāo)準(zhǔn)化強(qiáng)調(diào)關(guān)系數(shù)據(jù)庫(kù)優(yōu)勢(shì):關(guān)系數(shù)據(jù)庫(kù)通過(guò)多年發(fā)展在SQL支持和查詢優(yōu)化方面表現(xiàn)卓越,提供了穩(wěn)定可靠的操作功能。NoSQL數(shù)據(jù)庫(kù)操作相對(duì)簡(jiǎn)陋:NoSQL系統(tǒng)在數(shù)據(jù)庫(kù)操作的封裝上較為簡(jiǎn)陋,用戶需在應(yīng)用層面完成連接、過(guò)濾、映射等任務(wù),與關(guān)系數(shù)據(jù)庫(kù)相比存在差距。NoSQL數(shù)據(jù)庫(kù)的劣勢(shì)事務(wù)性和一致性
對(duì)于對(duì)數(shù)據(jù)一致性和事務(wù)性要求較高的金融機(jī)構(gòu),傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)仍然是首選。相較之下,大多數(shù)NoSQL數(shù)據(jù)庫(kù)為了追求可用性和分區(qū)容忍性,通常會(huì)放寬對(duì)數(shù)據(jù)一致性的要求,可能導(dǎo)致短期內(nèi)數(shù)據(jù)不一致的情況。此外,為了提高系統(tǒng)可擴(kuò)展性和并行計(jì)算能力,許多NoSQL數(shù)據(jù)庫(kù)不支持事務(wù),使得數(shù)據(jù)庫(kù)操作無(wú)狀態(tài),即無(wú)法在連續(xù)操作中提供回滾能力。NoSQL數(shù)據(jù)庫(kù)的劣勢(shì)關(guān)系完整性
關(guān)系數(shù)據(jù)庫(kù)通過(guò)外鍵約束自動(dòng)保持?jǐn)?shù)據(jù)關(guān)系的完整性,如在刪除關(guān)聯(lián)數(shù)據(jù)時(shí)會(huì)阻止破壞關(guān)系的操作。這得益于關(guān)系數(shù)據(jù)庫(kù)的設(shè)計(jì)。相反,NoSQL數(shù)據(jù)庫(kù)由于簡(jiǎn)單的數(shù)據(jù)模型和分布式環(huán)境的限制,難以實(shí)現(xiàn)對(duì)關(guān)系完整性的強(qiáng)制檢查。在多副本和分布式存儲(chǔ)策略下,大多數(shù)NoSQL數(shù)據(jù)庫(kù)通常不會(huì)阻止刪除某個(gè)數(shù)據(jù)對(duì)象,即使其他對(duì)象仍在使用該數(shù)據(jù)。這凸顯了兩者在數(shù)據(jù)管理方面的不同。NoSQL數(shù)據(jù)庫(kù)的劣勢(shì)訪問(wèn)控制
關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)具備完善的用戶權(quán)限管理和內(nèi)建安全模型。與之不同,NoSQL數(shù)據(jù)庫(kù)在這方面存在不足,安全模型和策略因產(chǎn)品而異,用戶通常需要額外構(gòu)建安全措施,缺乏統(tǒng)一標(biāo)準(zhǔn)和系統(tǒng)內(nèi)集成。這突顯了兩者在訪問(wèn)權(quán)限管理和安全性方面的差異,以及NoSQL數(shù)據(jù)庫(kù)的分散性和多樣性。NoSQL數(shù)據(jù)庫(kù)的劣勢(shì)標(biāo)準(zhǔn)化
SQL作為關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)的典型代表,通過(guò)標(biāo)準(zhǔn)化工作可以減少學(xué)習(xí)重復(fù),促進(jìn)系統(tǒng)協(xié)調(diào)和合作。標(biāo)準(zhǔn)化還延長(zhǎng)了代碼使用壽命和提高了可重復(fù)使用性。相比之下,NoSQL數(shù)據(jù)庫(kù)目前在標(biāo)準(zhǔn)化方面仍處于起步階段,由于產(chǎn)品多樣性和面向復(fù)雜領(lǐng)域,缺乏統(tǒng)一標(biāo)準(zhǔn),導(dǎo)致使用不同產(chǎn)品需要重新學(xué)習(xí)相關(guān)知識(shí)。這突顯了兩者在標(biāo)準(zhǔn)化方面的差異和NoSQL數(shù)據(jù)庫(kù)面臨的挑戰(zhàn)。HBase數(shù)據(jù)庫(kù)系統(tǒng)HBase數(shù)據(jù)庫(kù)系統(tǒng)是應(yīng)用廣泛的NoSQL數(shù)據(jù)庫(kù)系統(tǒng)之一,是GoogleBigtable的開(kāi)源版本,建立在HDFS之上,具有高可靠性、高性能、列存儲(chǔ)、可伸縮、實(shí)時(shí)讀寫(xiě)的特點(diǎn)。它通過(guò)行鍵(RowKey)和行鍵范圍(Range)來(lái)檢索數(shù)據(jù),主要用來(lái)存儲(chǔ)半結(jié)構(gòu)化的松散數(shù)據(jù)。HBase的主要目標(biāo)是高效地管理半結(jié)構(gòu)化數(shù)據(jù),依靠橫向擴(kuò)展,通過(guò)不斷增加廉價(jià)的商用服務(wù)器來(lái)提高計(jì)算和存儲(chǔ)能力。HBaseHBase數(shù)據(jù)模型HBase以表的形式存儲(chǔ)數(shù)據(jù),表由行和列組成。列劃分為若干個(gè)列族(ColumnFamily),一行由行鍵(RowKey)、版本號(hào)和若干個(gè)列組成。HBase中的表一般具有以下特點(diǎn)。大:一個(gè)表有上億行和上百萬(wàn)列面向列:面向列(列族)的存儲(chǔ),列(列族)獨(dú)立檢索稀疏:為空(Null)的列并不占用存儲(chǔ)空間,因此,表可以存儲(chǔ)稀疏的數(shù)據(jù)HBase數(shù)據(jù)模型行(Row)在表中以行為單位管理和存儲(chǔ)數(shù)據(jù),行由行鍵(RowKey)進(jìn)行標(biāo)識(shí),HBase以字節(jié)數(shù)組來(lái)處理和存儲(chǔ)行鍵,行鍵可以以符串的形式表現(xiàn)。行是按照行鍵以詞典順序排序的,行鍵值最小的行在表的最上面。例如,從1到100的數(shù)字,就是按照1,10,100,11,12,…,9,91,92,93,94,95,96,97,98,99這樣的方式來(lái)排序保存的。要想以自然順序來(lái)保存整型數(shù),行鍵須在左邊以0填充。列族(ColumnFamily)和限定符(Qualifier)用戶根據(jù)這些列的性質(zhì)或結(jié)構(gòu)進(jìn)行分組,將相同性質(zhì)、長(zhǎng)度或結(jié)構(gòu)的列組成一個(gè)列族,列族需要在進(jìn)行表結(jié)構(gòu)設(shè)計(jì)時(shí)就設(shè)計(jì)好,要像關(guān)系數(shù)據(jù)庫(kù)那樣在操作表之前將表結(jié)構(gòu)設(shè)計(jì)好在HBase中列的完整標(biāo)識(shí)是“列族:限定符”。列族必須是可打印字符,也就是可見(jiàn)字符,但是限定符可以是任意字節(jié)數(shù)組。HBase數(shù)據(jù)模型版本號(hào)(Version)根據(jù)用戶的配置情況,HBase的數(shù)據(jù)可以以多版本的方式保存版本號(hào)有時(shí)候以時(shí)間戳來(lái)表示,以長(zhǎng)整型數(shù)據(jù)保存,如一個(gè)時(shí)間戳可以設(shè)置為用java.util.Date.getTime()或System.currentTimeMillis()函數(shù)獲取的當(dāng)前時(shí)間,并且當(dāng)一個(gè)數(shù)據(jù)項(xiàng)被請(qǐng)求時(shí),返回最新的版本開(kāi)發(fā)者可以在插入數(shù)據(jù)時(shí)自定義版本號(hào),然后通過(guò)指定這個(gè)版本號(hào)來(lái)重新獲取該值。數(shù)據(jù)項(xiàng)(Cell)數(shù)據(jù)項(xiàng)(Cell)是NoSQL數(shù)據(jù)庫(kù)中最小的數(shù)據(jù)單元,一個(gè)數(shù)據(jù)項(xiàng)由[行,列,版本號(hào)]這三個(gè)坐標(biāo)唯一確定。數(shù)據(jù)項(xiàng)的內(nèi)容是用戶自定義的,以字節(jié)數(shù)組的形式保存,沒(méi)有格式、類(lèi)型等限制。HBase系統(tǒng)架構(gòu):表和分區(qū)表中的所有行都按照行鍵的詞典順序排列,當(dāng)達(dá)到一定規(guī)模后表會(huì)在行的方向上分割為多個(gè)分區(qū)。HBase系統(tǒng)架構(gòu):表和分區(qū)分區(qū)按大小分割,每個(gè)表一開(kāi)始只有一個(gè)分區(qū),隨著數(shù)據(jù)不斷插入表中,分區(qū)不斷增大。當(dāng)增大到一個(gè)閾值時(shí),分區(qū)就會(huì)等分為兩個(gè)新的分區(qū),如下圖所示。表中的行不斷增多,就會(huì)有越來(lái)越多的分區(qū)。HBase系統(tǒng)架構(gòu):分區(qū)服務(wù)器分區(qū)存儲(chǔ)在分區(qū)服務(wù)器上。不同的分區(qū)可以分布在不同的分區(qū)服務(wù)器上,但一個(gè)分區(qū)是不會(huì)拆分存儲(chǔ)到多個(gè)分區(qū)服務(wù)器上的。一個(gè)分區(qū)服務(wù)器可以存儲(chǔ)多個(gè)分區(qū)。HBase系統(tǒng)架構(gòu):分區(qū)和存儲(chǔ)塊分區(qū)由一個(gè)或者多個(gè)塊組成,每個(gè)塊保存一個(gè)列族。每個(gè)塊又由一個(gè)內(nèi)存塊和0至多個(gè)塊文件組成HBase系統(tǒng)架構(gòu):分區(qū)和存儲(chǔ)塊內(nèi)存塊是放在內(nèi)存里的塊,用來(lái)保存修改的數(shù)據(jù)。當(dāng)內(nèi)存塊的大小達(dá)到一個(gè)閾值時(shí),內(nèi)存塊會(huì)被寫(xiě)進(jìn)文件,生成一個(gè)塊文件。塊文件以HFile格式保存在HDFS上。塊文件的HFile格式分為6個(gè)部分:DataBlock:以Key-Value方式保存表中的數(shù)據(jù),可以被壓縮。MetaBlock:保存用戶自定義的Key/Value對(duì),可以被壓縮。FileInfo:HFile的元信息,不可以被壓縮。DataBlockIndex:DataBlock的索引。每條索引的Key是被索引的Block的第一條記錄的Key。MetaBlockIndex:MetaBlock的索引。Trailer:這一段是定長(zhǎng)的,保存了這6個(gè)部分每一段的偏移量。HBase集群組織架構(gòu)一個(gè)完整的HBase集群由客戶端(Client)、Master、Zookeeper集群和分區(qū)服務(wù)器集群組成。HBase集群組織架構(gòu)Client負(fù)責(zé)與分區(qū)服務(wù)器進(jìn)行交互。HBase也采用主從結(jié)構(gòu)的管理方式。Master負(fù)責(zé)監(jiān)控集群中所有分區(qū)服務(wù)器的實(shí)例。其作用如下:存儲(chǔ)和管理分區(qū)服務(wù)器的元數(shù)據(jù)為分區(qū)服務(wù)器分配分區(qū);負(fù)責(zé)分區(qū)服務(wù)器的負(fù)載均衡;發(fā)現(xiàn)失效的分區(qū)服務(wù)器并重新分配其上的分區(qū)。Zookeeper是一個(gè)提供分布式鎖服務(wù)的輕量級(jí)文件系統(tǒng),同時(shí)也可以作為集群管理系統(tǒng)。HBase訪問(wèn)接口HBase提供了多種形式的訪問(wèn)接口,包括以下6種:NativeJavaAPI:最常規(guī)和高效的訪問(wèn)方式,適合HadoopMapReduceJob并行批處理HBase表數(shù)據(jù)。HBaseShell:HBase的命令行工具,最簡(jiǎn)單的接口,適合HBase管理使用。ThriftGateway:利用Thrift序列化技術(shù),支持C++、PHP、Python等多種語(yǔ)言,適合其他異構(gòu)系統(tǒng)在線訪問(wèn)HBase表數(shù)據(jù)。RESTGateway:支持REST風(fēng)格的HTTPAPI訪問(wèn)HBase。Pig:可以使用PigLatin流式編程語(yǔ)言來(lái)操作HBase中的數(shù)據(jù),和Hive類(lèi)似,本質(zhì)也是編譯成MapReduceJob來(lái)處理HBase表數(shù)據(jù),適合做數(shù)據(jù)統(tǒng)計(jì)。Hive:通過(guò)Hive可以使用類(lèi)似SQL的語(yǔ)言來(lái)訪問(wèn)HBase。基于NoSQL數(shù)據(jù)庫(kù)的物聯(lián)網(wǎng)大數(shù)據(jù)存儲(chǔ)與管理NoSQL數(shù)據(jù)庫(kù)本身是一個(gè)稀疏的、分布式的、持久化存儲(chǔ)的多維度排序Map,適合存儲(chǔ)高維度、稀疏的海量數(shù)據(jù)。NoSQL數(shù)據(jù)庫(kù)的特點(diǎn)(以HBase數(shù)據(jù)庫(kù)為例):其底層持久化是以列族為存儲(chǔ)單位分塊存儲(chǔ),字段個(gè)數(shù)對(duì)底層結(jié)構(gòu)沒(méi)有影響,而MySQL、Oracle等關(guān)系數(shù)據(jù)庫(kù)以行(一條數(shù)據(jù))為單位存儲(chǔ),當(dāng)表中字段個(gè)數(shù)達(dá)到一定程度時(shí),數(shù)據(jù)將被分片存儲(chǔ),這樣會(huì)嚴(yán)重影響到插入、查詢的效率。HBase以HDFS為底層文件系統(tǒng),其分布式特性可以有效解決海量數(shù)據(jù)存儲(chǔ)的可擴(kuò)展性問(wèn)題。HBase的數(shù)據(jù)以分區(qū)為單位在集群中進(jìn)行負(fù)載均衡,可以根據(jù)RowKey來(lái)確定數(shù)據(jù)發(fā)向集群中的哪個(gè)存儲(chǔ)節(jié)點(diǎn)。HBase可以使用多并發(fā)線程或修改自動(dòng)緩存大小等方法提高寫(xiě)入效率?;贖Base的物聯(lián)網(wǎng)數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù)RowKey的設(shè)計(jì)原則:HBase中不允許使用聯(lián)合主鍵來(lái)標(biāo)識(shí)數(shù)據(jù),一條數(shù)據(jù)只能由一個(gè)RowKey項(xiàng)唯一標(biāo)識(shí)。HBase索引建立在行鍵RowKey的基礎(chǔ)上,需要將查詢的維度或信息放在行鍵中。在右圖RowKey的設(shè)計(jì)下,HBase的客戶端數(shù)據(jù)寫(xiě)入的步驟如下:當(dāng)在初始階段或者Region發(fā)生了拆分時(shí),首先客戶端Client向HMaster發(fā)送請(qǐng)求,獲取RootRegtion的地址。客戶端根據(jù)掃描RootRegion的地址找到UserRegion的.METATable地址。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)技術(shù)課件教學(xué)課件
- 2024年度設(shè)備供應(yīng)與安裝合同
- 2024年度國(guó)際搬家集裝箱租賃合同
- 2024年城市軌道交通系統(tǒng)集成與維護(hù)合同
- 2024光通信技術(shù)研發(fā)與生產(chǎn)合同
- 2024年度區(qū)塊鏈技術(shù)應(yīng)用研發(fā)合同
- 2024年度廢舊物資回收利用合同
- 2024年度三人合伙知識(shí)產(chǎn)權(quán)協(xié)議
- 2024年床上用品批量訂購(gòu)合同
- 2024年度智能客服系統(tǒng)技術(shù)服務(wù)合同
- 2023醫(yī)療質(zhì)量安全核心制度要點(diǎn)釋義(第二版)對(duì)比版
- 2024年深圳市中考英語(yǔ)試題及解析版
- 2024年中央企業(yè)全面質(zhì)量管理知識(shí)競(jìng)賽考試真題庫(kù)(含答案)
- (高清版)JTG D50-2017 公路瀝青路面設(shè)計(jì)規(guī)范
- 《中外舞蹈史》考試復(fù)習(xí)題庫(kù)(含答案)
- 《我家漂亮的尺子》課件-定稿
- 《蘿卜生長(zhǎng)過(guò)程》課件
- 思想道德與法治第二章
- 浦發(fā)銀行個(gè)人信用報(bào)告異議申請(qǐng)表
- 八年級(jí)黃金矩形(數(shù)學(xué)活動(dòng))ppt課件
- 銷(xiāo)售技巧個(gè)頂尖電梯銷(xiāo)售技巧
評(píng)論
0/150
提交評(píng)論