Spark 서버 클러스터를 생성하기 전에 로컬(테스트용) 서버를 생성합니다.
Amazon Linux AMI 를 생성하고, 인스턴스 유형은 t2.medium, SSD 용량은 20G 로 합니다.
인스턴스가 생성되면 아래 명령을 실행해준다.
sudo yum -y update
java -version
sudo yum -y install java-1.8.0
sudo yum -y remove java-1.7.0-openjdk
sudo yum list installed | grep python3
sudo yum -y install python36
python3 -V
https://spark.apache.org/downloads.html 에서 다운받아 설치한다.
cd ~/
mkdir spark
cd spark
wget http://mirror.navercorp.com/apache/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz
tar xvfz spark-2.3.0-bin-hadoop2.7.tgz
rm spark-2.3.0-bin-hadoop2.7.tgz
환경설정을 수정한다.
vi ~/.bashrc
......
export SPARK_HOME=/home/ec2-user/spark/spark-2.3.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
......
source ~/.bashrc
정상 작동하는지 확인한다.
$ spark-shell
2018-05-01 00:14:27 WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://ip-172-31-18-241.ap-northeast-2.compute.internal:4040
Spark context available as 'sc' (master = local[*], app id = local-1525133673971).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.3.0
/_/
Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_171)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
:q
를 입력하면 종료할 수 있다.
pip3 를 설치한다.
sudo easy_install-3.6 pip
pyspark 를 설치한다.
sudo pip-3.6 install pyspark
sudo pip-3.6 install jupyter
$ vi ~/.bashrc
......
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=ipython3
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
......
$ source ~/.bashrc
정상적으로 실행되는지 확인한다.
$ jupyter notebook
[I 00:28:55.826 NotebookApp] Writing notebook server cookie secret to /home/ec2-user/.local/share/jupyter/runtime/notebook_cookie_secret
[I 00:28:56.041 NotebookApp] Serving notebooks from local directory: /home/ec2-user/spark
[I 00:28:56.041 NotebookApp] 0 active kernels
[I 00:28:56.041 NotebookApp] The Jupyter Notebook is running at:
[I 00:28:56.041 NotebookApp] http://localhost:8888/?token=dfe9e728a4ed920af1f0a9ddcc462752f8b6f747912caa38
[I 00:28:56.041 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 00:28:56.041 NotebookApp] No web browser found: could not locate runnable browser.
[C 00:28:56.042 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=dfe9e728a4ed920af1f0a9ddcc462752f8b6f747912caa38
^C[I 00:29:07.489 NotebookApp] interrupted
Serving notebooks from local directory: /home/ec2-user/spark
0 active kernels
The Jupyter Notebook is running at:
http://localhost:8888/?token=dfe9e728a4ed920af1f0a9ddcc462752f8b6f747912caa38
Control-C
를 두번 입력해서 노트북을 종료한다.
노트북을 외부에서 접속 가능하도록 수정한다.
$ jupyter notebook --generate-config
Writing default config to: /home/ec2-user/.jupyter/jupyter_notebook_config.py
아래 명령으로 외부에서 접속 가능하도록 수정한다. (!!!!!! 아래 명령은 모든 아이피에서 접속가능하도록 설정한다. 방화벽 등 기타 다른 방법으로 접속을 제한해야 한다. !!!!!!)
$ vi /home/ec2-user/.jupyter/jupyter_notebook_config.py
......
c.NotebookApp.ip = '*'
......
c.NotebookApp.port = 8888
......
AWS 콘솔에서 로컬(테스트용) 서버 인스턴스 보안그룹에 접속할 아이피(PC 아이피) 및 포트(8888) 를 열어준다.
아래 명령을 실행한다.
jupyter notebook
브라우저에서 확인한다.
http://<로컬서버아이피>:8888/?token=91fb1aa750ade184a9c04335f20694cfb37a2a971bd3a
cd ~/
nohup jupyter notebook &
cat nohup.out
노트북에 아래 코드를 입력하고 실행한다. 에러없이 실행되면, pyspark 가 정상작동함을 확인할 수 있다.
import pyspark
sc = pyspark.SparkContext.getOrCreate()
sc.stop()
$ vi ~/.bashrc
......
export AWS_ACCESS_KEY_ID=액세스키
export AWS_SECRET_ACCESS_KEY=보안액세스키
export AWS_DEFAULT_REGION=ap-northeast-2
......
$ source ~/.bashrc
cd ~/
mkdir hadoop
cd hadoop
wget http://mirror.navercorp.com/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz
tar xvfz hadoop-2.7.6.tar.gz
rm hadoop-2.7.6.tar.gz
환경설정을 수정한다.
$ vi ~/.bashrc
......
export HADOOP_HOME=/home/ec2-user/hadoop/hadoop-2.7.6
export PATH=$HADOOP_HOME/bin:$PATH
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
......
$ source ~/.bashrc