|
Ignite是一個(gè)分布式的內(nèi)存數(shù)據(jù)庫(kù)、緩存和處理平臺(tái),為事務(wù)型、分析型和流式負(fù)載而設(shè)計(jì),在保證擴(kuò)展性的前提下提供了內(nèi)存級(jí)的性能。 Spark是一個(gè)流式數(shù)據(jù)和計(jì)算引擎,通常從HDFS或者其他存儲(chǔ)中獲取數(shù)據(jù),一直以來(lái),他都傾向于OLAP型業(yè)務(wù),并且聚焦于MapReduce類型負(fù)載。 因此,這兩種技術(shù)是可以互補(bǔ)的。 將Ignite與Spark整合 整合這兩種技術(shù)會(huì)為Spark用戶帶來(lái)若干明顯的好處: 通過(guò)避免大量的數(shù)據(jù)移動(dòng),獲得真正可擴(kuò)展的內(nèi)存級(jí)性能; 提高RDD、DataFrame和SQL的性能; 在Spark作業(yè)之間更方便地共享狀態(tài)和數(shù)據(jù)。 下圖中顯示了如何整合這兩種技術(shù),并且標(biāo)注了顯著的優(yōu)勢(shì): IgniteDataframes Spark的DataFrame API為描述數(shù)據(jù)引入了模式的概念,Spark通過(guò)表格的形式進(jìn)行模式的管理和數(shù)據(jù)的組織。 DataFrame是一個(gè)組織為命名列形式的分布式數(shù)據(jù)集,從概念上講,DataFrame等同于關(guān)系數(shù)據(jù)庫(kù)中的表,并允許Spark使用Catalyst查詢優(yōu)化器來(lái)生成高效的查詢執(zhí)行計(jì)劃。而RDD只是跨集群節(jié)點(diǎn)分區(qū)化的元素集合。 Ignite擴(kuò)展了DataFrames,簡(jiǎn)化了開發(fā),改進(jìn)了將Ignite作為Spark的內(nèi)存存儲(chǔ)時(shí)的數(shù)據(jù)訪問(wèn)時(shí)間,好處包括: 通過(guò)Ignite讀寫DataFrames時(shí),可以在Spark作業(yè)之間共享數(shù)據(jù)和狀態(tài); 通過(guò)優(yōu)化Spark的查詢執(zhí)行計(jì)劃加快SparkSQL查詢,這些主要是通過(guò)IgniteSQL引擎的高級(jí)索引以及避免了Ignite和Spark之間的網(wǎng)絡(luò)數(shù)據(jù)移動(dòng)實(shí)現(xiàn)的。 IgniteDataframes示例 下面通過(guò)一些代碼以及搭建幾個(gè)小程序的方式,了解Ignite DataFrames如何使用,如果想實(shí)際運(yùn)行這些代碼,可以從GitHub上下載。 一共會(huì)寫兩個(gè)Java的小應(yīng)用,然后在IDE中運(yùn)行,還會(huì)在這些Java應(yīng)用中執(zhí)行一些SQL。 一個(gè)Java應(yīng)用會(huì)從JSON文件中讀取一些數(shù)據(jù),然后創(chuàng)建一個(gè)存儲(chǔ)于Ignite的DataFrame,這個(gè)JSON文件Ignite的發(fā)行版中已經(jīng)提供,另一個(gè)Java應(yīng)用會(huì)從Ignite的DataFrame中讀取數(shù)據(jù)然后使用SQL進(jìn)行查詢。 下面是寫應(yīng)用的代碼: 在DFWriter中,首先創(chuàng)建了SparkSession,它包含了應(yīng)用名,之后會(huì)使用spark.read().json()讀取JSON文件并且輸出文件內(nèi)容,下一步是將數(shù)據(jù)寫入Ignite存儲(chǔ)。下面是DFReader的代碼: 在DFReader中,初始化和配置與DFWriter相同,這個(gè)應(yīng)用會(huì)執(zhí)行一些過(guò)濾,需求是查找所有的id > 0 以及 < 6的人,然后輸出結(jié)果。 在IDE中,通過(guò)下面的代碼可以啟動(dòng)一個(gè)Ignite節(jié)點(diǎn):
運(yùn)行應(yīng)用 首先在IDE中啟動(dòng)一個(gè)Ignite節(jié)點(diǎn),然后運(yùn)行DFWriter應(yīng)用,輸出如下: 如果將上面的結(jié)果與JSON文件的內(nèi)容進(jìn)行對(duì)比,會(huì)顯示兩者是一致的,這也是期望的結(jié)果。 下一步會(huì)運(yùn)行DFReader,輸出如下: 這也是期望的輸出。 總結(jié) 通過(guò)本文,會(huì)發(fā)現(xiàn)使用Ignite DataFrames是如何簡(jiǎn)單,這樣就可以通過(guò)Ignite DataFrame進(jìn)行數(shù)據(jù)的讀寫了。 |
|
|
來(lái)自: 小牛學(xué)堂666 > 《待分類》