http://blog.csdn.net/zrc199021/article/details/52635819
之前初學Spark用spark-shell執行小程序的時候, 每次執行action操作(比如count,collect或者println),都會報錯:
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
同時如果去spark ui上(公司默認為ip:18080)會看到spark-shell為核數core為0:
原因是啟動spark-shell的時候沒有給他分配資源, 所以我們應該在啟動spark-shell的時候這么寫:
/home/mr/spark/bin/spark-shell --executor-memory 4G \ --total-executor-cores 10 \ --executor-cores 1
- 1
- 2
- 3
- 1
- 2
- 3
其中 :
--executor-memory
是指定每個executor(執行器)占用的內存 --total-executor-cores
是所有executor總共使用的cpu核數 --executor-cores
是每個executor使用的cpu核數
對於spark-shell還可以在yarn上執行: --master yarn-client
這里必須是client
,不同於spark-submit的yarn-cluster
, 因為spark-shell作為一個與用戶交互的命令行,必須將Driver運行在本地,而不是yarn上, 其他的參數與submit一樣.
以上參數就限制了總cpu核數為10, executor數目為10
但是, 每次執行都要寫這么多參數顯然很麻煩, 我們也可以通過修改spark-shell的方法將以上參數改成默認, 方法如下:
spark-shell之前代碼:
... ... function main() { ... else export SPARK_SUBMIT_OPTS "$FWDIR"/bin/spark-submit --class org.apache.spark.repl.Main "$@" fi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
修改為:
... ... function main() { ... else export SPARK_SUBMIT_OPTS # CUN RESOURCE_OPTIONS="--executor-memory 1G --total-executor-cores 10 --executor-cores 1 " CMD_OPTIONS=$RESOURCE_OPTIONS$@ echo "CMD_OPTIONS: " $CMD_OPTIONS "$FWDIR"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" $CMD_OPTIONS fi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
之后, 直接運行spark-shell即可