## Requirement
- Window 10 또는 그 이상 버전
## WSL 2 - Ubuntu 20 LTS 설치
Apache Zeppelin은 Mac OS와 Ubuntu를 지원한다. 평소에는 이런 경우 그냥 AWS로 인스턴스를 생성하지만, 지금 일하는 회사에서는 DB 방화벽이 IP 차단을 하기 때문에 이 방법은 쓸 수 없다. 팀에서 정식 툴로 도입한다면 인프라 관리하는 부서에 요청해서 화이트리스트에 등록하면 되지만, 일단은 PoC 느낌으로 나 혼자 사용할 것이니 그냥 WSL 2로 Ubuntu를 깔아서 사용하기로 하였다.
### WSL 2 설치
```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2
```
- Powershell을 관리자 권한으로 실행한 다음 위의 코드를 입력
### Window Store에서 Ubuntu 20 LTS 설치
![[Pasted image 20240620155530.png]]
## WSL 2 Ubuntu에 Docker & Docker-compose 설치
```shell
sudo apt update
sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER
docker --version
sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
# 출처 : https://iseunghan.tistory.com/408
```
- 위 코드를 복사-붙여넣기
- 붙여넣기는 마우스 오른쪽 클릭으로 가능하다
## Docker로 Apache Zeppelin 설치
```bash
docker run -d -u $(id -u) -p 8000:8080 -v /mnt/disk1/notebook:/notebook \
-v /usr/lib/spark-current:/opt/spark -v /mnt/disk1/flink-1.12.2:/opt/flink -e FLINK_HOME=/opt/flink \
-e SPARK_HOME=/opt/spark -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.11.1
```
- 위 코드는 [공식 홈페이지 설치 페이지](https://zeppelin.apache.org/docs/latest/quickstart/install.html#using-the-official-docker-image)의 코드와 거의 비슷하다. 다만, 우리는 클라우드 환경에서 zeppelin을 실행하는 게 아니므로 몇 가지 옵션을 추가 했다.
- `-d` : 백그라운드로 실행
- `--rm (삭제)` : 컨테이너 정지시 자동 삭제 => 전원 끌 때마다 설정이 초기화
- `8000:8080` : 포트를 8000로 변경한다. 8080은 너무 많이 쓰이는 포트다.
![[Pasted image 20240620161749.png]]
- 정상적으로 실행됐는지 확인하기 위해 http://localhost:8000/ 를 접속해보자. 위와 같은 화면이 나오면 정상적으로 실행된 것이다.
## Apache Zeppelin 환경 설정
### Spark 버전 체크 설정 끄기
![[Pasted image 20240620165457.png]]
![[Pasted image 20240620165601.png]]
![[Pasted image 20240620165627.png]]
- 디폴트로 Spark 버전 체크 설정이 되어 있는데, 정작 공식 홈페이지의 코드로 설치를 하면 버전이 안 맞아서 에러가 뜬다. 그러니 버전 체크 설정을 끄자.
### 리소스 포크 파일 삭제
![[Pasted image 20240620173432.png]]
```shell
docker exec -it -u root zeppelin /bin/bash
cd /opt/zeppelin/interpreter/spark/
ls -a
```
- 위 코드를 실행해서 컨테이너 안을 확인해보면 위와 같이 `._`로 시작하는 파일이 존재한다. 메타 정보를 저장한 파일로 추정된다. 나 같은 경우, 원래 읽어야 하는 파일 대신에 해당 파일을 읽어서 에러가 계속 떴다. 그러니 아래의 코드로 삭제하자
```shell
rm /opt/zeppelin/interpreter/spark/._spark-interpreter-0.11.1.jar
rm /opt/zeppelin/interpreter/spark/scala-2.12/._spark-scala-2.12-0.11.1.jar
```
### 실행 결과 확인
![[Pasted image 20240620165357.png]]
```
%spark
sc.version;
```
- 노트북을 생성한 다음, 위 코드를 실행한 다음 제대로 실행되는지 확인한다.