在實驗室配置了一個Spark集群,傳統(tǒng)的方法就是在Windows本地開發(fā)項目,完了后打包,然后上傳到Linux服務器上,最后執(zhí)行
spark-submit。但是在實際開發(fā)用還是感覺用IDE比較好,于是找到了Pycharm遠程連接Linux服務器開發(fā)Spark項目的方法。
1.設置環(huán)境變量
在Linux中/usr/local/spark/spark-2.2.0-bin-hadoop2.7/python/lib 目錄下py4j 包添加在系統(tǒng)環(huán)境變量中,注意源碼包的版本問題,要與下面安裝的py4j 的版本一致才行。
vim /etc/profile
#添加環(huán)境變量
export PYTHONPATH=$SPARK_HOME/python/:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip
#生效
source /etc/profile
2.遠程服務器同步配置
2.1在Linux上安裝py4j
我的集群(Centos 7)上原本是Python2.7 ,后來是工作需要改為了Python3.6.4 。在Centos 7 安裝py4j 首先要安裝pip3 ,這里采用Yum安裝的方式。
在使用yum安裝的時候會出現無法使用yum的錯誤,根據提示信息將文件最上面的改為python2.7即可。
yum install pip3
pip3 install py4j

2.2配置Deployment
首先我們需要配置PyCharm通服務器的代碼同步,打開Tools | Deployment | Configuration
點擊左邊的“+”添加一個部署配置,輸入名字,類型選SFTP

添加一個部署配置,輸入自己的遠程服務器的IP地址59.68.29.XX ,Root path 填寫Linux服務器中的文件上傳的根目錄,注意這個目錄必須當前用戶有權創(chuàng)建文件,User name 為登錄Linux服務器登錄名,可以先測試一下連接是否成功。

在Mapping 選項中,Local Path為Windows下的項目存放路徑,就是將本地目錄同步到服務器上面,Deployment path on server'tset' 的意思就是在上面的Root Path 路徑后面追加的路徑地址。

2.3Python interpreter配置
配置Python的解釋器,下面先添加遠程服務器:

采用SSH連接,添加下面的基本參數即可。

如果在Package中沒有自動導入這個包需要手動添加,點擊右邊的加號即可。


3.配置Run以及運行實例
將上面的配置結束之后,配置Run的參數。主要是配置Environment variables 參數,將SPARK_HOME =/usr/local/spark/spark-2.2.0-bin-hadoop2.7 和PYTHONPATH=/usr/local/spark/spark-2.2.0-bin-hadoop2.7/python ,因為我的spark集群建立在hadoop上我還添加了HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.2 、JAVA_HOME=/usr/local/java/jdk1.8.0_144配置好就行了。

最后先將項目上傳到Linux服務器中,Update to.. 是可以選擇不同的遠程服務器。

實例代碼:
import os
import sys
from pyspark.sql import SparkSession
#os.environ['SPARK_HOME'] = 'usr/local/spark/spark-2.2.0-bin-hadoop2.7'
#sys.path.append('/usr/local/spark/spark-2.2.0-bin-hadoop2.7/python')
sys.path.append('/usr/local/spark/spark-2.2.0-bin-hadoop2.7/python/lib')
if __name__ == '__main__':
spark = SparkSession.builder\
.appName("Python Spark SQL basic example")\
.config("spark.some.config.option", "some-value")\
.getOrCreate()
spark.sql("show databases").show()
運行結果:

運行成功!但是出現的問題是我的這個數據庫是連接的是哪個數據庫呢?我集群中的用的是Hive中元數據庫為Mysql,有以下數據庫:

這個錯誤待解決......