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