環境
spark-1.6
python3.5
一、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進程之間就有大量通信。
python開發spark,需要進行大量的進程間的通信,如果通信量過大,會出現“socket write error”錯誤,應盡量少使用回收數據類算子,也可以調節回收日志的級別,降低進程之間的通信。
二、搭建
這里使用Spark1.6版本,由於Spark2.1以下版本不支持python3.6版本,所以我們使用兼容性比較好的Python3.5版本。
步驟一:搭建python3.5環境
(1)conda info --env可以看到所有python環境,前面有個‘*’的代表當前環境
(2)創建Python3.5環境
conda create --name python35 python=3.5
創建成功之后:
(3)激活python35:
步驟二:安裝spark
(1)下載spark-1.6.0-bin-hadoop2.6
官網下載:https://archive.apache.org/dist/spark/spark-1.6.3/
(2)解壓到本地目錄下,這里是:E:\workspace\spark-1.6.0-bin-hadoop2.6
(3)配置環境變量:SPARK_HOME
步驟三:安裝py4j、pyspark
★py4j是一個用Python和Java編寫的庫。通過Py4J,Python程序能夠動態訪問Java虛擬機中的Java對象,Java程序也能夠回調Python對象。
★pyspark是Spark為Python開發者提供的 API。
方式一:可以通過pip安裝,但是默認安裝最新版本,我們這里需要的是和spark1.6相匹配的版本(不推薦)
安裝:
pip install py4j
pip install pyspark
卸載:
pip uninstall py4j
pip uninstall pyspark
方式二:通過spark安裝包拷貝(推薦)
進入目錄:E:\workspace\spark-1.6.0-bin-hadoop2.6\python\lib,將py4j-0.9-src.zip、pyspark.zip解壓后將py4j、pyspark拷貝到:D:\Anaconda3\envs\python35\Lib\site-packages
驗證:導入包 不報錯就OK
否則,會報錯:
三、IDE搭建
1、eclipse
(1)eclipse中開發python程序,需要安裝pydev插件。eclipse要求4.7以上,下載python插件包PyDev.zip(http://www.pydev.org/download.html),解壓后加壓拷貝到eclipse的dropins中,重啟即可。
(2)配置python35解釋器
(3)配置SPARK_HOME,設置環境變量,需要重啟eclipse
否則報錯:KeyError: 'SPARK_HOME'
(4)配置PYSPARK_PYTHON
如果使用的anaconda更換了python3.5.x版本,之后在開發工具中指定了python解析器為3.5.x版本之后,運行python spark 代碼時spark默認的使用的python版本可能使環境變量中指定的版本。會導致與指定的python解析器的python版本不一致。這時需要在環境變量中指定下PYSPARK_PYTHON環境變量即可,值為指定的python3.5.x python解析器。
(5)配置控制台編碼
eclipse控制台只支持GBK編碼。運行時需要修改編碼,運行python文件時,右鍵->Run As->Run Configurations->Common->Encoding 改為GBK
亂碼:
�ɹ�: ����ֹ PID 940 (���� PID 2312 �ӽ���)�Ľ��̡� �ɹ�: ����ֹ PID 2312 (���� PID 3992 �ӽ���)�Ľ��̡� �ɹ�: ����ֹ PID 3992 (���� PID 5664 �ӽ���)�Ľ��̡�
設置:
修正后:
成功: 已終止 PID 5796 (屬於 PID 6888 子進程)的進程。 成功: 已終止 PID 6888 (屬於 PID 1836 子進程)的進程。 成功: 已終止 PID 1836 (屬於 PID 2088 子進程)的進程。
(6)python開發spark設置外部依賴包
<1>本地測試可以通過Run As -> Run Configuration->Environment來設置SPARK_CLASSPATH 指定依賴的jar包:
<2>集群中提交任務,需要指定依賴的jar包,可以通過--jars或者—driver-class-path來指定依賴的jar包。也可以在集群spark中../conf/spark-defaults.conf中設置變量spark.driver.extraClassPath或者spark.executor.extraClassPath來指定pySpark依賴的jar包。
例如:如果使用python來開發SparkStreaming Application 還需要在進行如下配置:
在conf目錄的spark-default.conf目錄下添加兩行配置信息
spark.driver.extraClassPath F:/spark-1.6.0-bin-hadoop2.6/lib/spark-streaming-kafka-assembly_2.10-1.6.0.jar spark.executor.extraClassPath F:/spark-1.6.0-bin-hadoop2.6/lib/spark-streaming-kafka-assembly_2.10-1.6.0.jar
2、PyCharm
PyCharm2018破解:https://blog.csdn.net/u012278016/article/details/81738676
(1)創建新的python項目
(2)使用PyCharm創建python3.5環境
不同的python項目,可能需要不同的python版本
第一種:使用conda創建新環境
第二種:使用已有虛擬環境
第三種:使用已有其他的環境
(2)配置python對spark的依賴包
選中項目,然后選擇點擊File->Settings…->點擊 Project:xxx:->Project Structure
(3)配置SPAKR_HOME,否則報錯:KeyError: 'SPARK_HOME'
方式一:設置某個python文件運行變量
方式二:設置所有文件默認運行變量
方式三:配置系統環境變量SPAKR_HOME,設置后需要重啟PyCharm
(4)配置PYSPARK_PYTHON
配置spark使用的python版本,否則有可能報錯
方式一:代碼中設置
import os os.environ["PYSPARK_PYTHON"] = "D:\\Anaconda3\\envs\\python35\\python.exe"
方式二:設置PyCharm運行變量
方式三:設置操作系統環境變量 需要重啟PyCharm
(5)設置 python代碼模板
File->Setting->File and Code Templates
PyCharm中的文件模版變量:
${PROJECT_NAME} - 當前的項目名 ${NAME} - 在文件創建過程中,新文件對話框的命名 ${USER} - 當前的登錄用戶 ${DATE} - 現在的系統日期 ${TIME} - 現在的系統時間 ${YEAR} - 當前年份 ${MONTH} - 當前月份 ${DAY} - 當前月份中的第幾日 ${HOUR} - 現在的小時 ${MINUTE} - 現在的分鍾 ${PRODUCT_NAME} - IDE創建文件的名稱 ${MONTH_NAME_SHORT} - 月份的前三個字母縮寫 ${MONTH_NAME_FULL} - 完整的月份名
注意:
jdk、Anaconda、python、Spark的安裝路徑中不能有空格和中文。