最近在研究Spark,准確的說是pyspark,為了搭個測試環境,之前一直在雲上開Linux機器來搭Hadoop,但是Spark可以Local執行,我就打算在本地搭個環境。遇到了一些問題,記錄一下,也給其他朋友一個思路。
pyspark在本地搭建需要
Java JDK 1.8.0
Anacoda3
spark-2.2.3-bin-hadoop2.7
hadoop-2.7.7
hadooponwindows-master(后面提供下載連接)
操作步驟:
1,安裝JDK和Anaconda3
2,把hadooponwindows-master的bin覆蓋hadoop-2.7.7的bin
hadooponwindows-master里面的bin主要有winutils.exe,還有一些dll文件,都是需要的
3,配置Java,Spark,Hadoop環境變量
Spark和Hadoop的環境配置與Java類似
(1)需要完成spark_home和bin環境變量相關配置。
(2)同樣地,這里也需要配置環境變量,新建HADOOP_HOME變量和新增在path變量下新增…/hadoop/bin。
為了偷懶,這一塊我主要復制這個連接的內容(感謝):https://blog.csdn.net/weixin_38556445/article/details/78182264
下面說下我遇到的兩個問題:
安裝spark,環境變量已經配置,也已經解壓,但是啟動報錯:
Could not locate executablenull\bin\winutils.exe in the Hadoop binaries
%%%解決辦法,或者是問題是沒有把hadooponwindows-master的bin覆蓋hadoop-2.7.7的bin,導致hadoop-2.7.7里面找不到winutils.exe
(2)報了一個py4j.protocol.Py4JJavaError,這個錯查了很久沒有找到原因,但是我通過下面的方式解決了,不一定對,大家自己嘗試下把。
解決辦法:以管理員的身份打開cmd,然后通過cd命令進入到Hadoop的bin目錄下,然后執行以下命令:
winutils.exe chmod 777 c:\tmp\Hive
終於OK了,
wordcount例程
from pyspark import SparkConf, SparkContext # 創建SparkConf和SparkContext conf = SparkConf().setMaster("local").setAppName("lichao-wordcount") sc = SparkContext(conf=conf) # 輸入的數據 data = ["hello", "world", "hello", "word", "count", "count", "hello"] # 將Collection的data轉化為spark中的rdd並進行操作 rdd = sc.parallelize(data) resultRdd = rdd.map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b) # rdd轉為collecton並打印 resultColl = resultRdd.collect() for line in resultColl: print(line)
******報錯還可能是由於cmd命令行沒有用管理員身份運行!!!