基于Apache Spark的REST服務(wù)詳解(三),云網(wǎng)數(shù)據(jù)中心,深圳服務(wù)器托管,深圳服務(wù)器租用, 深圳BGP機(jī)房托管,深圳BGP機(jī)房租用,深圳電信機(jī)房租用,深圳移動(dòng)機(jī)房
發(fā)布時(shí)間:2017-07-05 點(diǎn)擊數(shù):7255
使用編程API
在交互式會(huì)話模式中,Livy不僅可以接收用戶(hù)提交的代碼,而且還可以接收序列化的Spark作業(yè)。為此Livy提供了一套編程式的API供用戶(hù)使用,用戶(hù)可以像使用原生Spark API那樣使用Livy提供的API編寫(xiě)Spark作業(yè),Livy會(huì)將用戶(hù)編寫(xiě)的Spark作業(yè)序列化并發(fā)送到遠(yuǎn)端Spark集群中執(zhí)行。表1就是使用Spark API所編寫(xiě)PI程序與使用Livy API所編寫(xiě)的程序的比較。

表1 使用Spark API所編寫(xiě)PI程序與使用Livy API所編寫(xiě)程序的比較

可以看到除了入口函數(shù)不同,其核心邏輯完全一致,因此用戶(hù)可以很方便地將已有的Spark作業(yè)遷移到Livy上。
Livy交互式會(huì)話是Spark交互式處理基于HTTP的實(shí)現(xiàn)。有了Livy的交互式會(huì)話,用戶(hù)無(wú)需登錄到Gateway節(jié)點(diǎn)上去啟動(dòng)Spark進(jìn)程并執(zhí)行代碼。以REST的方式進(jìn)行交互式處理提供給用戶(hù)豐富的選擇,也方便了用戶(hù)的使用,更為重要的是它方便了運(yùn)維的管理。
批處理會(huì)話(Batch Session)
在Spark應(yīng)用中有一大類(lèi)應(yīng)用是批處理應(yīng)用,這些應(yīng)用在運(yùn)行期間無(wú)須與用戶(hù)進(jìn)行交互,最典型的就是Spark Streaming流式應(yīng)用。用戶(hù)會(huì)將業(yè)務(wù)邏輯編譯打包成jar包,并通過(guò)spark-submit啟動(dòng)Spark集群來(lái)執(zhí)行業(yè)務(wù)邏輯:
Livy也為用戶(hù)帶來(lái)相同的功能,用戶(hù)可以通過(guò)REST的方式來(lái)創(chuàng)建批處理應(yīng)用:
通過(guò)用戶(hù)所指定的“className”和“file”,Livy會(huì)啟動(dòng)Spark集群來(lái)運(yùn)行該應(yīng)用,這樣的一種方式就稱(chēng)為批處理會(huì)話。
至此我們簡(jiǎn)單介紹了Livy的兩種會(huì)話類(lèi)型,與它相對(duì)應(yīng)的就是Spark的兩種處理交互方式,因此可以說(shuō)Livy以REST的方式提供了Spark所擁有的兩種交互處理方式。

企業(yè)級(jí)特性
前面我們介紹了Livy的核心功能,相比于核心功能的完整性,Livy的企業(yè)級(jí)特性則更體現(xiàn)了其相比于原生Spark處理交互方式的優(yōu)勢(shì)。本章節(jié)將介紹Livy幾個(gè)關(guān)鍵的企業(yè)特性。
多用戶(hù)支持
假定用戶(hù)tom向Livy服務(wù)端發(fā)起REST請(qǐng)求啟動(dòng)一個(gè)新的會(huì)話,而Livy服務(wù)端則是由用戶(hù)livy啟動(dòng)的,這個(gè)時(shí)候所創(chuàng)建出來(lái)Spark集群用戶(hù)是誰(shuí)呢,會(huì)是用戶(hù)tom還是livy?在默認(rèn)情況下這個(gè)Spark集群的用戶(hù)是livy。這會(huì)帶來(lái)訪問(wèn)權(quán)限的問(wèn)題:用戶(hù)tom無(wú)法訪問(wèn)其擁有權(quán)限的資源,而相對(duì)的是他卻可以訪問(wèn)用戶(hù)livy所擁有的資源。
為了解決這個(gè)問(wèn)題Livy引入了Hadoop中的代理用戶(hù)(proxy user)模式,代理用戶(hù)模式廣泛使用于多用戶(hù)的環(huán)境,如HiveServer2。在此模式中超級(jí)用戶(hù)可以代理成普通用戶(hù)去訪問(wèn)資源,并擁有普通用戶(hù)相應(yīng)的權(quán)限。開(kāi)啟了代理用戶(hù)模式后,以用戶(hù)tom所創(chuàng)建的會(huì)話所啟動(dòng)的Spark集群用戶(hù)就會(huì)是tom。

圖2 Livy多用戶(hù)支持
為了使用此功能用戶(hù)需要配置“l(fā)ivy.impersonation.enabled”,同時(shí)需要在Hadoop中將Livy服務(wù)端進(jìn)程的用戶(hù)配置為Hadoop proxyuser 。當(dāng)然還會(huì)有一些Livy的額外配置就不在這展開(kāi)了。
有了代理用戶(hù)模式的支持,Livy就能真正做到對(duì)多用戶(hù)的支持,不同用戶(hù)啟動(dòng)的會(huì)話會(huì)以相應(yīng)的用戶(hù)去訪問(wèn)資源。
端到端安全
在企業(yè)應(yīng)用中另一個(gè)非常關(guān)鍵的特性是安全性。一個(gè)完整的Livy服務(wù)中有哪些點(diǎn)是要有安全考慮的呢?
客戶(hù)端認(rèn)證
當(dāng)用戶(hù)tom發(fā)起REST請(qǐng)求訪問(wèn)Livy服務(wù)端的時(shí)候,我們?nèi)绾沃涝撚脩?hù)是合法用戶(hù)呢?Livy采用了基于Kerberos的Spnego認(rèn)證。在Livy服務(wù)端配置Spnego認(rèn)證后,用戶(hù)發(fā)起Http請(qǐng)求之前必須先獲得Kerberos認(rèn)證,只有通過(guò)認(rèn)證后才能正確訪問(wèn)Livy服務(wù)端,不然的話Livy服務(wù)端會(huì)返回401錯(cuò)誤。
HTTPS/SSL
那么如何保證客戶(hù)端與Livy服務(wù)端之間HTTP傳輸?shù)陌踩阅兀縇ivy使用了標(biāo)準(zhǔn)的SSL來(lái)加密HTTP協(xié)議,以確保傳輸?shù)腍ttp報(bào)文的安全。為此用戶(hù)需要配置Livy服務(wù)端SSL相關(guān)的配置已開(kāi)啟此功能。
SASL RPC
除了客戶(hù)端和Livy服務(wù)端之間的通信,Livy服務(wù)端和Spark集群之間也存在著網(wǎng)絡(luò)通信,如何確保這兩者之間的通信安全性也是需要考慮的。Livy采用了基于SASL認(rèn)證的RPC通信機(jī)制:當(dāng)Livy服務(wù)端啟動(dòng)Spark集群時(shí)會(huì)產(chǎn)生一個(gè)隨機(jī)字符串用作兩者之間認(rèn)證的秘鑰,只有Livy服務(wù)端和該Spark集群之間才有相同的秘鑰,這樣就保證了只有Livy服務(wù)端才能和該Spark集群進(jìn)行通信,防止匿名的連接試圖與Spark集群通信。
將上述三種安全機(jī)制歸結(jié)起來(lái)就如圖3所示。
圖3 Livy端到端安全機(jī)制
這樣構(gòu)成了Livy完整的端到端的安全機(jī)制,確保沒(méi)有經(jīng)過(guò)認(rèn)證的用戶(hù),匿名的連接無(wú)法與Livy服務(wù)中的任何一個(gè)環(huán)節(jié)進(jìn)行通信。
失敗恢復(fù)
由于Livy服務(wù)端是單點(diǎn),所有的操作都需要通過(guò)Livy轉(zhuǎn)發(fā)到Spark集群中,如何確保Livy服務(wù)端失效的時(shí)候已創(chuàng)建的所有會(huì)話不受影響,同時(shí)Livy服務(wù)端恢復(fù)過(guò)來(lái)后能夠與已有的會(huì)話重新連接以繼續(xù)使用?
Livy提供了失敗恢復(fù)的機(jī)制,當(dāng)用戶(hù)啟動(dòng)會(huì)話的同時(shí)Livy會(huì)在可靠的存儲(chǔ)上記錄會(huì)話相關(guān)的元信息,一旦Livy從失敗中恢復(fù)過(guò)來(lái)它會(huì)試圖讀取相關(guān)的元信息并與Spark集群重新連接。為了使用該特性我們需要配置Livy使其開(kāi)啟此功能:
大數(shù)據(jù)技術(shù)11
失敗恢復(fù)能夠有效地避免因Livy服務(wù)端單點(diǎn)故障造成的所有會(huì)話的不可用,同時(shí)也避免了因Livy服務(wù)端重啟而造成的會(huì)話不必要失效。
總結(jié)
本文從Spark處理交互方式的局限引出了Livy這樣一個(gè)基于Spark的REST服務(wù)。同時(shí)全面介紹了其基本架構(gòu)、核心功能以及企業(yè)級(jí)特性,Livy不僅涵蓋了Spark所提供了所有處理交互方式,同時(shí)又結(jié)合了多種的企業(yè)級(jí)特性,雖然Livy項(xiàng)目現(xiàn)在還處于早期,許多的功能有待增加和改進(jìn),我相信假以時(shí)日Livy必定能成為一個(gè)優(yōu)秀的基于Spark的REST服務(wù)。
深圳市云網(wǎng)數(shù)據(jù)中心(sjsyph.cn)
專(zhuān)業(yè)提供【服務(wù)器租用】【服務(wù)器托管】【機(jī)柜大帶寬】【云主機(jī)租用】【CDN加速】【專(zhuān)線接入】
在交互式會(huì)話模式中,Livy不僅可以接收用戶(hù)提交的代碼,而且還可以接收序列化的Spark作業(yè)。為此Livy提供了一套編程式的API供用戶(hù)使用,用戶(hù)可以像使用原生Spark API那樣使用Livy提供的API編寫(xiě)Spark作業(yè),Livy會(huì)將用戶(hù)編寫(xiě)的Spark作業(yè)序列化并發(fā)送到遠(yuǎn)端Spark集群中執(zhí)行。表1就是使用Spark API所編寫(xiě)PI程序與使用Livy API所編寫(xiě)的程序的比較。

表1 使用Spark API所編寫(xiě)PI程序與使用Livy API所編寫(xiě)程序的比較

可以看到除了入口函數(shù)不同,其核心邏輯完全一致,因此用戶(hù)可以很方便地將已有的Spark作業(yè)遷移到Livy上。
Livy交互式會(huì)話是Spark交互式處理基于HTTP的實(shí)現(xiàn)。有了Livy的交互式會(huì)話,用戶(hù)無(wú)需登錄到Gateway節(jié)點(diǎn)上去啟動(dòng)Spark進(jìn)程并執(zhí)行代碼。以REST的方式進(jìn)行交互式處理提供給用戶(hù)豐富的選擇,也方便了用戶(hù)的使用,更為重要的是它方便了運(yùn)維的管理。
批處理會(huì)話(Batch Session)
在Spark應(yīng)用中有一大類(lèi)應(yīng)用是批處理應(yīng)用,這些應(yīng)用在運(yùn)行期間無(wú)須與用戶(hù)進(jìn)行交互,最典型的就是Spark Streaming流式應(yīng)用。用戶(hù)會(huì)將業(yè)務(wù)邏輯編譯打包成jar包,并通過(guò)spark-submit啟動(dòng)Spark集群來(lái)執(zhí)行業(yè)務(wù)邏輯:
Livy也為用戶(hù)帶來(lái)相同的功能,用戶(hù)可以通過(guò)REST的方式來(lái)創(chuàng)建批處理應(yīng)用:
通過(guò)用戶(hù)所指定的“className”和“file”,Livy會(huì)啟動(dòng)Spark集群來(lái)運(yùn)行該應(yīng)用,這樣的一種方式就稱(chēng)為批處理會(huì)話。
至此我們簡(jiǎn)單介紹了Livy的兩種會(huì)話類(lèi)型,與它相對(duì)應(yīng)的就是Spark的兩種處理交互方式,因此可以說(shuō)Livy以REST的方式提供了Spark所擁有的兩種交互處理方式。

企業(yè)級(jí)特性
前面我們介紹了Livy的核心功能,相比于核心功能的完整性,Livy的企業(yè)級(jí)特性則更體現(xiàn)了其相比于原生Spark處理交互方式的優(yōu)勢(shì)。本章節(jié)將介紹Livy幾個(gè)關(guān)鍵的企業(yè)特性。
多用戶(hù)支持
假定用戶(hù)tom向Livy服務(wù)端發(fā)起REST請(qǐng)求啟動(dòng)一個(gè)新的會(huì)話,而Livy服務(wù)端則是由用戶(hù)livy啟動(dòng)的,這個(gè)時(shí)候所創(chuàng)建出來(lái)Spark集群用戶(hù)是誰(shuí)呢,會(huì)是用戶(hù)tom還是livy?在默認(rèn)情況下這個(gè)Spark集群的用戶(hù)是livy。這會(huì)帶來(lái)訪問(wèn)權(quán)限的問(wèn)題:用戶(hù)tom無(wú)法訪問(wèn)其擁有權(quán)限的資源,而相對(duì)的是他卻可以訪問(wèn)用戶(hù)livy所擁有的資源。
為了解決這個(gè)問(wèn)題Livy引入了Hadoop中的代理用戶(hù)(proxy user)模式,代理用戶(hù)模式廣泛使用于多用戶(hù)的環(huán)境,如HiveServer2。在此模式中超級(jí)用戶(hù)可以代理成普通用戶(hù)去訪問(wèn)資源,并擁有普通用戶(hù)相應(yīng)的權(quán)限。開(kāi)啟了代理用戶(hù)模式后,以用戶(hù)tom所創(chuàng)建的會(huì)話所啟動(dòng)的Spark集群用戶(hù)就會(huì)是tom。

圖2 Livy多用戶(hù)支持
為了使用此功能用戶(hù)需要配置“l(fā)ivy.impersonation.enabled”,同時(shí)需要在Hadoop中將Livy服務(wù)端進(jìn)程的用戶(hù)配置為Hadoop proxyuser 。當(dāng)然還會(huì)有一些Livy的額外配置就不在這展開(kāi)了。
有了代理用戶(hù)模式的支持,Livy就能真正做到對(duì)多用戶(hù)的支持,不同用戶(hù)啟動(dòng)的會(huì)話會(huì)以相應(yīng)的用戶(hù)去訪問(wèn)資源。
端到端安全
在企業(yè)應(yīng)用中另一個(gè)非常關(guān)鍵的特性是安全性。一個(gè)完整的Livy服務(wù)中有哪些點(diǎn)是要有安全考慮的呢?
客戶(hù)端認(rèn)證
當(dāng)用戶(hù)tom發(fā)起REST請(qǐng)求訪問(wèn)Livy服務(wù)端的時(shí)候,我們?nèi)绾沃涝撚脩?hù)是合法用戶(hù)呢?Livy采用了基于Kerberos的Spnego認(rèn)證。在Livy服務(wù)端配置Spnego認(rèn)證后,用戶(hù)發(fā)起Http請(qǐng)求之前必須先獲得Kerberos認(rèn)證,只有通過(guò)認(rèn)證后才能正確訪問(wèn)Livy服務(wù)端,不然的話Livy服務(wù)端會(huì)返回401錯(cuò)誤。
HTTPS/SSL
那么如何保證客戶(hù)端與Livy服務(wù)端之間HTTP傳輸?shù)陌踩阅兀縇ivy使用了標(biāo)準(zhǔn)的SSL來(lái)加密HTTP協(xié)議,以確保傳輸?shù)腍ttp報(bào)文的安全。為此用戶(hù)需要配置Livy服務(wù)端SSL相關(guān)的配置已開(kāi)啟此功能。
SASL RPC
除了客戶(hù)端和Livy服務(wù)端之間的通信,Livy服務(wù)端和Spark集群之間也存在著網(wǎng)絡(luò)通信,如何確保這兩者之間的通信安全性也是需要考慮的。Livy采用了基于SASL認(rèn)證的RPC通信機(jī)制:當(dāng)Livy服務(wù)端啟動(dòng)Spark集群時(shí)會(huì)產(chǎn)生一個(gè)隨機(jī)字符串用作兩者之間認(rèn)證的秘鑰,只有Livy服務(wù)端和該Spark集群之間才有相同的秘鑰,這樣就保證了只有Livy服務(wù)端才能和該Spark集群進(jìn)行通信,防止匿名的連接試圖與Spark集群通信。
將上述三種安全機(jī)制歸結(jié)起來(lái)就如圖3所示。
圖3 Livy端到端安全機(jī)制
這樣構(gòu)成了Livy完整的端到端的安全機(jī)制,確保沒(méi)有經(jīng)過(guò)認(rèn)證的用戶(hù),匿名的連接無(wú)法與Livy服務(wù)中的任何一個(gè)環(huán)節(jié)進(jìn)行通信。
失敗恢復(fù)
由于Livy服務(wù)端是單點(diǎn),所有的操作都需要通過(guò)Livy轉(zhuǎn)發(fā)到Spark集群中,如何確保Livy服務(wù)端失效的時(shí)候已創(chuàng)建的所有會(huì)話不受影響,同時(shí)Livy服務(wù)端恢復(fù)過(guò)來(lái)后能夠與已有的會(huì)話重新連接以繼續(xù)使用?
Livy提供了失敗恢復(fù)的機(jī)制,當(dāng)用戶(hù)啟動(dòng)會(huì)話的同時(shí)Livy會(huì)在可靠的存儲(chǔ)上記錄會(huì)話相關(guān)的元信息,一旦Livy從失敗中恢復(fù)過(guò)來(lái)它會(huì)試圖讀取相關(guān)的元信息并與Spark集群重新連接。為了使用該特性我們需要配置Livy使其開(kāi)啟此功能:
大數(shù)據(jù)技術(shù)11
失敗恢復(fù)能夠有效地避免因Livy服務(wù)端單點(diǎn)故障造成的所有會(huì)話的不可用,同時(shí)也避免了因Livy服務(wù)端重啟而造成的會(huì)話不必要失效。
總結(jié)
本文從Spark處理交互方式的局限引出了Livy這樣一個(gè)基于Spark的REST服務(wù)。同時(shí)全面介紹了其基本架構(gòu)、核心功能以及企業(yè)級(jí)特性,Livy不僅涵蓋了Spark所提供了所有處理交互方式,同時(shí)又結(jié)合了多種的企業(yè)級(jí)特性,雖然Livy項(xiàng)目現(xiàn)在還處于早期,許多的功能有待增加和改進(jìn),我相信假以時(shí)日Livy必定能成為一個(gè)優(yōu)秀的基于Spark的REST服務(wù)。
深圳市云網(wǎng)數(shù)據(jù)中心(sjsyph.cn)
專(zhuān)業(yè)提供【服務(wù)器租用】【服務(wù)器托管】【機(jī)柜大帶寬】【云主機(jī)租用】【CDN加速】【專(zhuān)線接入】