데이터 엔지니어링 줌 캠프 PJT를 진행하면서 관련된 내용을 정리하고자 합니다.
프로젝트의 코드는 github에서 확인할 수 있습니다.
https://github.com/mjs1995/data-engineering-zoomcamp/tree/main/01_basics_n_setup
GCP 환경 세팅
프로젝트 이름에 dtc-de를 입력하고 프로젝트를 생성해 줍니다.
SSH 세대
ssh-keygen을 이용해서 키를 생성해줍니다.
# ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C 사용자 이름 -b 2048
ssh-keygen -t rsa -f ~/.ssh/gcp -C mjs -b 2048
컴퓨팅 엔진
gcp 내에서 Compute Engine API를 사용등록해줍니다.
위에서 만든 gcp.pub의 ssh-rsa 코드 키값을 metadata에 추가해줍니다.
고양이 gcp.pub
VM 인스턴스
vm 인스턴스를 생성해줍니다.
이름과 리전 및 영역을 선택해주고 머신을 e2-standard-4로 선택해줍니다.
부팅 디스크를 Ubuntu로 변경해줍니다.
생성된 VM을 터미널에서 연결해봅니다.
ssh -i ~/.ssh/gcp {ssh키 생성시 입력한 ID}@{VM 생성시 외부IP}
htop 명령어를 통해서 연결을 확인합니다.
htop
gcloud 명령어를 통해서 gcp에 잘 연결되었는지 확인합니다.
gcloud --version
아나콘다 설치
vm에 연결된 뒤에 아나콘다를 설치해줍니다.
touch 명령어를 통해서 config 파일을 생성하고 code config 명령어로 코드 위치를 열어줍니다.
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh
bash Anaconda3-2023.03-Linux-x86_64.sh
touch config
code config
도커 설치
다음 명령어를 통해서 도커를 설치해줍니다.
sudo apt-get update
sudo apt-get install docker.io
vscode에서 Remote - SSH 어플리케이션을 다운받은 뒤에 호스트에 연결해 줍니다.
이제 config 파일을 통해서 ssh -i ~/.ssh/gcp {ssh키 생성시 입력한 ID}@{VM 생성시 외부IP} 명령어가 아닌
간단한 명령어로 접속 가능합니다.
ssh de-zoomcamp
Git
DataTalksClub의 github의 주소에서 소스코드를 clone해옵니다.
git clone https://github.com/DataTalksClub/data-engineering-zoomcamp.git
docker run hello-world
sudo 명령어 없이 도커 명령어 쓰기
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo service docker restart
exit 후에 다시 ssh de-zoomcamp로 로그인해서 명령어를 실행하면 sudo 권한없이 잘 실행된다.
Docker Compose
해당 주소에서 링크 주소를 복사한 뒤에 설치해줍니다. chmod 명령어를 통해서 실행 가능한 파일로 변경시켜줍니다.
- https://github.com/docker/compose/releases
- https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64
mkdir bin
cd bin
wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -O docker-compose
chmod +x docker-compose : 실행 가능한 파일로 변경
./docker-compose version
mac에서 ctrl+v 로 맨 끝으로 이동 후 경로를 추가해주고 ctrl+o로 저장후 Enter를 치고 ctrl+x 로 나옵니다.
source 명령어를 통해서 변경 사항을 반영해줍니다.
export PATH="${HOME}/bin:${PATH}"
source .bashrc
cd data-engineering-zoomcamp/week_1_basics_n_setup/2_docker_sql/
docker-compose up -d
docker ps
새로운 터미널에서 pgcli를 설치합니다.
cd data-engineering-zoomcamp/
pip install pgcli
pgcli -h localhost -U root -d ny_taxi
에러가 발생하여 해결하기 위해 psycopg-binary 라이브러리를 설치하고 다시 root로 로그인합니다.
pip install psycopg-binary
pip uninstall pgcli
conda install -c conda-forge pgcli
pgcli 라이브러리를 설치할떼 더 이상 넘어가지 않고 failed with initial frozen solve. Retrying with flexible solve 에러가 발생했습니다. 해당 에러는conda로 패키지를 다운받을 때 최신 버전이 아니여서 생기는 에러중 하나였습니다.
conda update --all
conda install -c conda-forge pgcli
pgcli -h localhost -U root -d ny_taxi
이제 아무 문제 없이 잘 작동하는걸 확인할 수 있습니다.
로컬 머신에서 포트 포워딩
VM과 연결되어있는 vscode에서 ctrl+`로 터미널을 엽니다.
5432 포트와 8080 포트를 열어줍니다.
관련해서 터미널의 pgcli와 localhost:8080가 잘 연결되는지 확인합니다.
Jupyter Notebook
Jupyter Notebook을 설치한 뒤에 8888 포트를 열어줍니다.
그 후에 원본 데이터를 다운로드 받고 Jupyter Notebook에 필요한 라이브러리들을 설치해줍니다.
pip install jupyter notebook
wget https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2022-01.parquet
주피터 노트북에서 postgreSQL로 table을 생성하고 데이터를 인입합니다.
Terraform 설치
테라폼 다운로드 홈페이지에서 링크 주소를 복사합니다.
cd bin/
wget https://releases.hashicorp.com/terraform/1.4.4/terraform_1.4.4_linux_amd64.zip
sudo apt-get install unzip
unzip terraform_1.4.4_linux_amd64.zip
rm terraform_1.4.4_linux_amd64.zip
terraform --version
테라폼 버전을 확인해서 설치가 잘 되었는지 확인합니다.
sftp 설정
IAM 서비스계정을 생성해줍니다.
- dtc-de-user 계정 이름으로 뷰어 생성
- 키 관리에서 JSON 키추가
위에서 받은 .JSON 파일을 ny-rides.json으로 변경해줍니다.
VM인스턴스에 연결을 하려고 했는데 Google Compute Engine ssh: connect to host port 22: Operation timed out 에러가 발생하였습니다.
-
- https://serverfault.com/questions/953290/google-compute-engine-ssh-connect-to-host-ip-port-22-operation-timed-out
- vm 인스턴스를 종료한 뒤에 수정을 누르고 자동화 부분에 해당 코드를 입력하고 인스턴스를 다시 시작합니다.
#! 22. /bin / bash
sudo ufw 허용
-
- 이 경우에도 에러가 해결이 안될때가 있습니다.
- 인스턴스 정지 후 다시 시작하면 ip가 종종 바뀌게 되는데 이때 다시 수정을 해주고 연결해봅니다.
cd ~/.ssh
코드 구성
mkdir .gc
mv ~/Downloads/ny-rides.json ~/.gc
- sftp로 연결후에 파일을 업로드 해줍니다.
mkdir .gc
ny-rides.json 넣기
GOOGLE_APPLICATION_CREDENTIALS=~/.gc/ny-rides.json 내보내기
gcloud auth activate-service-account --key-file $GOOGLE_APPLICATION_CREDENTIALS
- export GOOGLE_APPLICATION_CREDENTIALS=~/.gc/ny-rides.json : VM에 있는 json 파일을 환경변수로 설정해줍니다.
- gcloud auth activate-service-account --key-file $GOOGLE_APPLICATION_CREDENTIALS : google cloud cli로 인증 설정을 해줍니다.
Terraform 실행
cd data-engineering-zoomcamp/week_1_basics_n_setup/1_terraform_gcp/terraform/ 에서 terraform init 명령어를 실행합니다.
terraform plan 에서 GCP의 프로젝트 ID를 입력해줍니다.
프로젝트 ID인 dtc-de를 입력하고 엔터를 누릅니다.
variables.tf 파일을 수정해서 default값으로도 추가가 가능합니다.
region의 경우 asia-northeast3 이므로 해당 코드도 수정해 줍니다.
terraform apply 명령을 수행합니다.
여기까지 프로젝트를 위한 환경 설정 부분이였습니다.
Reference
데이터 엔지니어링 줌 캠프 깃허브 주소
youtube
DataTalks.Club
data engineering zoomcamp slack
'PJT' 카테고리의 다른 글
[de zoomcamp] 05_배치 처리 (0) | 2023.05.07 |
---|---|
[de zoomcamp] 04_분석 엔지니어링 (0) | 2023.05.07 |
[de zoomcamp] 03_데이터 웨어하우스 (0) | 2023.05.07 |
[de zoomcamp] 02_워크플로 오케스트레이션 (0) | 2023.05.01 |
[de zoomcamp] Data Engineering Zoomcamp 소개 (0) | 2023.04.30 |