【機器學習之一】python開發spark環境搭建

環境
  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的安裝路徑中不能有空格和中文。

相關文章
相關標籤/搜索