天天看點

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

文章目錄

    • 1.Python開發Spark的環境配置詳細步驟
      • 1.1 Windows 配置 python 環境變量
      • 1.2 Windows 配置 spark 環境變量
      • 1.3 Python中安裝py4j
      • 1.4 Python中安裝PySpark子產品
      • WordCount 測試環境是否配置成功
    • 2. Python 開發 Spark原理

1.Python開發Spark的環境配置詳細步驟

1.1 Windows 配置 python 環境變量

這個比較簡單,安裝原生的 Python 或者 Anaconda 都可以,至于步驟這裡就不多說了。

我這裡用的Anaconda3,至于Anaconda3的安裝配置,有興趣的話可以參考:這篇blog

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

注意:如果使用的是 anaconda 安裝的 python環境 并且打算學習 spark1.6 版本的開發,建議安裝python3.5.x 版本,這個版本和 spark1.6 相容

1.2 Windows 配置 spark 環境變量

我這裡用的Spark版本

spark-2.3.1-bin-hadoop2.6.tgz

1. 解壓并配置SPARK_HOME

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)
Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

1.3 Python中安裝py4j

在 python 環境中安裝 py4j 子產品(python 調用 java API 的中間通信子產品)

兩種方式,我這裡用的第(2)種

(1)進入

python安裝目錄\Scripts

使用

pip install py4j

(2)或者将解壓的spark安裝包中的

D:\spark-2.3.1-bin-hadoop2.6\python\lib\py4j

拷貝到

D:\ProgramData\Anaconda3\Lib\site-packages

中。

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

驗證py4j是否安裝成功:

python >>>import py4j

回車

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

1.4 Python中安裝PySpark子產品

同樣也是那兩種方法

(1)使用pip安裝pyspark。

pip install pyspark

會安裝最新的版本的pyspark。

(2)或者,将解壓的spark安裝包中的

D:\spark-2.3.1-bin-hadoop2.6\python\pyspark

拷貝到

D:\ProgramData\Anaconda3\Lib\site-packages

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

驗證pyspark子產品是否安裝成功

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

如果啟動遇到下面錯誤: ERROR Shell:396 - Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

說明你的電腦沒有配置 hadoop ,解決辦法可以參考:這篇部落格

WordCount 測試環境是否配置成功

先來個WordCount試試(我這裡用的 PyCharm)

(1)建立一個 txt 檔案

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

(2)運作下面示例代碼

#coding:utf-8
from pyspark import SparkConf
from pyspark import SparkContext
if __name__ == '__main__':
    conf=SparkConf()
    conf=conf.setAppName("wordcount").setMaster("local")
    sc=SparkContext(conf=conf)
    lines=sc.textFile("word.txt",2)
    print("lines rdd partition length = %d"%(lines.getNumPartitions()))
    result=lines.flatMap(lambda line:line.split(" ")).map(lambda word:(word,1)).reduceByKey(lambda v1,v2:v1+v2,3)
    print("result rdd partition length = %d"%(lines.getNumPartitions()))
    result.foreach(lambda x:print(x))
    result.saveAsTextFile("result")           

複制

運作結果如下:

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

說明配置的完全沒毛病。

2. Python 開發 Spark原理

使用 python api 編寫 pyspark 代碼送出運作時,為了不破壞 spark 原有的運作架構,會将寫好的代碼首先在 python 解析器中運作(cpython),Spark 代碼歸根結底是運作在 JVM 中的,這裡 python 借助 Py4j 實作 Python 和 Java 的互動,即通過 Py4j 将 pyspark 代碼“解析”到 JVM 中去運作。例如,在 pyspark 代碼中執行個體化一個 SparkContext 對象,那麼通過 py4j 最終在 JVM 中會建立 scala 的 SparkContext 對象及後期對象的調用、在 JVM 中資料處理消息的日志會傳回到 python 程序中、如果在代碼中會回收大量結果資料到 Driver 端中,也會通過 socket 通信傳回到 python 程序中。這樣在python程序和JVM程序之間就有大量通信。

Windows 安裝配置 PySpark 開發環境(詳細步驟+原理分析)

python開發spark,需要進行大量的程序間的通信,如果通信量過大,會出現“socket write error”錯誤。是以,應盡量少使用回收資料類算子,也可以調節回收日志的級别,降低程序之間的通信。