眾所周知,教學文檔總該以理論部分作為開篇,于是我們這篇Spark專題同樣會以一堆理論和專有名詞開始,筆者會盡可能的讓專業詞匯通俗易懂
第一部分:Spark 核心概述
Spark 是什么?
1. 大數據時代的"超級賽車"
舉個例子,你有一個巨大的圖書館(HDFS),里面有數百萬本書(數據)。你需要找出所有提到"人工智能"的書籍并統計次數。
-
傳統方式(MapReduce):你雇傭一群人,每人拿幾本書,找到關鍵詞后記錄下來,然后把所有記錄交給一個人匯總。這個過程需要反復往返圖書館書架(磁盤IO),速度較慢。
-
Spark 方式:你給每個人一個神奇的書架(內存),他們可以一次性拿多本書放在手邊,快速查找并記錄,大大減少了往返時間。
Spark 就是一個基于內存計算的分布式大數據處理引擎,它比傳統的 MapReduce 快 10-100 倍!
2. Spark 的四大特性
-
速度快
- 內存計算:減少磁盤 I/O,中間結果保存在內存中
- 查詢優化:先進的查詢優化器和代碼生成器
-
易用性
- 多語言支持:Java, Scala, Python, R
- 高級 API:只需要關注"做什么",而不是"怎么做"
-
通用性
- Spark 生態系統提供一站式解決方案:
- 兼容性
- 多種數據源:HDFS, HBase, Cassandra, S3, Local FS…
- 多種部署模式:Standalone, YARN, Kubernetes, Mesos
3. Spark 的核心架構
核心組件解析:
- Driver:大腦,負責協調整個作業的執行
- Cluster Manager:資源調度員,負責分配計算資源
- Worker Node:干活的工作人員,每個節點可以運行一個或多個 Executor
- Executor:工作進程,負責執行具體的計算任務
- Task:最小工作單元,處理一個數據分區的計算
4. Spark 與 Hadoop 的關系
Spark 不是要取代 Hadoop,而是增強它!常見的搭配是:
- 存儲:Hadoop HDFS(經濟可靠的大規模存儲)
- 計算:Spark(高速內存計算)
- 資源管理:Hadoop YARN(高效的資源調度)
5. 處理流程對比
6. 為什么要學習 Spark?
- 行業標準:大多數大數據崗位要求掌握 Spark
- 處理能力:能夠處理 PB 級別數據
- 靈活性:支持批處理、流處理、機器學習和圖計算
- 生態系統:豐富的庫和活躍的社區支持
- 職業發展:掌握 Spark 是大數據工程師的核心技能
其實簡單來說,可以看看招聘軟件上對數據工程師的要求,大多會提到spark,所以咱的目標很明確,可惡,這里不能發表情包,不然有很多合適的表情包可以放在這
代碼示例:創建一個簡單的 Spark 應用
# 導入必要的庫
from pyspark.sql import SparkSession# 創建 SparkSession - 所有 Spark 功能的入口點
spark = SparkSession.builder \.appName("MyFirstSparkApp") \ # 設置應用名稱.config("spark.executor.memory", "2g") \ # 配置執行器內存.getOrCreate() # 獲取或創建會話# 打印 Spark 版本信息
print(f"Spark version: {spark.version}")# 創建一個簡單的數據集
data = [("Alice", 28), ("Bob", 35), ("Charlie", 42)]
columns = ["Name", "Age"]# 創建 DataFrame
df = spark.createDataFrame(data, columns)# 展示數據
df.show()# 執行簡單查詢
df.filter(df.Age > 30).show()# 停止 SparkSession
spark.stop()
輸出結果:
Spark version: 3.3.0
+-------+---+
| Name|Age|
+-------+---+
| Alice| 28|
| Bob| 35|
|Charlie| 42|
+-------+---++-------+---+
| Name|Age|
+-------+---+
| Bob| 35|
|Charlie| 42|
+-------+---+
只是用python舉個例子,不會python也不影響,畢竟實際工作中,應該會有界面化的軟件讓你直接寫sql,但我不想使用公司的軟件寫博客,就只能用python湊合了