爲啥學spark
中間結果輸出:基於MapReduce的計算引擎通常會將中間結果輸出到磁盤上,進行存儲和容錯。出於任務管道承接的,考慮,當一些查詢翻譯到MapReduce任務時,往往會產生多個Stage,而這些串聯的Stage又依賴於底層文件系統(如HDFS)來存儲每一個Stage的輸出結果
Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生態系統,以彌補MapReduce的不足。
spark -----> 彌補Mapreduce不足(產生多個Stage)(具有快,易用,通用,兼容性)
spark比mapreduce更加靈活,計算模型不限於Map和Reduce。存儲是在內存中,而不是本地磁盤。能夠減少IO開銷。MapReduce計算中間結果,保存在磁盤中,Hadoop低層實現備份機制,保證數據容錯;SparkRDD實現基於Lineage的容錯機制和設置檢查點方式的容錯機制。
1.Spark環境部署
①將包傳到文件夾中,解壓,改名 輸入:tar -zxvf spark-2.3.2-bin-hadoop2.7.tgz -C /export/servers/ 改名:mv spark-2.3.2-bin-hadoop2.7/ spark(到指定文件夾下改名哈)
②
③複製slaves.template文件,並重命名爲slaves,編輯slaves配置文件,主要是指定Spark集羣中的從節點IP,由於在hosts文件中已經配置了IP和主機名的映射關係,因此直接使用主機名代替IP
④分發文件 修改完成配置文件後,將spark目錄分發至hadoop02和hadoop03節點 輸入:scp -r /export/servers/spark/ hadoop03:/export/servers/
⑤啓動Spark集羣(在sbin下啓動)
2.第一個案例
①提交SparkPi程序。
②PI值計算成功
③Spark-Shell是一個強大的交互式數據分析工具,初學者可以很好的使用它來學習相關API。運行Spark-Shell命令。在spark/bin目錄中,執行下列命令進入Spark-Shell交互環境:
進入普通spark集羣 bin/spark-shell --master spark://hadoop01:7077
現在我們使用scala語言開發單詞計數的spark程序
首先在hdfs的/spark/input路徑下建立一個words.txt
整合spark和hdfs 先修改spark-env.sh配置文件 之後重啓集羣服務以及重啓spark集羣服務
再次啓動交互式界面 bin/spark-shell --master local[2]
spark-shell 本省就是一個driver,它會初始化一個SparkContext對象爲sc,用戶可以直接調用。編寫scala代碼實現單詞計數
3.第二個案例(求平均值)
①建一個數組,可以看成是科目和分數的對偶
②再建一個相似的數組
③再建一個,可以看成三個學生
④三個合成一個
⑤按照第一個分組
⑥求和除以長度 的平均值
4.第三個案例(重要函數操作過程)
①創建一個lines
②按照空格分割
③合成一個
④每個單詞後面給個1
⑤分組分開
⑥計算得
注第2到第5 可以直接通過這句話得到 val grouped = lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1)
nice!
終於成了,就離譜!