๐ฅ
[Spark] spark-submit ๊ณผ ์ต์ ๋ณธ๋ฌธ
spark-submit ์ด๋?
spark-submit์ ์คํํฌ application์ ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ ๋ ์ฌ์ฉํ๋ ์คํฌ๋ฆฝํธ์ด๋ค.
์ด ์คํฌ๋ฆฝํธ๋ application์์ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ์ ์ดํ๋ ์ฌ๋ฌ ํ๋๊ทธ๋ฅผ ์ ๊ณตํ๋ค.
spark-submit ์ต์
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
--py-files file1.py,file2.py,file3.zip
my_python_file.py
์์ spark-submit ์ฃผ์ ์ต์ ์์์ ํ๋๊ทธ ๊ฐ๋ค์ ํ๋์ฉ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
master ํ๋๊ทธ (cluster manager)
spark application์ ์์์ ํ ๋น๋ฐ๊ธฐ ์ํด ์ด๋ค cluster manager๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง๋ฅผ ์ค์ ํ๋ค.
master ํ๋๊ทธ ๊ฐ | ์ค๋ช |
local[*] | ๋ก์ปฌ ๋ชจ๋์์ ๋จธ์ ์ด ๊ฐ๊ณ ์๋ ๋งํผ์ ์ฝ์ด๋ก ์คํํ๋ค. |
local[N] | ๋ก์ปฌ ๋ชจ๋์์ N๊ฐ์ ์ฝ์ด๋ก ์คํํ๋ค. |
local | ๋ก์ปฌ ๋ชจ๋์์ ์ฑ๊ธ ์ฝ์ด๋ก ์คํํ๋ค. |
yarn | yarn ํด๋ฌ์คํฐ์ ์ ์ํ๋ค. ๋ชจ๋ ์์ปค๋ ธ๋์ ํ๋ก ์ค์ ๋๋ ํ ๋ฆฌ๋ฅผ `HADOOP_CONF_DIR` ์ด๋ `YARN_CONF_DIR `ํ๊ฒฝ๋ณ์๋ก ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. |
spark://host:port or mesos://host:pord | ์คํํฌ(standalone)/๋ฉ์์ค ํด๋ฌ์คํฐ์ ์ง์ ํ ํฌํธ๋ก ์ ์ํ๋ค. |
k8s://host:port | ์ฟ ๋ฒ๋คํฐ์ค๋ก ์คํํ๋ค. |
deploy mode (๋ฐฐํฌ ๋ฐฉ๋ฒ)
application ์คํ ์ ํ ๋น๋ฐ์ ๋ฆฌ์์ค์ ๋ฌผ๋ฆฌ์ ์์น๋ฅผ ์ค์ ํ๋ค.
์คํํฌ์ deploy mode ๋ ์๋์ ์ธ ๊ฐ์ง์ด๋ค.
deploy-mode | ์ค๋ช |
local mode | ์คํํฌ ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋จ์ผ ๋จธ์ ์์ ์คํ๋ ๋ ์ฌ์ฉํ๋ ๋ฐฐํฌ ๋ชจ๋์ด๋ค. |
client mode | spark driver๋ ํด๋ฌ์คํฐ ์ธ๋ถ(gateway machine or edge node)์์ ์คํ๋๋ค. spark executors๋ ํด๋ฌ์คํฐ์์ ์คํ๋๋ค. |
cluster mode | spark driver์ executors ๋ชจ๋ ํด๋ฌ์คํฐ ์์ปค ๋ ธ๋์์ ์คํ๋๋ค. |
client์ cluster mode์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ driver์ ์คํ ์์น์ด๋ค.
client mode
client mode์ ๊ฒฝ์ฐ application master๋ ๋จ์ํ ๋ ธ๋ ๋งค๋์ ์๊ฒ ์์ ์์ฒญ๋ง ํ๋ค. ํด๋ผ์ด์ธํธ ๋จธ์ ์์์ driver๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ฌ์ฉ์ค์ธ ๋ฆฌ์์ค ๋ฐ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๊ณ , ๊ฐ๋ฐ ์ ๋ํํ ๋๋ฒ๊น ์ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ชจ๋์ด๋ค.
cluster mode
driver๊ฐ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ์คํ๋๋ฉฐ, ์ปดํ์ผ๋ jar/python script ๋ฑ์ cluster manager์๊ฒ ์ ์กํ๋ค.
driver๊ฐ application master ์์์ ๋์๋์ด์ ๋ก๊ทธ๋ฅผ ๋ฐ๋ก ํ์ธํ๊ธฐ ํ๋ค๋ค. ์ฃผ๋ก ์ด์ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ ๋ฐฐํฌ ๋ฐฉ์์ด๋ค.
Application Properties Config
์๋๋ ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์์ฑ์ด๋ค. `--conf <key1>=<value1> --conf <key2>=<value2>` ํํ๋ก ์ฌ์ฉ๋๋ค.
์์ฃผ ์ฐ์ด๋ ํ๋๊ทธ๋ค๋ง ์ ๋ฆฌํ๊ณ , ๋ค๋ฅธ ์ค์ ๊ฐ๋ค์ ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
๋ณดํต `sparkConf` ํด๋์ค๋ฅผ ํตํด์๋ ๋์ผํ๊ฒ ์ค์ ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ :https://spark.apache.org/docs/latest/configuration.html#application-propertieshttps://spark.apache.org/docs/latest/configuration.html
property name | default | ์ค๋ช |
spark.driver.cores | 1 | driver๊ฐ ์ฌ์ฉํ ์ฝ์ด ์๋ก, cluster ๋ชจ๋์์๋ง ์ ํจํ๋ค. |
spark.driver.memory | 1g | driver๊ฐ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ด๋ค. * client mode์์๋ application์ด sparkContext๊ฐ ์ด๊ธฐํ๋๋ ์๊ฐ driver JVM์ด ์ด๋ฏธ ์์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ SparkConf ๋ก ์ค์ ๋ถ๊ฐํ๋ค. spark-submit ๋ ํจ๊ป ์ ๊ณตํ๊ฑฐ๋ spark-defaults.conf๋ก ๊ฐ์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค. |
spark.executor.memory | 1g | executor์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ด๋ค. |
spark.driver.memoryOverhead | driverMemory*0.1 (์ต์ 384m) |
cluster ๋ชจ๋์์ driver๋น ํ ๋นํ ์คํํ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ yarn, kubernetes์์๋ง ์ง์ํ๋ ์ต์ ์ด๋ค. |
spark.executor.cores | 1 |
[์ฐธ๊ณ ] spark configuration ์ ์ฉ ์ฐ์ ์์
spark config๋ฅผ ์ ์ฉํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ๊ณผ ์ฐ์ ์์๋ ์๋์ ๊ฐ๋ค.
- 1์์: SparkConf ํด๋์ค์์ ์ค์ (`set()` ํจ์ ์ฌ์ฉ)
- 2์์: spark-submit/spark-shell ์คํ ์ ํจ๊ป ์ ๊ณตํ๋ ํ๋๊ทธ ๊ฐ
- 3์์: conf/spark-defaults.conf ์ค์ ๊ฐ
๊ธฐํ ์ต์
flag | ์ค๋ช |
--class | main์ด ์๋ ํด๋์ค๋ฅผ ์ง์ ํ๋ค. (java, scala ํ๋ก๊ทธ๋จ ๋ฐฐํฌ์ ๊ฒฝ์ฐ) |
--jars | ์ดํ๋ฆฌ์ผ์ด์
์ classPath์ ์์ด์ผ ํ ๊ฒฝ์ฐ Jar ํ์ผ ๋ชฉ๋ก์ด๋ค. ์ธ๋ถ jarํ์ผ์ ์ฌ์ฉํ๋ค๋ฉด ์ด ์ต์ ์ผ๋ก ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. |
--packages | ์ปด๋ง ๊ตฌ๋ถ์์ driver/executor classPath์ ํฌํจํ jar์ maven coordinates์ด๋ค. ํ์ ์์๋ ์๋์ ๊ฐ๋ค local maven -> maven central -> remote repositories |
--py-files | ์ปด๋ง ๊ตฌ๋ถ์์ PYTHONPATH์ ๋ค์ด๊ฐ์ผ ํ๋ .zip, .egg, .py ํ์ผ ๋ชฉ๋ก๋ค์ด๋ค. client deploy mode์์๋ ๋ก์ปฌ ํ์ผ์ ๊ฐ๋ฆฌ์ผ์ผ ํ๊ณ , cluster deploy mode์์๋ ๋ก์ปฌํ์ผ์ด๊ฑฐ๋(๋ชจ๋ executor ๋ด์ ์กด์ฌํด์ผ ํจ), ํด๋ฌ์คํฐ ๋ด๋ถ์์ ๋ณผ ์ ์๋ URL ํํ์ฌ์ผ ํ๋ค. |
--repositories | packages์ ์ง์ ๋ maven ์ขํ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํ ์ปด๋ง ๊ตฌ๋ถ์์ remote repository ๋ชฉ๋ก์ด๋ค. |
--driver-class-path | ๋๋ผ์ด๋ฒ์ classPath ๋ชฉ๋ก์ด๋ฉฐ, --jars๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ๋ jar๋ค์ ์๋์ผ๋ก classPath์ ํฌํจ๋๋ค. |
์ฐธ๊ณ : https://docs.cloudera.com/runtime/7.2.15/running-spark-applications/topics/spark-submit-options.html
'๋ฐ์ดํฐ > Spark' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spark] Logical Plan ๊ณผ Physical Plan (0) | 2024.03.25 |
---|---|
[Spark] RDD vs Dataframe (2) | 2024.03.24 |
[Spark] Adaptive Query Execution(AQE) (0) | 2024.03.23 |
[Spark] ์คํํฌ์ Executor Memory ๊ตฌ์กฐ (0) | 2024.03.23 |
[Spark] GraphX (0) | 2024.03.18 |