環境
spark-1.6
python3.5html
1、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
python開發spark,須要進行大量的進程間的通訊,若是通訊量過大,會出現「socket write error」錯誤,應儘可能少使用回收數據類算子,也能夠調節回收日誌的級別,下降進程之間的通訊。apache
2、搭建api
這裏使用Spark1.6版本,因爲Spark2.1如下版本不支持python3.6版本,因此咱們使用兼容性比較好的Python3.5版本。
步驟一:搭建python3.5環境架構
(1)conda info --env能夠看到全部python環境,前面有個‘*’的表明當前環境eclipse
(2)建立Python3.5環境socket
conda create --name python35 python=3.5
建立成功以後:工具
(3)激活python35:oop
步驟二:安裝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
不然,會報錯:
3、IDE搭建
一、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
二、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的安裝路徑中不能有空格和中文。