官網有說明各軟件版本對應:http://spark.apache.org/downloads.html
hadoop鏡像下載地址:hadoop-2.7.7.tar.gz
spark鏡像下載地址:spark-2.4.5-bin-hadoop2.7.tgz
scala下載地址:scala-2.11.0.zip or https://www.scala-lang.org/download/2.11.0.html
要求:已安裝Java8環境,檢查java -version 若JDK版本為1.8則滿足.
問題1-下載hadoop鏡像文件解壓時報錯"客戶端沒有所需特權":
不管它hadoop也能正常使用.
附上解決辦法:start winrar x -y live555-latest.tar.gz
https://blog.csdn.net/y601500359/article/details/80418765
問題2-Could not locate executablenull\bin\winutils.exe in the Hadoop binaries:
下載winutils.exe放入hadoop/bin目錄下即可:https://github.com/cdarlint/winutils
詳見:https://blog.csdn.net/love666666shen/article/details/78812622
注意:必須在環境變量中添加HADOOP_HOME,否則還是會報該錯。hadoop源碼根據System.getenv("HADOOP_HOME")
來識別hadoop的。
問題3-windows不重啟使環境變量生效方法:
詳見:https://blog.csdn.net/jiuduan2009/article/details/8857962
問題4-github訪問速度過慢:
詳見:https://www.cnblogs.com/baby123/p/10868095.html
注意:該法在下載文件時,貌似只對於git clone命令形式有效,直接界面點擊速度仍很慢.
問題5-windows使用zip命令:可以直接利用winrar工具選zi模式即可
詳見:https://www.jianshu.com/p/d6dbee5eb4a7
壓縮多個文件:zip test.zip a.txt b.txt
壓縮目錄:zip -r test.zip /home/user
解壓縮:unzip -o -d /home/sunny myfile.zip
-o:不提示的情況下覆蓋文件;
-d:-d /home/sunny 指明將文件解壓縮到/home/sunny目錄下;
zip -d myfile.zip smart.txt:刪除壓縮文件中smart.txt文件
zip -m myfile.zip ./rpm_info.txt:向壓縮文件中myfile.zip中添加rpm_info.txt文件
若不想壓縮后帶外層目錄,cd到目錄內部壓縮.
檢查hadoop是否安裝成功:hadoop version
檢查Spark是否安裝成功:spark-shell
安裝pyspark包:
-
方法1:(推薦)
1、復制spark安裝目錄\python\lib中的py4j-0.10.4-src.zip和pyspark.zip包
2、粘貼包並解壓至Anaconda安裝目錄\Lib\site-package下,如果沒有使用Anaconda,把Anaconda安裝目錄替換成Python安裝目錄。(解壓時注意去掉多的最外層目錄),並分別改名為py4j和pyspark
3、在命令行輸入python進入python環境,輸入import pyspark as ps不報錯即表示成功 -
方法2:(推薦)
將spark/python文件夾下的pyspark文件夾拷貝到python對應的文件夾中(若沒有安裝py4j會報該依賴錯)。或者執行以下命令安裝:pip install PySpark
-
方法3:spark安裝包中已自帶pyspark包,但無法直接在python環境下Import pyspark
pip install findspark
在py文件中執行以下代碼:
import findspark
findspark.init()
即可順利import pyspark
測試pyspark:
-
啟動spark:
-
方法1:直接cmd下輸入命令pyspark即可進入pyspark-shell環境,然后就是完全類似於Python-shell的操作
# 在shell中執行以下代碼測試,計算文件行數(注意路徑不能是單反斜杠否則會報錯)
lines = sc.textFile("E:/Documents/Desktop/s.txt")
lines.count()-
方法2:進入python環境后,import pyspark即可調用相應的api
from pyspark import SparkContext
sc = SparkContext( 'local', 'test')
logFile = "file:///usr/local/spark/README.md"
logData = sc.textFile(logFile, 2).cache()
numAs = logData.filter(lambda line: 'a' in line).count()
numBs = logData.filter(lambda line: 'b' in line).count()
print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))
-
修改日志級別:(初學不建議改,方便查看執行過程)
方法1:修改配置文件
在conf 目錄下復制log4j.properties.template為log4j.properties ,這個文件用來管理日志設置。
接下來找到下面這一行:
log4j.rootCategory=INFO, console
然后通過下面的設定降低日志級別,只顯示警告及更嚴重的信息:
log4j.rootCategory=WARN, console
方法2:程序中設置:(但效果不佳,spark啟動過程中的日志仍然會顯示)
sc.setLogLevel('WARN')
提交Python作業
# --py-files:表示主程序helloSpark.py所依賴的py,以逗號間隔; 若是多個py文件可以壓縮成zip傳給--py-files
# 主程序腳本helloSpark.py之后的參數為主程序需要傳入的參數
spark-submit --master local --name 'myApp' --py-files a.py,b.py helloSpark.py --parm1 val1 --parm2 val2
# linux下命令換行
spark-submit \
--master local \
--name 'myApp' \
helloSpark.py
# windows下命令換行
spark-submit ^
--master local ^
--name 'myApp' ^
helloSpark.py
# 注意格式否則容易報錯'SparkException: Cannot load main class from JAR file'
提交spark自帶的java示例:
spark-submit --class org.apache.spark.examples.SparkPi spark-examples_2.11-2.4.5.jar
對於依賴過多python包,可以將整個python虛擬環境打包成zip文件,分發到各個節點機器。
詳見:https://www.cnblogs.com/piperck/p/10121097.html
driver和executor的參數設置在yarn模式下才會起作用:
--driver-cores:Spark應用Driver的CPU核數,Driver主要完成任務的調度以及和executor和cluster manager進行協調。
--executor-cores:Spark應用每個Executor的CPU核數,各個 executor 使用的並發線程數目,也即每個 executor 最大可並發執行的 Task 數目。
--executor-memory:各個 executor 使用的最大內存,不可超過單機的最大可使用內存。
--num-executors:創建多少個 executor。
並行度主要受--executor-cores與--num-executors的影響:總cpu core數量為executorCores * numExecutors,官方推薦task數量一般設置為總cpu core數量的2~3倍. 每個stage的task數量即rdd划分的partitions數量.
詳見:https://spark.apache.org/docs/2.2.0/submitting-applications.html
調試PySpark程序:
-
同正常的python程序調試完全相同(通過pycharm調試或執行spark程序默認只會打印warn日志)
-
pycharm中傳入命令行參數(字符串參數不推薦再加' '會導致路基不對,可以加" "):Edit Configurations -> Parameters
-
但不知道咋調試對rdd執行的mapPartitions等分布式執行的函數(打斷點無效)
spark配置有三種方式:
方式1:代碼中動態設置Spark屬性
方式2:spark-submit命令行傳入
方式3:加載默認的配置conf/spark-defaults.conf
優先級:方式1>方式2>方式3