Apache Spark Install Guide
1. ์คํํฌ ๋ค์ด๋ก๋ ๋ฐ ๊ตฌ์ฑ์์
1. Apache-Spark ๋ค์ด๋ก๋
http://spark.apache.org/downloads.html๋ก ์ด๋ํ๋ค.2. ๋ค์ด๋ก๋ ๋ฒ์ ผ ์ค์
์คํํฌ ์ต์ ๋ฒ์ ผ์ ์ ํํ๋ค.
์ฌ์ ๋น๋(Pre-build)์ด๊ณ , ๋๋ถ๋ถ์ ํ๋ก ๋ฐฐํฌํ์์ ์ด์ฉํ ์ ์๋ค๊ณ ํ ๋๋ฒ์งธ ํญ๋ชฉ์ ์ ํํ๋ค.
ํ์ํ๊ฒฝ์ฐ ์ด๋ฏธ ์ค์น๋์ด ์๋ ์ ํฉํ ํ๋ก ๋ฒ์ ผ์ ๋ค์ด๋ฐ์ผ๋ฉด ๋๋ค.
# ์ฐธ๊ณ : ํ๋ก์ ๋ฐ๋์ ์ค์น ๋์ด ์์ง ์์๋ ๋๋ค.
3. ๋ค์ด๋ก๋ ๋ฐ์ ํ์ผ ์์ถ ํ๊ธฐ.
txr -xvf spark-1.6.1-bin-without-hadoop.tgz
ln -s spark-1.6.1-bin-without-hadoop spark
vim ~/.bash_profile
export SPARK_HOME=/Users/KIDO/Documents/00.TOOLS/spark์๊ธฐ ํญ๋ชฉ์ ์ ๋ ฅํ๊ณ :wq๋ก ๋น ์ ธ๋์จ๋ค.
export PATH=$JAVA_HOME:$MYSQL_HOME:$ACTIVATOR_HOME:$SPARK_HOME/bin:$PATH
source .bash_profile
4. ์คํํฌ ๋๋ ํ ๋ฆฌ ๋๋ฌ๋ณด๊ธฐ
bin
- ์คํ ๋ช ๋ น์ด ๋ค์ด์๋ค.
conf
- ์คํํฌ ์ค์ ์ ์ํ ์ค์ ํ์ผ
- ์คํํฌ ํ๊ฒฝ์ค์ , log์ค์ , docker๊ด๋ จ ์ค์ , slave๊ด๋ จ ์ค์ ๋ฑ ๋ค์ํ๋ค.
examples
- ์คํํฌ๋ฅผ ์ฌ์ฉํ ๋ค์ํ ์์ ๋ฅผ ์ดํด๋ณผ ์ ์๋ค.
lib
- ์คํํฌ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์กด์ฌํ๋ค.
- spark-yarn ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฑ์ด ์๋ค.
python
- ํ์ด์ ์คํํฌ๋ฅผ ์ํ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ค.
R
- spark R์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
sbin
- ์คํํฌ ๋ง์คํฐ์๋ฒ ๋ฐ ์ฌ๋ ์ด๋ธ ์๋ฒ ์คํ ๋ช ๋ น
2. Spark Standalone Mode
์ถ์ฒ : http://spark.apache.org/docs/latest/spark-standalone.html์คํํฌ๋ Mesosํน์ YARN ์์์ ์ํ์ด ๋๋ค. ๊ทธ๋ฌ๋ Standalone๋ชจ๋๋ฅผ ์ง์ํ๊ณ ์๋ค.
์คํ ๋ ์ผ๋ก ๋ชจ๋๋ ํ๋์ ํด๋ฌ์คํฐ์์ ๋ง์คํฐ์ ์์ปค๋ฅผ ์๋์ผ๋ก ์คํ ํ ์ ์๋๋ก ์ ๊ณตํ๋ค.
1. ํด๋ฌ์คํฐ ์๋ ์คํ
1.1 ๋ง์คํฐ ์๋ฒ ์คํํ๊ธฐ./sbin/start-master.sh๋ง์คํฐ๋ฅผ ์คํํ๋ฉด ์คํํฌ๋ ://HOST:PORT์ ํ์์ผ๋ก URL์ ํ๋ฆฐํธํ๋ค.
์ด ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋ง์คํฐ ์๋ฒ์ ์ ๊ทผํ๊ฑฐ๋ SparkContext๋ก ํด๋น ์ ๋ณด๋ฅผ ์ ๋ฌ ํ ์ ์๋ค.
๋ํ ๋ง์คํฐ์ WEB-UI๋ http://localhost:8080์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
1.2 ์ฌ๋ ์ด๋ธ ์์ปค ์คํํ๊ธฐ.
./sbin/start-slave.sh <master-spark-URL>์ฌ๋ ์ด๋ธ ์์ปค๋ฅผ ์ํํ๋ฉด master WEB-UI์์ ์ ๊ท ๋ ธ๋๊ฐ ์ ์๋์์์ ํ์ธํ ์ ์๋ค.
๋ํ CPU์ ๋ฉ๋ชจ๋ฆฌ ์ ๋ณด๋ฑ์ ์ง์ ํ์ธํ ์ ์๋ค.
1.3 ๋ง์คํฐ์ ์ฌ๋ ์ด๋ธ ์ค์ ํ๋ผ๋ฏธํฐ
| Argument | Meaning |
|---|---|
-h HOST, --host HOST | ๋ฆฌ์จํ ํธ์คํธ๋ช ์ ์ค์ ํ๋ค. |
-i HOST, --ip HOST | ๋ฆฌ์จํ ํธ์คํธ ์ด๋ฆ์ ์ค์ ํ๋ค. (deprecated๋จ, -h๋ --host์ด์ฉ) |
-p PORT, --port PORT | ๋ฆฌ์จํ ์๋น์ค์ ํฌํธ๋ฒํธ (๊ธฐ๋ณธ : 7077 ๋ง์คํฐ, worker์ ๋๋ค) |
--webui-port PORT | web UI๋ฅผ ์ํ ํฌํธ (๊ธฐ๋ณธ ๋ง์คํฐ : 8080, ์์ปค : 8081) |
-c CORES, --cores CORES | ์คํํฌ ์ดํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉํ CPU์ฝ์ด์ ์ด ๊ฐ์, ๋จธ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ค์ ๋ ์ ์๋ค. (๊ธฐ๋ณธ : all available) ์ด๊ฒ์ worker์๋ง ์ค์ ํ๋ค. |
-m MEM, --memory MEM | ์คํํฌ ์ดํ๋ฆฌ์ผ์ด์
์ด ์ฌ์ฉํ ์ด ๋ฉ๋ชจ๋ฆฌ ์, ๋จธ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ค์ ๋ ์ ์๋ค. (๊ธฐ๋ณธ : ๋จธ์ ์ด RAM - 1GB) ํ์ : 1000M ํน์ 2G ๋ฑ์ผ๋ก ์ค์ ์ด๊ฒ์ worker์๋ง ์ค์ ํ๋ค. |
-d DIR, --work-dir DIR | ์์
์ ์ฌ์ฉํ ๊ณต๊ฐ๊ณผ job๊ฐ ์ถ๋ ฅํ ๋ก๊ทธ๋ฅผ ์ ์ฅํ ๋๋ ํ ๋ฆฌ (๊ธฐ๋ณธ : SPARK_HOME/work)์ด๋ฉฐ worker์๋ง ์ค์ ํ๋ค. |
--properties-file FILE | ๋ก๋ํ ์ปค์คํ
Spark ํ๋กํผํฐ ํจ์ค๋ฅผ ์ง์ ํ๋ค. (๊ธฐ๋ณธ : conf/spark-defaults.conf) |
2. ํด๋ฌ์คํฐ ๋ฐ์น ์คํฌ๋ฆฝํธ
์คํํฌ๋ฅผ ์คํ ๋ ์ผ๋ก ๋ชจ๋๋ก ์คํฌ๋ฆฝํธ๋ก ์ํํ๊ธฐ ์ํด์๋, conf/slave ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ์ผ์ ์์ฑํด์ผํ๋ค. ์ด๋ spark๋๋ ํ ๋ฆฌ ๋ด๋ถ์ ์กด์ฌํ๋ค.์ด ํ์ผ์๋ ์คํํฌ ์์ปค๊ฐ ์คํํ ๋ชจ๋ ๋จธ์ ์ ํธ์คํธ ๋ช ์ด ๊ธฐ์ ๋์ด์์ด์ผ ํ๋ค.
๋ง์ฝ conf/slave๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด lunch script๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ผ ๋จธ์ ์์ ์ํ๋๋ค. (localhost)
์ด๋ ํ ์คํ ์ ์ํด์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
๋ง์คํฐ ๋จธ์ ์ ๊ฐ ์์ปค ๋จธ์ ์ ssh๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทผํ๋๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ssh๋ฅผ ์ด์ฉํ๋ฉฐ, ์ด๋ฅผ ์ด์ฉํ๋ฉด password์์ด ์๋ฒ๊ฐ access๊ฐ ๊ฐ๋ฅํ๋ค.
๋ง์ฝ password-less์ค์ ์ ํ์ง ์์๋ค๋ฉด SPARK_SSH_FOREGROUND ๋ณ์๊ฐ์ ๊ฐ ์์ปค๋ฅผ ์ํ password๋ฅผ ์ค์ ํ ์ ์๋ค.
์ค์ ์ ์๋ฃํ๊ณ ๋๋ฉด launch๋ stop๋ฅผ ๋ค์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ์ํํ ์ ์๋ค. ์ด ์๋ค์ SPARK_HOME/sbin์ ๋ค์ด์๋ค.
sbin/start-master.sh- ๋ง์คํฐ ์ธ์คํด์ค๋ฅผ ์คํํ๋ค.sbin/start-slaves.sh- conf/slaves ํ์ผ์ ์ง์ ๋ ๋จธ์ ์ ์ฌ๋ ์ด๋ธ๋ฅผ ์คํํ๋ค.sbin/start-slave.sh- ๋จธ์ ๋ด์ ์ฌ๋ ์ด๋ธ ์ธ์คํด์ค๋ฅผ ์คํํ๋ค.sbin/start-all.sh- ์๋จ์ ๊ธฐ์ ํ ๋ชจ๋ ๋ง์คํฐ์ ์ฌ๋ ์ด๋ธ๋ฅผ ์คํํ๋ค.sbin/stop-master.sh- bin/start-master.sh์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์คํํ ๋ง์คํฐ ์ธ์คํด์ค๋ฅผ ์ข ๋ฃํ๋ค.sbin/stop-slaves.sh- conf/slavesํ์ผ์ ์ง์ ๋ ๋จธ์ ์์ ์ฌ๋ ์ด๋ธ๋ฅผ ์ข ๋ฃ์ํจ๋ค.sbin/stop-all.sh- ๋ง์คํฐ์ ์ฌ๋ ์ด๋ธ ๋ชจ๋ ์ข ๋ฃํ๋ค.
ํด๋ฌ์คํฐ์ ์ค์ ์ conf/spark-env.sh์ ์๋ ํ๊ฒฝ ๋ณ์์ ๊ฐ์ ์ค์ ํ์ฌ ์ ํ์ ์ผ๋ก ์ํํ ์ ์๋ค.
์ด ํ์ผ์ conf/spark-env.sh.template๋ฅผ ๋ณต์ฌํ์ฌ ๋ชจ๋ ์์ปค ๋จธ์ ์ ์ค์ ๊ฐ์ ์ง์ ํ๋ฉด ๋๋ค.
ํ๊ฒฝ๋ณ์ ๋ชฉ๋ก :
| Environment Variable | Meaning |
|---|---|
SPARK_MASTER_IP | ํน์ IP์ฃผ์์ ๋ง์คํฐ๋ฅผ ๋ฐ์ธ๋ฉํ๋ค. |
SPARK_MASTER_PORT | ๋ค๋ฅธ ํฌํธ๋ก ๋ง์คํฐ๋ฅผ ์คํํ๋ค. (๊ธฐ๋ณธ : 7077) |
SPARK_MASTER_WEBUI_PORT | ๋ง์คํฐ web UI์ฉ ํฌํธ (๊ธฐ๋ณธ:8080) |
SPARK_MASTER_OPTS | ๋ง์คํฐ์ ์ค์ ๋ ์ต์
๋ค์ ์ค์ ํ๋ค. ํ์ : "-Dx=y" ์ ํ์์ผ๋ก ์ค์ ํ๋ค. ์๋ ๊ฐ๋ฅํ ์ต์ ์ฐธ์กฐ. |
SPARK_LOCAL_DIRS | ์คํํฌ๊ฐ ์ฌ์ฉํ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ๋ค. ์ด๊ฒ์ map ์ถ๋ ฅํ์ผ, RDD ๋ฑ์ ์ ์ฅํ๋ค. ์ฑ๋ฅ์ ์ํด์๋ ์์คํ ๋ด์ ๋ก์ปฌ ๋์คํฌ์ ์ ์ฅํ๋๊ฒ์ด ์ข๋ค. ์ฝค๋ง๋ฅผ ์ด์ฉํ์ฌ ์๋ก๋ค๋ฅธ ๋์คํฌ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋์ดํ ์ ์๋ค. |
SPARK_WORKER_CORES | ์คํํฌ ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋จธ์ ๋ด์์ ์ฌ์ฉํ ์ด ์ฝ์ด์ ๊ฐ์๋ฅผ ์ง์ ํ๋ค. (๊ธฐ๋ณธ๊ฐ : all avaliable cores) |
SPARK_WORKER_MEMORY | ์คํํฌ ์ดํ๋ฆฌ์ผ์ด์
์ด ๋จธ์ ๋ด์์ ์ฌ์ฉํ ์ด ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ง์ ํ๋ค. ํ์ : 1000m, 2G (๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ฉ๋ชจ๋ฆฌ - 1G๋ฅผ ์ค์ ํ๋ค.) ๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ ๊ฐ๋ณ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ spark.executor.memoryproperty๋ฅผ ์ด์ฉํ์ฌ ์ค์ ํ ์ ์๋ค. |
SPARK_WORKER_PORT | ํน์ ํฌํธ๋ก ์คํํฌ ์์ปค๋ฅผ ์คํํ๋ค. (๊ธฐ๋ณธ๊ฐ : random) |
SPARK_WORKER_WEBUI_PORT | ์์ปค์ web UI๋ฅผ ์ํํ ํฌํธ๋ฅผ ์ง์ ํ๋ค. (๊ธฐ๋ณธ๊ฐ : 8081) |
SPARK_WORKER_INSTANCES | ๊ฐ ๋จธ์ ์์ ์ํํ ์์ปค ์ธ์คํด์ค์ ๊ฐ์๋ฅผ ์ง์ ํ๋ค. (๊ธฐ๋ณธ : 1) 1 ์ด์์ ์ค์ ํ ์ ์์ผ๋ฉฐ, ๋งค์ฐ ํฐ ๋จธ์ ์์ ์ด์ฉํ๊ฑฐ๋, ๋ณต์๊ฐ์ ์์ปค ํ๋ก์ธ์ค๋ฅผ ๋๊ณ ์ ํ ๋ ์ด ๊ฐ์ ์ฆ๊ฐ ์ํฌ ์ ์๋ค. ์ด ๊ฐ์ ๋ณ๊ฒฝํ๊ฒฝ์ฐ์๋ SPARK_WORKER_CORES ๋ฅผ ํจ๊ป ํ์ธํ ํ์๊ฐ ์๋ค. ์ด๊ฒ์ ๊ฐ ์์ปค์ ์์ปค๋ฅผ ๋ช ์์ ์ผ๋ก ์ ํํ๊ธฐ ๋๋ฌธ์ด๋ค. ํน์ ๊ฐ ์์ปค๋ ๋ชจ๋ ์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. |
SPARK_WORKER_DIR | ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ ์ํํ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ๋ค. ์ด๊ณณ์๋ ๋ก๊ทธ์ ์์ปค ์์ ๊ณต๊ฐ์ผ๋ก ์ด์ฉ๋๋ค. (๊ธฐ๋ณธ : SPARK_HOME/work) |
SPARK_WORKER_OPTS | ์์ปค์ ๋ํ ์ค์ ๊ฐ์ ์ง์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค. ํ์ : "-Dx=y" ์๋ ์ต์ ์ ์ฐธ์กฐํ์. |
SPARK_DAEMON_MEMORY | ์คํํฌ ๋ง์คํฐ์ ์์ปค ๋ฐ๋ชฌ ์์ฒด์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํ๋ค. (๊ธฐ๋ณธ : 1g) |
SPARK_DAEMON_JAVA_OPTS | JVM์ต์
์ผ๋ก ์คํํฌ ๋ง์คํฐ์ ์์ปค ๋ฐ๋ชฌ ์์ฒด์ ์ค์ ํ๋ ์ต์
๊ฐ์ด๋ค. ํ์ : "-Dx=y"์ ํํ์ด๋ค. |
SPARK_PUBLIC_DNS | public DNS๋ช ์ ์ง์ ํ๋ค. |
SPARK_MASTER_OPTS ์ต์ :
| Property Name | Default | Meaning |
|---|---|---|
spark.deploy.retainedApplications | 200 | ๋์คํ๋ ์ดํ ์๋ฃ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด ๊ฐ์๋ฅผ ์ง์ ํ๋ค. ์ค๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์ UI์์ ์ด ์ ํ์ ๊ฑธ๋ ค ๋ํ๋์ง ์์ ๊ฒ์ด๋ค. |
spark.deploy.retainedDrivers | 200 | ๋์คํ๋ ์ดํ ์๋ฃ๋ ๋๋ผ์ด๋ฒ๋ค์ ์ต๋ ๊ฐ์๋ฅผ ์ง์ ํ๋ค. ์ค๋๋ ๋๋ผ์ด๋ฒ๋ UI์์ ์ด ์ ํ์ ๊ฑธ๋ ค ๋ํ๋์ง ์์ ๊ฒ์ด๋ค. |
spark.deploy.spreadOut | true | ์คํ ๋ ์ผ๋ก ํด๋ฌ์คํฐ ๋งค๋์ ๋ ๋ ธ๋๋ค๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ฐํ๊ฒ ๋ ๊ฒ์ด๋ค. ์๋๋ฉด ๊ฐ๋ฅํ๋ฉด ๋ช๊ฐ์ ๋ ธ๋๋ค๋ก ํตํฉํด์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ๋ถ์ฐ ํ๋ ์์ ์ ๋ณดํต HDFS์์ ๋ ๋ณ์ ๋ฐ์ดํฐ ๋ก์ปฌ๋ฆฌํฐ๋ฅผ ์ํด ์ด์ฉ๋๋ค. ๊ทธ๋ฌ๋ ํตํฉ ์์ ์ ๊ณ์ฐ์ ๋ ์ง์ค์ ์ธ ์์ ์ ์ํด์ ํจ๊ณผ์ ์ด๋ค. |
spark.deploy.defaultCores | (infinite) | ๋ง์ฝ spark.cores.max๋ฅผ ์ง์ ํ์ง ์์๊ฒฝ์ฐ๋ผ๊ณ ํ๋ฉด ์คํํฌ ์คํ ๋ ์ผ๋ก ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ํ ๋นํ ๊ธฐ๋ณธ ์ฝ์ด์๋ฅผ ์ง์ ํ๋๋ก ํ๋ค. ์ค์ ๋์ง ์์๋ค๋ฉด ์ดํ๋ฆฌ์ผ์ด์ ์ ํญ์ ๋ชจ๋ ๊ฐ๋ฅํ ์ฝ์ด๋ฅผ spark.cores.max์ ํ ๋นํ๋ค. ๊ณต์ ๋ ํด๋ฌ์ค์ ์ด ๊ฐ์ ๋ฎ๊ฒ ์ง์ ํ์ฌ ์ ์ฒด ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉ์๊ฐ ์ก์๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ด์ฉํ ์ ์๋ค. |
spark.worker.timeout | 60 | ๋ง์ฝ ๋ง์คํฐ๊ฐ ํํธ๋นํธ๋ฅผ ์ํํ์ง ๋ชปํ๊ฒฝ์ฐ ์ผ๋ง์ ์๊ฐ์ด ์ง๋๋ฉด ์์ปค๊ฐ ์ ์ค ๋์๋ค๋ ๊ฒ์ ํ์ ํ ์ง ์ง์ ํ๋ ์๊ฐ์ด๋ค. (์ด๋จ์) |
| Property Name | Default | Meaning |
|---|---|---|
spark.worker.cleanup.enabled | false | worker์ /application ๋๋ ํ ๋ฆฌ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํด๋ฆฐ์ ํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค. ์ด๊ฒ์ ์ค์ง standalone๋ชจ๋์์๋ง ํจ๊ณผ๊ฐ ์๋ ์ค์ ๊ฐ์ด๋ค. WARN์ ๋ค๋ฅด๊ฒ ๋์ํ๋ค. ์ด๊ฒ์ ์ค์ง ์ ์ง๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ ํ ๋ฆฌ๋ง์ ํด๋ฆฐ์ ํ๊ฒ ๋๋ค. |
spark.worker.cleanup.interval | 1800 (30 minutes) | ๋ก์ปฌ๋จธ์ ์์ ์ค๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ ๋๋ ํ ๋ฆฌ๋ฅผ ํด๋ฆฐ์ ํ ์ธํฐ๋ฒ ์๊ฐ์ ๋ํ๋ธ๋ค. ์ด๋จ์์ด๋ค. |
spark.worker.cleanup.appDataTtl | 7 * 24 * 3600 (7 days) | ๊ฐ ์์ปค์์ ์ ์งํด์ผํ ์์ ๋๋ ํ ๋ฆฌ์ TTL์ ์ง์ ํ๋ค. ์ด๋จ์์ด๋ฉฐ ์ด๊ฒ์ Time To Live์ด๋ฉฐ, ๊ฐ๋ฅํ ๋์คํฌ์ ์ฉ๋์ ์์กดํ๊ฒ ๋๋ค. ์ดํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ์ jars๋ค์ด ์ดํ๋ฆฌ์ผ์ด์ ์ํฌ ๋๋ ํ ๋ฆฌ์ ๋ค์ด๋ก๋ ๋๋ค. ์๊ฐ์ด ์ง๋๋ฉด work dirs๋ค์ ๋น ๋ฅด๊ฒ ๋์คํฌ ๊ณต๊ฐ์ ์ฐจ์งํด ๋ฒ๋ฆฌ๊ฒ ๋๋ค. ํนํ job๋ค์ ๋งค์ฐ ๋น๋ฒํ๊ฒ ์คํํ๋ฉด ๋ง์ด๋ค. |
3. ์ดํ๋ฆฌ์ผ์ด์ ์์ Cluster๋ก ์ปค๋ฅํ ํ๊ธฐ
์คํํฌ ํด๋ฌ์คํฐ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํํ๋ ๊ฒ์ ๋จ์ํ spark://IP:PORT ๋ฅผ SparkContext constructor์ ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ๊ฐ๋ฅํ๋ค.์คํํฌ ์์ด ํด๋ฌ์คํฐ์ ์ํธ ์ธํฐ๋ ์ ํ๋ ๊ฒ์ ๋ค์ ์ปค๋งจ๋๋ก ๊ฐ๋ฅํ๋ค.
./bin/spark-shell --master spark://IP:PORT๋ํ ์ต์ ์ ์ ๋ฌ ํ ์ ์์ผ๋ฉฐ --total-executor-cores <numCores> ๋ฅผ ์ง์ ํ์ฌ ์คํํฌ ์์ด ํด๋ฌ์คํฐ์์ ์ฌ์ฉํ ์ฝ์ด์ ๊ฐ์๋ฅผ ์ค์ ํ๊ฒ ํ ์ ์๋ค.
4. Spark Application๋ค ๋ฐ์นญํ๊ธฐ.
spark-submit ์คํฌ๋ฆฝํธ๋ ์ง๊ด์ ์ผ๋ก ์ปดํ์ผ๋ ์คํํฌ ์ดํ๋ฆฌ์ผ์ด์ ์ ํด๋ฌ์คํฐ๋ก ์๋ฐ ํ๊ฒ ํ ์ ์๋ค.standalone ํด๋ฌ์คํฐ๋ค์์๋ ํ์ฌ ์ ๊ณต๋๋ 2๊ฐ์ง ๋ชจ๋๊ฐ ์๋ค. client๋ชจ๋์์ ๋๋ผ์ด๋ฒ๋ ๋์ผํ ํ๋ก์ธ์ค์์ ๋ฐ์น ๋๋ฉฐ, ํด๋ผ์ด์ธํธ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์๋ฐ์ด ๋๋ค. cluster๋ชจ๋์์ ๋๋ผ์ด๋ฒ๋ ํด๋ฌ์คํฐ๋ด์ ํ๋์ ์์ปค ํ๋ก์ธ์ค๋ค์ ํ๋๋ก ๋ถํฐ ๋ฐ์น๋๋ฉฐ, ํด๋ผ์ด์ธํธ ํ๋ก์ธ์ค๋ ๋ฐ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ฐ ์์ ์ ๋ํ ์๋ต์ ์ํํ๋ค. ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๊ธฐ ๊น์ง ๋๊ธฐํ์ง ์๊ณ ์ํ๋๋ค.
๋ง์ฝ ์ดํ๋ฆฌ์ผ์ด์ ์ด Spark ์๋ฐ์ ํตํด์ ๋ฐ์น๋๋ฉฐ ์ดํ๋ฆฌ์ผ์ด์ jar๋ ์๋์ ์ผ๋ก ๋ชจ๋ ์์ปค ๋ ธ๋๋ก ๋ฐฐํฌ๋๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์ ์์กด๋ ๋ค๋ฅธ jar๋ค์ --jars์ต์ ์ ์ฝค๋ง๋ก ๋ถ๋ฆฌํ์ฌ (ex --jars jar1,jar2) ์ฐธ์กฐ ๊ฐ๋ฅํ๋ค.
์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์ ํน์ ์คํ ํ๊ฒฝ์ ์ปจํธ๋กค ํ๋ ๊ฒ์ Spark Configuration์ ์ฐธ์กฐํ์.
์ถ๊ฐ์ ์ผ๋ก ์คํ ๋ ์ผ๋ก ํด๋ฌ์คํฐ ๋ชจ๋๋ 0์ด ์๋ ๊ฐ์ผ๋ก ์ข ๋ฃ ๋์์๋ ์๋์ผ๋ก ์ฌ ์์ ํ๋ ๋ชจ๋๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ด์ฉํ๊ธฐ ์ํด์๋ --superviseํ๋์ค์์ spark-submit๋ฅผ ์ ๋ฌํ๋ฉด ๋๋ฉฐ, ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์คํ์์ ์ ๋ฌ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋๋ ์คํจ๋๋ฌธ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํ๊ณ ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ํํ๋ฉด ๋๋ค.
./bin/spark-class org.apache.spark.deploy.client kill <master url> <driver ID>๋๋ผ์ด๋ฒ ์์ด๋๋ http://<master url>:8080์์ web UI๋ฅผ ์ด์ฉํ์ฌ ํด๋น ์์ด๋๋ฅผ ์ฐพ์ ์ ์๋ค.
5. Resource Scheduling
standalone ํด๋ฌ์คํฐ ๋ชจ๋์์๋ ํ์ฌ ๋จ์ FIFO ์ค์ผ์ค๋ฌ๋ง์ ์ ๊ณตํ๊ณ ์๋ค.๊ทธ๋ฌ๋ ๋ณต์์ ๋์ ์ด์ฉ์๋ฅผ ํ์ฉํ๊ธฐ ์ํด์ ๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ ์ต๋ ๋ฆฌ์์ค์ ๊ฐ์๋ฅผ ์กฐ์ ํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ ํด๋ฌ์คํฐ ๋ด์ ๋ชจ๋ ์ฝ์ด๋ฅผ ํ์๋ก ํ๊ฒ ๋์ง๋ง ํ๋ฒ์ ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ ๋ง์ ์คํํ ๋์๋ง ์ ํจํ๋ค. ์ด ์ค์ ์ spark.cores.max ๋ฅผ SparkConf๋ด์์ ์ง์ ํด์ค ์ ์๋ค.
์์ )
val conf = new SparkConf()์ถ๊ฐ์ ์ผ๋ก spark.deploy.defaultCores๋ฅผ ํด๋ฌ์คํฐ ๋ง์คํฐ ํ๋ก์ธ์ค์์ ์ค์ ํ ์ ์๋ค.
.setMaster(...)
.setAppName(...)
.set("spark.cores.max", "10")
val sc = new SparkContext(conf)
์ด ์ค์ ์ conf/spark-env.sh์์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์๋ค.
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=<value>"์ด๊ฒ์ ๊ณต์ ํด๋ฌ์คํฐ ์์์ ์ ์ฉํ๋ค. ์ฌ์ฉ์๊ฐ ๊ฐ์ธ์ ์ผ๋ก ์ต๋์์ cores๋ฅผ ์ง์ ํ์ง๋ ์์๋ ๋ง์ด๋ค.
6. Monitoring and Logging
Spark ์คํ ๋์ผ๋ก ๋ชจ๋๋ ์น ๊ธฐ๋ฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ํด๋ฌ์คํฐ ๋ชจ๋ํฐ๋ง์ ์ํํ ์ ์๋๋ก ํ๋ค. ๋ง์คํฐ์ ๊ฐ ์์ปค๋ค์ ๊ฐ์์ web UI๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ฐ ํด๋ฌ์คํฐ์ ์ก๋ค์ ๋ณผ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์น UI์ 8080์ ํตํด์ ์ ๊ทผํ ์ ์๋ค. ํฌํธ๋ ์ค์ ํ์ผ์์ ๋ณ๊ฒฝํ๊ฑฐ๋, ์ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด์ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.์ถ๊ฐ์ ์ผ๋ก ๊ฐ ์ก์ ์์ธ ๋ก๊ทธ๋ ๊ฐ ์ฌ๋ ์ด๋ธ ๋ ธ๋์ ์ํฌ ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก SPARK_HOME/work๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๋ค. ๋ํ ์ก๋ค์ ๋ํด์ 2๊ฐ์ ํ์ผ์ด ์กด์ฌํ๋ฉฐ stdout๊ณผ stderr๋ก ์ ์ฅ์ด ๋๋ค.
7. Running Alongside Hadoop
์กด์ฌํ๋ ํ๋ก์ ์ด์ฉํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์๋ ๋จ์ํ ๋์ผํ ๋จธ์ ์์ ๋ถ๋ฆฌ๋ ์๋น์ค๋ก ์ด์ฉํ๋ฉด ๋๋ค. Hadoop ๋ฐ์ดํฐ๋ฅผ ์คํํฌ์์ ์์ธ์ค ํ๊ธฐ ์ํด์๋ hdfs://URL (๋ณดํต : hdfs://<namenode>:9000/path ์ด๋ค. ) ๋ฐ๋๋ก ์์ ผ ๋ค๋ฅธ ์๋ฒ์์ ํ๋ก๊ณผ ์ฐ๋ํ ์ ์๋ค. ์ด๋์๋ ๋คํธ์ํฌ๋ฅผ ํตํด์ ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ก์ปฌ ์์น์ ๋ฐ์ดํฐ ์์ธ์ค์ ๋นํด์ ์ฑ๋ฅ์ ๋จ์ด์ง๋ค.8. Configuring Ports for Network Security
์คํํฌ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ง์ด ๋ฐ์ ์ํจ๋ค. ๋ํ ์ด๋ ํ ์์คํ ์์๋ ํ์ด์ด์ ์ค์ ์ ์ด์ฉํ๊ธฐ ์ํด์ ์ ํ๋ ์๊ตฌ์ฌํญ์ ๊ฐ์ง๊ธฐ๋ ํ๋ค. ์ด๋ฌํ ์ค์ ์ ํ์ธํ๋ ค๋ฉด ๋ค์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๊ฐ์. http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security9. High Availability
๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ๋์ผ๋ก ์ค์ผ์ค๋ง ํด๋ฌ์คํฐ๋ Worker์ ์คํจ๋ค์ ๋ํด์ ํ๋ณต๋ ฅ์ด ์๋ค. ๊ทธ๋ฌ๋ ์ค์ผ์ค๋ฌ๋ Master๋ฅผ ์ด์ฉํ์ฌ ์ค์ผ์ค๋ง ๊ฒฐ์ ์ ๋ด๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ ๋จ์ผ ์คํจ์ง์ (SPOF)๊ฐ ๋๋ค. ๋ง์ฝ ๋ง์คํฐ๊ฐ ํฌ๋์ฌ๋๋ฉด, ์ด๋ ํ ์๋ก์ด ์ดํ๋ฆฌ์ผ์ด์ ๋ ์์ฑ๋์ง ์๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ดใ ํด์ 2๊ฐ์ high availability ์คํค๋ง๋ฅผ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํ๋ค.10. Standby Masters with ZooKeeper
Overviewzookeeper์ ์ฃผ ์ฉ๋๋ ๋ฆฌ๋์ ์ ์ถ๊ณผ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค. ์ฌ์ฉ์๋ ๋ณต์๊ฐ์ ๋ง์คํฐ๋ฅผ ํด๋ฌ์คํฐ์ ์ค์ ํ์ฌ ๋์ผํ ZooKeeper์ธ์คํด์ค์ ์ฐ๊ฒฐํ ์ ์๋ค. ํ๋๋ "leader"๋ก ์ ์ถ๋๊ณ ๋๋จธ์ง๋ standby mode๋ก ๋ง์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ค. ๋ง์ฝ ํ์ฌ leader๊ฐ ์ฃฝ์ผ๋ฉด, ๋ค๋ฅธ๊ฒ์ด Master๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์คํฐ์ ์ํ๋ฅผ ๋ณต๊ตฌํ๊ฒ ๋๊ณ ๋์ผํ ์ค์ผ์ค๋ง์ ๋ค์ ์ํํ๊ฒ ๋๋ค.
์ ์ฒด ๋ณต๊ตฌ ํ๋ก์ธ์ค๋ ์๋ง๋ ์ฒ์ ๋ง์คํฐ๊ฐ ์ฃฝ๊ณ ๋์ ๋ถํฐ ์ฝ 1 ~ 2๋ถ ์ ๋ ์์๋๋ค.
์ด ๋๋ ์ด๋ ์๋ก์ด ์ดํ๋ฆฌ์ผ์ด์ ์ค์ผ์ค๋ง์๋ง ์ํฅ์ ์ค๋ค. ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ ๋ง์คํฐ failover๋ฅผ ์ํํ๋ ๋์ ๊ณ์ํด์ ์ํ๋๊ณ ์๋ ์ํ๊ฐ ๋๋ค.
Zookeeper์ ๋ํด์ ๋ ๋ง์ ๊ฒ์ ๋ณด๋ ค๋ฉด http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html ์ ์ฐธ์กฐํ์.
Configuration
์คํํฌ ๋ณต๊ตฌ ๋ชจ๋๋ ๋ค์๊ณผ ๊ฐ์ด spark-env์คํฌ๋ฆฝํธ ๋ด์ SPARK_DAEMON_JAVA_OPTS ์ ์ค์ ํ ์ ์๋ค.
| System property | Meaning |
|---|---|
spark.deploy.recoveryMode | zookeeper๋ฅผ standby ๋ชจ๋๋ก ์ค์ ํ๋๋ก ํ๋ค. (๊ธฐ๋ณธ : NONE) |
spark.deploy.zookeeper.url | ZooKeeper ํด๋ฌ์คํฐ url์ ์ค์ ํ๋ค. ์) 192.168.1.100:2181,168.1.101:2181 |
spark.deploy.zookeeper.dir | The directory in ZooKeeper to store recovery state (default: /spark). |
Details
์ฃผํคํผ ์ค์ ์ ์๋ฃํ๊ณ ๋๋ฉด high availability๋ฅผ ๊ธฐ๋ํ ์ ์๋ค. ๋จ์ํ ๋ณต์๊ฐ์ ๋ง์คํฐ๋ฅผ ์๋ก๋ค๋ฅธ ๋ ธ๋์์ ์คํํ๊ณ ๋์ผํ ์ฃผํคํผ ์ค์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋๋ค. (ZooKeeper URL๊ณผ ๋๋ ํ ๋ฆฌ ์ค์ ). ๋ง์คํฐ๋ค์ ์ธ์ ๋ ์ง ์ถ๊ฐ๋ ์ ๊ฑฐ ํ ์ ์๋ค.
์๋ก์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์ผ์ค ํ๊ฑฐ๋ ํด๋ฌ์คํฐ์ worker๋ฅผ ์ถ๊ฐํ ๋์๋ ํ์ฌ Master์ IP๋ฅผ ์์์ผ ํ๋ค. ์ด๊ฒ์ ๋จ์ํ ๋ง์คํฐ ๋ฆฌ์คํธ์์ ํ๋์๋ค๊ฐ ์ ๋ฌ ํ๋ ๊ฒ์ผ๋ก ๊ฐ๋ฅํ๋ค. ์๋ฅผ ๋ค์ด SparkContext๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ง์คํฐ์ ์์น๋ฅผ ํฌ์ธํธ ํ ์ ์๋ค. spark://host1:port1,host2:port2 ๋ก ์ง์ ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด SparkContext๋ ๋๊ฐ์ ๋ง์คํฐ์ ์ ๊ทผ์ ์๋ํ๋ค. host1์ด ๋ด๋ ค๊ฐ ์์ผ๋ฉด ์ด ์ค์ ์ ์๋ก์ด ๋ฆฌ๋๋ฅผ ์ฐพ์ ๊ฒ์ด๋ฉฐ ์ด๊ฒ์ด host2๊ฐ ๋จ์ ์๋ ค ์ค ๊ฒ์ด๋ค.
"registering with a Master"๊ณผ normal operation์ฌ์ด์๋ ์ค์ํ ๊ตฌ๋ณ ๋๋ ์ ์ด ์๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ ์์ปค๊ฐ ์คํ๋ ๋ ํ์ฌ์ ๋ง์คํฐ๋ฅผ ์ฐพ๊ฑฐ๋ ๋ฑ๋กํ๋ ์์ ์ด ํ์ํ๋ค. ์ด ์์ ์ด ํ๋ฒ ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๊ณ ๋๋ฉด ์ด ๋ด์ฉ์ Zookeeper์ ์ ์ฅํ๋ค. ๋ง์ฝ failover๊ฐ ๋ฐ์ํ๋ฉด ์๋ก์ด ๋ฆฌ๋๊ฐ ๋ชจ๋ ๋ฑ๋ก๋ ์ดํ๋ฆฌ์ผ์ด์ ๋ค๊ณผ Workers์ ์ ๊ทผ์ ์๋ํ๋ฉฐ, ์ดํ ๋ชจ๋ ํด๋ฌ์คํฐ์๊ฒ ์๋ก์ด ๋ฆฌ๋๋ฅผ ์๋ฆฐ๋ค.
์ด๋ฌํ ์์ฑ์ผ๋ก ์ธํด์ ์๋ก์ด ๋ง์คํฐ๋ ์ธ์ ๋ ์ง ์์ฑ๋ ์ ์๋ค, ๊ณ ๋ฏผํด์ผํ ๊ฒ์ ์ค์ง ์๋ก์ด ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์์ปค๋ค์ด ์๋ก์ด ๋ฆฌ๋๋ฅผ ์ฐพ๊ณ , ์ด๋ฅผ ๋ฑ๋กํ๋ ์์ ๋ง ํ๋ฉด ๋๋ค. ํ๋ฒ ๋ฑ๋กํ๋ฉด ์ธ์ ๋ ์ง ์ด์ฉํ ์ ์๋ค.
11. Single-Node Recovery with Local File System
Overview์ฃผํคํผ๋ high availability๋ฅผ ์ํ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ๊ทธ๋ฌ๋ ๋ง์คํฐ๊ฐ ๋ค์ด๋์์๋ ๋จ์ง ๋ฆฌ์คํํธ๋ฅผ ํ๊ธฐ๋ฅผ ์ํ ์ ์๋ค. FILESYSTEM๋ชจ๋๋ ์ด๋ฌํ ์์ ์ ํ ์ ์๋ค. ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์์ปค๊ฐ ๋ฑ๋ก๋ ๋ ์ ๊ณต๋ ๋๋ ํ ๋ฆฌ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ , ์ด๊ฒ์ ๋ง์คํฐ ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์คํํธ ๋ ๋ ์ด์ฉ ํ ์ ์๋ค.
Configuration
๋ณต๊ตฌ ๋ชจ๋๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ํด์๋ spark-env ์ค์ ํ์ผ์ SPARK_DAEMON_JAVA_OPTS์ ์ง์ ํ ์ ์๋ค.
| System property | Meaning |
|---|---|
spark.deploy.recoveryMode | FILESYSTEM์ ์ค์ ํ์ฌ ๋จ์ผ ๋
ธ๋ ๋ณต๊ตฌ ๋ชจ๋๋ฅผ ์คํํ ์ง ์ง์ ํ๋ค. (๊ธฐ๋ณธ : ใ NONE) |
spark.deploy.recoveryDirectory | Spark๊ฐ ๋ณต๊ตฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์ ๊ทผํ ์์๋ ์ํ๋ฅผ ์ ์ฅํ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ๋ค. |
- This solution can be used in tandem with a process monitor/manager like monit, or just to enable manual recovery via restart.
- While filesystem recovery seems straightforwardly better than not doing any recovery at all, this mode may be suboptimal for certain development or experimental purposes. In particular, killing a master via stop-master.sh does not clean up its recovery state, so whenever you start a new Master, it will enter recovery mode. This could increase the startup time by up to 1 minute if it needs to wait for all previously-registered Workers/clients to timeout.
- While it’s not officially supported, you could mount an NFS directory as the recovery directory. If the original Master node dies completely, you could then start a Master on a different node, which would correctly recover all previously registered Workers/applications (equivalent to ZooKeeper recovery). Future applications will have to be able to find the new Master, however, in order to register.



1 ๊ฐ์ ๋๊ธ:
Write ๊ฐ์ ๋๊ธ์ค๋ช ํด์ฃผ์ ๋๋ก ๋ฐ๋ผํ๋๋ฐ ํด๋ฌ์คํฐ ์๋ ์คํ ์
Reply์๋์ ๊ฐ์ด noClassDefFound ์๋ฌ๊ฐ ๋ฉ๋๋ค.
ํน์ ๋์ผ์ฆ์ ์์ผ์ จ๋์?
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/Logger
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
EmoticonEmoticon