Spark入門,這一篇就足夠了!

騰科it教育 發佈 2024-04-01T04:41:13.194991+00:00

1、本章概要Spark於2009年誕生於美國加州大學伯克利分校的AMP實驗室,它是一個可應用於大規模數據處理的統一分析引擎。Spark不僅計算速度快,而且內置了豐富的API,使得我們能夠更加容易編寫程序。

1、本章概要

spark於2009年誕生於美國加州大學伯克利分校的AMP實驗室,它是一個可應用於大規模數據處理的統一分析引擎。Spark不僅計算速度快,而且內置了豐富的API,使得我們能夠更加容易編寫程序。

本章將從Spark的發展說起,針對Spark集群部署、Spark運行架構及其原理進行詳細講解。

2、概述

Spark在2013年加入Apache孵化器項目,之後獲得迅猛的發展,並於2014年正式成為Apache軟體基金會的頂級項目。Spark生態系統已經發展成為一個可應用於大規模數據處理的統一分析引擎,它是基於內存計算的大數據並行計算框架,適用於各種各樣的分布式平台的系統。在Spark生態圈中包含了Spark SQL、Spark Streaming、GraphX、MLlib等組件。

Spark Core

Spark核心組件,實現了Spark的基本功能,包含任務調度、內存管理、錯誤恢復、與存儲系統交互等模塊。Spark Core中還包含對彈性分布式數據集的API定義。

Spark SQL

用來操作結構化數據的核心組件,通過Spark SQL可直接查詢Hive、HBase等多種外部數據源中的數據。Spark SQL的重要特點是能夠統一處理關係表和RDD。

Spark Streaming

Spark提供的流式計算框架,支持高吞吐量、可容錯處理的實時流式數據處理,其核心原理是將流數據分解成一系列短小的批處理作業。

MLlib

Spark提供的關於機器學習功能的算法程序庫,包括分類、回歸、聚類、協同過濾算法等,還提供了模型評估、數據導入等額外的功能。

GraphX

Spark提供的分布式圖處理框架,擁有對圖計算和圖挖掘算法的API接口及豐富的功能和運算符,便於對分布式圖處理的需求,能在海量數據上運行複雜的圖算法。

獨立調度器、Yarn、Mesos

集群管理器,負責Spark框架高效地在一個到數千個節點之間進行伸縮計算的資源管理。

2.1 spark特點

Spark計算框架在處理數據時,所有的中間數據都保存在內存中,從而減少磁碟讀寫操作,提高框架計算效率。同時Spark還兼容HDFS、Hive,可以很好地與Hadoop系統融合,從而彌補MapReduce高延遲的性能缺點。所以說,Spark是一個更加快速、高效的大數據計算平台。

2.2 spark的應用場景

數據科學

數據工程師可以利用Spark進行數據分析與建模,由於Spark具有良好的易用性,數據工程師只需要具備一定的SQL語言基礎、統計學、機器學習等方面的經驗,以及使用Python、Matlab或者R語言的基礎編程能力,就可以使用Spark進行上述工作。

數據處理

大數據工程師將Spark技術應用於廣告、報表、推薦系統等業務中,在廣告業務中,利用Spark系統進行應用分析、效果分析、定向優化等業務,在推薦系統業務中,利用Spark內置機器學習算法訓練模型數據,進行個性化推薦及熱點點擊分析等業務。

2.3 spark和Hadoop對比

編程方式

Hadoop的MapReduce計算數據時,要轉化為Map和Reduce兩個過程,從而難以描述複雜的數據處理過程;而Spark的計算模型不局限於Map和Reduce操作,還提供了多種數據集的操作類型,編程模型比MapReduce更加靈活。

數據存儲

Hadoop的MapReduce進行計算時,每次產生的中間結果都存儲在本地磁碟中;而Spark在計算時產生的中間結果存儲在內存中。

數據處理

hadoop在每次執行數據處理時,都要從磁碟中加載數據,導致磁碟IO開銷較大;而Spark在執行數據處理時,要將數據加載到內存中,直接在內存中加載中間結果數據集,減少了磁碟的IO開銷。

數據容錯

MapReduce計算的中間結果數據,保存在磁碟中,Hadoop底層實現了備份機制,從而保證了數據容錯;Spark RDD實現了基於Lineage的容錯機制和設置檢查點方式的容錯機制,彌補數據在內存處理時,因斷電導致數據丟失的問題。

3、環境搭建

由於Spark僅僅是一種計算框架,不負責數據的存儲和管理,因此,通常都會將Spark和Hadoop進行統一部署,由Hadoop中的HDFS、HBase等組件負責數據的存儲管理,Spark負責數據計算。

安裝Spark集群前,需要安裝Hadoop環境,本教材採用如下配置環境。
 Linux系統:CentOS_7版本
 Hadoop:2.8.1版本
 JDK:1.8版本
 Spark:3.0.0版本

先部署Hadoop。再部署spark。

3.1 spark的部署方式

spark有3種部署方式

Standalone模式:

Standalone模式被稱為集群單機模式。 該模式下,Spark集群架構為主從模式,即一台Master節點與多台Slave節點,Slave節點啟動的進程名稱為Worker,存在單點故障的問題。

Mesos模式:

Mesos模式被稱為Spark on Mesos模式。 Mesos是一款資源調度管理系統,為Spark提供服務,由於Spark與Mesos存在密切的關係,因此在設計Spark框架時充分考慮到對Mesos的集成。

Yarn模式:

Yarn模式被稱為Spark on Yarn模式,即把Spark作為一個客戶端,將作業提交給Yarn服務。 由於在生產環境中,很多時候都要與Hadoop使用同一個集群,因此採用Yarn來管理資源調度,可以提高資源利用率。

本書將在Standalone模式下,進行Spark集群的安裝部署。 規劃的Spark集群包含一台Master節點和兩台Slave節點。其中,主機名hadoop01是Master節點,hadoop02和hadoop03是Slave節點。

3.2 部署spark

下載spark安裝包

解壓Spark安裝包

首先將下載的spark-3.0.0-bin-hadoop3.2.tgz安裝包上傳到主節點hadoop01的/home/hd/apps目錄下,然後解壓到當前目錄,解壓命令如下。

$ tar -zxvf spark-2.3.2-bin-hadoop2.7.tgz

修改文件夾名稱

$ mv spark-2.3.2-bin-hadoop2.7 spark

修改配置文件

將spark-env.sh.template配置模板文件複製一份並命名為spark-env.sh

$ mv spark-env.sh.template spark-env.sh

修改spark-env.sh文件,在該文件添加以下內容:

export JAVA_HOME=/home/hd/apps/java
 export HADOOP_HOME=/home/hd/apps/hadoop
 export HADOOP_CONF_DIR=/home/hd/apps/hadoop/etc/hadoop
 export SPARK_MASTER_IP=master 
 export SPARK_WORKER_MEMORY=2g
 export SPARK_EXECUTOR_MEMORY=2g
 export SPARK_DRIVER_MEMORY=2G
 export SPARK_WORKER_CORES=2

複製slaves.template文件,並重命名為slaves

$ mv slaves.template slaves

修改spark-env.sh文件,在該文件添加以下內容:通過「vi slaves」命令編輯slaves配置文件,主要是指定Spark集群中的從節點IP,由於在hosts文件中已經配置了IP和主機名的映射關係,因此直接使用主機名代替IP,添加內容如下。

slave01
 slave02

分發文件

修改完成配置文件後,將spark目錄分發至slave01和slave02節點

$ scp -r /home/hd/apps/spark/ hd@slave01:/home/hd/apps/
 $ scp -r /home/hd/apps/spark/ hd@slave01:/home/hd/apps/

啟動Spark集群

進入spark的sbin目錄啟動集群

$ ./start-all.sh

通過jps命令查看進程

通過http://master:8080訪問spark的web頁面

至此spark安裝成功

關鍵字: