1. 程式人生 > >Spark案例之根據ip地址計算歸屬地二

Spark案例之根據ip地址計算歸屬地二

之前的是單機版的根據ip地址計算歸屬地,當資料量小的時候還可以,但是在大資料實際生產中是不行的,必須將它改造成一個Spark程式,然後在Spark叢集上執行

Spark程式和單機版的程式不一樣,下面來仔細分析一下Spark程式的執行流程

首先是一個Spark叢集,叢集中有Master和Worker,啟動Master和Worker之後,Worker會和Master建立連線並向Master傳送心跳,這時候提交一個SparkSubmit,也就是Driver給Master,然後Master會向Spark進行通訊,讓Worker啟動Executor,然後Executor就會和Driver就行通訊了, 根據ip地址計算出歸屬地這個Spark程式是寫在Driver端的,但是執行計算是在Execoutor端,也就是說Driver端只告訴執行邏輯,並不參與任何的計算和儲存,在Driver端建立了RDD之後,一旦出發執行就會建立Task,然後Driver會通過網路傳送到Executor端,然後會在Executor端實現根據ip地址計算出歸屬地的結果,但是如果ip地址的規則檔案不是放在hdfs中的,而是放在Driver端的機器上的,那麼Executor端計算的時候就拿不到這個ip地址規則檔案,這個時候就引出了Spark中的廣播變量了,Driver通過網路將ip地址規則傳送個每個Executor上,Executor上的多個Task通過這個ip地址規則來進行匹配,匹配結束之後會生成許多小檔案,然後將相同分割槽的檔案聚合到一起,最後儲存到Mysql中