Spark環境配置筆記
本地Pycharm調試Spark環境配置
- Pycharm 首先得裝上(儘量別用社區版)
- Java8/ Python2都安裝好(沒難度,有問題自行百度)
- 下載Hadoop包/Scala包/Spark-Hadoop包(注意版本對應)
- 不管有用沒用先用pip把
py4j
模塊裝上。同時pip安裝pyspark
模塊 - Pycharm中 Run/Debug Configurations -> Environment -> Environment variables: 添加(
SPARK_HOME
,PYTHONPATH
,HADOOP_HOME
)三個環境變量
PYTHONUNBUFFERED=1;SPARK_HOME=D:\spark-2.4.3-bin-hadoop2.6;PYTHONPATH=D:\spark-2.4.3-bin-hadoop2.6\python;HADOOP_HOME=D:\hadoop-2.6.5
- 爲PySpark項目添加依賴庫:
Pycharm中 File -> Project: -> Project Structure -> Add ContentRoot
(依賴庫zip包都在spark-hadoop文件夾 /bin 目錄下)
- 配置完成。
PySpark本地調試遇到的坑
- SparkConf的坑
初始化SparkContext的代碼如下所示:
conf = SparkConf().setAppName("wordcount").setMaster("local")
sc = SparkContext(conf)
結果報告運行錯誤:
ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Could not parse Master URL: '<pyspark.conf.SparkConf object at 0x0000000002D95908>'
根據錯誤提示,以爲是Master的設置有問題,實際上是實例化SparkContext有問題。閱讀代碼,發現它的構造函數聲明如下所示:
def __init__(self, master=None, appName=None, sparkHome=None, pyFiles=None,
environment=None, batchSize=0, serializer=PickleSerializer(), conf=None,
gateway=None, jsc=None, profiler_cls=BasicProfiler):
而前面的代碼僅僅是簡單的將conf傳遞給SparkContext構造函數,這就會導致Spark會將conf看做是master參數的值,即默認爲第一個參數。所以這裏要帶名參數:
sc = SparkContext(conf=conf)