《大數(shù)據(jù)與云計算》課件-15.avro簡介_第1頁
《大數(shù)據(jù)與云計算》課件-15.avro簡介_第2頁
《大數(shù)據(jù)與云計算》課件-15.avro簡介_第3頁
《大數(shù)據(jù)與云計算》課件-15.avro簡介_第4頁
《大數(shù)據(jù)與云計算》課件-15.avro簡介_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

大數(shù)據(jù)與云計算知識點Avro簡介Avro

Hadoop

中的一個子項目,也是

Apache

中一個獨立的項目,Avro

是一個基于二進制數(shù)據(jù)傳輸高性能的中間件。在

Hadoop

的其他項目中例如HBase(Ref)和

Hive(Ref)的

Client

端與服務(wù)端的數(shù)據(jù)傳輸也采用了這個工具。一、概念A(yù)vro是一個數(shù)據(jù)序列化的系統(tǒng)。Avro可以將數(shù)據(jù)結(jié)構(gòu)或?qū)ο筠D(zhuǎn)化成便于存儲或傳輸?shù)母袷?。Avro設(shè)計之初就用來支持數(shù)據(jù)密集型應(yīng)用,適合于遠程或本地大規(guī)模數(shù)據(jù)的存儲和交換。我們知道網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)必須是二進制數(shù)據(jù),但是調(diào)用方的請求,它的出入?yún)?shù)都是對象,對象是不能直接在網(wǎng)絡(luò)中傳輸?shù)?,必須提前把它轉(zhuǎn)換成可傳輸?shù)亩M制數(shù)據(jù),這個過程就叫做“序列化”。序列化和反序列化的基本概念:舉個例子來說明:比如我們要運送一個超市里所有東西到一個地方,這里面有各式各樣的商品、貨架、空調(diào)什么的等等,我們要把這些分批分批的裝到一個一個車廂上運輸?shù)侥康牡?,這個標準的車廂我們就可以看成是二進制數(shù)據(jù),運輸過程中全部都是這樣的標準車廂。到了目的地以后再進行組裝。服務(wù)端必須要做到的就是接收到網(wǎng)絡(luò)傳輸過來的二進制數(shù)據(jù),能夠正確的分割出不同的請求,同時根據(jù)請求類型和序列化類型,把二進制的數(shù)據(jù)還原為請求對象,這個過程叫做“反序列化”。比如我把一個物品封裝在1、3車廂,我還原的時候也必須把1、3連接,不能連接成1、2。序列化和反序列化是一種數(shù)據(jù)轉(zhuǎn)化的技術(shù),從數(shù)據(jù)的用途來看,序列化就是為了將數(shù)據(jù)按照規(guī)定的格式進行重組,在保持原有的數(shù)據(jù)語義不變的情況下,達到存儲或者傳輸?shù)哪康?。反序列化則是為了將序列化后的數(shù)據(jù)重新還原成具有語義的數(shù)據(jù),以達到重新使用或者重復(fù)使用原有數(shù)據(jù)的目的。二、特點豐富的數(shù)據(jù)結(jié)構(gòu)類型快速可壓縮的二進制數(shù)據(jù)形式,對數(shù)據(jù)二進制序列化后可以節(jié)約數(shù)據(jù)存儲空間和網(wǎng)絡(luò)傳輸帶寬存儲持久數(shù)據(jù)的文件容器可以實現(xiàn)遠程過程調(diào)用RPC簡單的動態(tài)語言結(jié)合功能RPC簡介遠程過程調(diào)用(remoteprocedurecall)RPC的主要功能就是讓構(gòu)建分布式計算(應(yīng)用)更加容易,在提供強大的遠程調(diào)用能力時,不損失本地調(diào)用的語義簡潔性。簡單來說就好比你用的是別人家的工具就和用你自己的工具一樣,不用經(jīng)歷一些繁瑣的手續(xù)。為實現(xiàn)該目標,RPC框架需提供一種透明調(diào)用機制讓使用者不必顯式的區(qū)分本地調(diào)用和遠程調(diào)用。RPC是一個軟件結(jié)構(gòu)概念,是構(gòu)建分布式應(yīng)用的理論基礎(chǔ)。就好比為啥你家可以用到發(fā)電廠發(fā)出來的電?是因為電是可以傳輸?shù)?。至于用銅線還是用鐵絲還是其他種類的導(dǎo)線,也就是用http還是用其他協(xié)議的問題了,這個就不是我們目前需要關(guān)心的問題了。服務(wù)消費方(client客戶端)調(diào)用以本地調(diào)用方式調(diào)用服務(wù);clientstub(客戶端存根)接收到調(diào)用后負責(zé)將方法、參數(shù)等組裝成能夠進行網(wǎng)絡(luò)傳輸?shù)南Ⅲw;clientstub(存根)找到服務(wù)地址,并將消息發(fā)送到服務(wù)端;serverstub收到消息后進行解碼;RPC結(jié)構(gòu)調(diào)用過程:RPC結(jié)構(gòu)調(diào)用過程:serverstub根據(jù)解碼結(jié)果調(diào)用本地的服務(wù);本地服務(wù)執(zhí)行并將結(jié)果返回給serverstub;serverstub將返回結(jié)果打包成消息并發(fā)送至消費方;clientstub接收到消息,并進行解碼;服務(wù)消費方得到最終結(jié)果。舉個例子說明比如我現(xiàn)在本地有個加法函數(shù),可以做加法,輸入兩個數(shù)就能返回這兩個數(shù)的和。我現(xiàn)在想調(diào)用遠程的乘法函數(shù)。我就把調(diào)用語句、參數(shù)封裝好發(fā)給clientstub。Avro的細節(jié)部分Avro依賴模式(Schema)來實現(xiàn)數(shù)據(jù)結(jié)構(gòu)定義。可以把模式理解為Java的類,它定義每個實例的結(jié)構(gòu),可以包含哪些屬性??梢愿鶕?jù)類來產(chǎn)生任意多個實例對象。對實例序列化操作時必須需要知道它的基本結(jié)構(gòu),也就需要參考類的信息。這里,根據(jù)模式產(chǎn)生的Avro對象類似于類的實例對象。每次序列化/反序列化時都需要知道模式的具體結(jié)構(gòu)。所以,在Avro可用的一些場景下,如文件存儲或是網(wǎng)絡(luò)通信,都需要模式與數(shù)據(jù)同時存在。Avro數(shù)據(jù)以模式來讀和寫(文件或是網(wǎng)絡(luò)),并且寫入的數(shù)據(jù)都不需要加入其它標識,這樣序列化時速度快且結(jié)果內(nèi)容少。由于程序可以直接根據(jù)模式來處理數(shù)據(jù),所以Avro更適合于腳本語言的發(fā)揮。avro支持跨編程語言實現(xiàn)(C,C++,C#,Java,Python,Ruby,PHP),類似于Thrift,但是avro的顯著特征是:avro依賴于模式,動態(tài)加載相關(guān)數(shù)據(jù)的模式,Avro數(shù)據(jù)的讀寫操作很頻繁,而這些操作使用的都是模式,這樣就減少寫入每個數(shù)據(jù)文件的開銷,使得序列化快速而又輕巧。這種數(shù)據(jù)及其模式的自我描述方便了動態(tài)腳本語言的使用。當Avro數(shù)據(jù)存儲到文件中時,它的模式也隨之存儲,這樣任何程序都可以對文件進行處理。如果讀取數(shù)據(jù)時使用的模式與寫入數(shù)據(jù)時使用的模式不同,也很容易解決,因為讀取和寫入的模式都是已知的。Avro依賴于模式(Schema)。通過模式定義各種數(shù)據(jù)結(jié)構(gòu),只有確定了模式才能對數(shù)據(jù)進行解釋,所以在數(shù)據(jù)的序列化和反序列化之前,必須先確定模式的結(jié)構(gòu)。正是模式的引入,使得數(shù)據(jù)具有了自描述的功能,同時能夠?qū)崿F(xiàn)動態(tài)加載,另外與其他的數(shù)據(jù)序列化系統(tǒng)如Thrift相比,數(shù)據(jù)之間不存在其他的任何標識,有利于提高數(shù)據(jù)處理的效率。三、Avro類型數(shù)據(jù)類型標準化的意義:一方面使不同系統(tǒng)對相同的數(shù)據(jù)能夠正確解析,另一方面,數(shù)據(jù)類型的標準定義有利于數(shù)據(jù)序列化/反序列化。類型說明nullnovaluebooleanabinaryvalueint32-bitsignedintegerlong64-bitsignedintegerfloatsingleprecision(32-bit)IEEE754floating-pointnumberdoubledoubleprecision(64-bit)IEEE754floating-pointnumberbytessequenceof8-bitunsignedbytesstringunicodecharactersequence簡單的數(shù)據(jù)類型:Avro定義了幾種簡單數(shù)據(jù)類型類型屬性說明Recordstype

namerecordnamea

JSON

string

providing

the

name

of

the

re

(required).namespacea

JSON

string

that

qualifies

the

name(optidoca

JSON

string

providing

documentation

to

t

this

schema

(optional).aliasesa

JSON

array

of

strings,

providing

alterna

this

record

(optional).fieldsa

JSON

array,

listing

fields

(required).namea

JSON

string.typea

schema/a

string

of

defined

record.defaulta

default

value

for

field

when

lack.orderordering

of

this

field.復(fù)雜數(shù)據(jù)類型:Avro定義了六種復(fù)雜數(shù)據(jù)類型,每一種復(fù)雜數(shù)據(jù)類型都具有獨特的屬性。下表就每一種復(fù)雜數(shù)據(jù)類型進行說明:類型屬性說明Enumstype

nameenumnamea

JSON

string

providing

the

name

of

the

en

(required).namespacea

JSON

string

that

qualifies

the

name.doca

JSON

string

providing

documentation

to

t

this

schema

(optional).aliasesa

JSON

array

of

strings,

providing

alterna

this

enum

(optional)symbolsa

JSON

array,

listing

symbols,

as

JSON

str

(required).

All

symbols

in

an

enum

must

beArraystype

namearrayitemsthe

schema

of

the

array’s

items.類型屬性說明Mapstype

namemapvaluesthe

schema

of

the

map’s

values.Fixedtype

namefixednamea

string

naming

this

fixed

(required).namespacea

string

that

qualifies

the

name.aliasesa

JSON

array

of

strings,

providing

alterna

this

enum

(optional).sizean

integer,

specifying

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論