學(xué)習(xí)Spark的基本組件会烙,主要由SparkSql、SparkStreaming等構(gòu)成韭赘,簡(jiǎn)單理解其基本原理缩滨,構(gòu)建Spark生態(tài)的全貌。
一泉瞻、Spark Sql常識(shí)
Spark Sql提供了對(duì)于結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)的快速操作脉漏,主要具備以下三種功能,
(1)從多種結(jié)構(gòu)化數(shù)據(jù)源(json袖牙、parquet和hive)中讀取數(shù)據(jù)
(2)支持Spark應(yīng)用程序內(nèi)部調(diào)用和外部工具通過(guò)標(biāo)準(zhǔn)連接器連接Spark Sql進(jìn)行查詢
(3)Spark Sql中sql與Java/Python/Scala代碼高度整合
二侧巨、Spark Streaming常識(shí)
(1)Spark Streaming中使用離散化流作抽象表示并稱為DStream,其由RDD組成的隊(duì)列
(2)Spark Streaming支持兩種操作鞭达,轉(zhuǎn)化操作和輸出操作司忱,轉(zhuǎn)化操作輸出為新的DStream皇忿,輸出操作將結(jié)果輸出到硬盤上。轉(zhuǎn)化操作包括無(wú)狀態(tài)和有狀態(tài)坦仍,重點(diǎn)關(guān)注有狀態(tài)的轉(zhuǎn)化操作鳍烁。
(3)有狀態(tài)的操作主要是兩種類型,一種以時(shí)間階段為滑動(dòng)窗口進(jìn)行操作繁扎,一種用來(lái)跟蹤每個(gè)鍵的狀態(tài)變化幔荒。基于窗口的操作需要兩個(gè)參數(shù)锻离,分別為窗口時(shí)長(zhǎng)和滑動(dòng)步長(zhǎng)铺峭,兩者都必須是SparkContext設(shè)置的批次間隔的整數(shù)倍,前者控制每次計(jì)算最近的多少個(gè)批次的數(shù)據(jù)汽纠,后者用來(lái)控制對(duì)新的DStream進(jìn)行計(jì)算的間隔卫键,如圖所示,
當(dāng)需要在DStream跨批次維護(hù)狀態(tài)時(shí)虱朵,使用updateStateByKey()為我們提供對(duì)一個(gè)狀態(tài)變量的訪問(wèn)莉炉,用于鍵值對(duì)形式的DStream,比如跟蹤用戶訪問(wèn)網(wǎng)站的會(huì)話碴犬。