일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 가상환경
- HADOOP
- airflow.cfg
- AWS
- Go
- 데이터 파이프라인
- Django
- 자료구조
- S3
- dockerfile
- Docker
- 데이터엔지니어링
- 운영체제
- 파이썬
- 컴퓨터 네트워크
- redshift
- linux
- 데이터 웨어하우스
- airflow
- sql
- http
- 정리
- 데이터 엔지니어링
- TIL
- 데이터베이스
- TCP
- PYTHON
- 데브코스
- 종류
- 컴퓨터네트워크
- Today
- Total
홍카나의 공부방
[Hadoop] NCP에서 하둡 실습 환경 구축하기 본문
0. 하둡 실습 환경 구축 준비
Udemy에서 아래 하둡 강의로 하둡 에코시스템에 대한 학습을 진행하려고 했다.
강의에서는 VirtualBox의 우분투 이미지로 가상머신을 하나 올려서 실습을 진행한다. 그러나 나같은 경우 M1 Mac을 사용하고 있어서 VirtualBox 사용이 어렵기도 하고, 그렇다고 강의만 들으려니 실습을 하고 싶은 마음이 커서 컴퓨팅 자원을 하나 빌리기로 했다.
제일 흔한 선택지는 AWS EC2다. 프리티어 요금제를 기준으로 공짜로 빌릴 수 있는 t2.micro의 경우 RAM 1GB 짜리 인스턴스를 제공한다. 그러나 실습에 필요한 RAM이 최소 8GB라고 권장되므로, AWS에서 유료로 컴퓨팅 자원을 빌리거나 GCP처럼 다른 클라우드 서비스에서 AWS의 무료 t2.micro보다 합리적으로 자원을 빌릴 수 있는 방법을 찾아야 했다.
그런 와중 현재 활동하는 동아리에서 네이버 클라우드 플랫폼(NCP) 신규 가입시 활용할 수 있는 크레딧 100,000원을 제공한다는 이야기를 듣고, 이번에는 AWS가 아닌 NCP를 활용하여 리눅스 실습 환경을 구축하려고 한다. 크레딧 10만원이면 유데미 강의 실습에서 필요한 RAM 8GB 짜리 서버를 충분히 빌리고도 남을 금액인 것 같다.
네이버 클라우드 플랫폼에서는 Cloud Hadoop 서비스로 하둡 클러스터를 제공하기는 하나, 이번에는 클라우드 하둡 서비스를 이용하지 않고 VirtualBox로 리눅스 하나를 띄워서 진행한 유데미 강의를 그대로 따라가기 위해 서버를 빌리고 거기에다가 Docker HDP 2.6.5를 설치해서 실습해 보는 방법으로 진행하려고 한다.
시작은 리눅스 인스턴스를 빌리는 것이다. 이 글은 다음과 같은 과정을 진행한다.
1. NCP에서 리눅스 인스턴스를 빌리기까지의 설정하는 과정
2. 인스턴스 내부에다가 Docker를 올리고
3. 하둡 유데미 강의 실습에 필요한 HDP Sandbox 이미지 기반의 컨테이너를 올리는 과정
4. 그리고 정상 구축을 테스트하는 과정
1. NCP 가입 이후 설정 - VPC
아마 이 글을 보시는 '개구리'분들은 예전 '올챙이' 시절때 클라우드를 공부하기 위해 AWS에 가입하고 프리티어 EC2 인스턴스를 하나 빌리기까지의 과정을 모두 거쳤으리라 생각한다. AWS EC2를 빌릴 때는 보통 default VPC가 설정되어 있어서 VPC를 따로 설정하지 않아도 EC2 한 대를 빌리고 접속해보는 것까지의 과정을 무난하게 진행할 수 있었을 거라 생각한다.
다만, NCP에서는 AWS와 다르게 default VPC가 자동으로 설정되지 않는 것 같다. 따라서 VPC 설정부터 시작해야 한다. NCP에 가입해서 무료 크레딧 100,000원을 사용하기 위해 결제 수단을 등록까지 마친 다음, VPC 설정부터 시작해보자. 초기 VPC 설정에 참고한 자료는 다음과 같다.
https://docs.3rdeyesys.com/docs/compute/vpc/server-create/
https://guide.ncloud-docs.com/docs/networking-vpc-vpcoverview
우선 나는 실습용 VPC + Server를 빌려고 하는 것이기 때문에 VPC 내부에다가 Private Subnet을 구축하는 것까지는 필요가 없다고 판단하였다. 그래서 Public Subnet 한 개만 구축하려고 한다. 아키텍쳐는 대략 다음과 같은 그림이 될 것이다.
1. VPC 서비스를 이용하기 위해 NCP Console에 접속후 [Services] - [Networking] - [VPC] - [VPC Management]로 이동한다.
2. [VPC 생성] 버튼을 눌러 VPC를 생성한다. 여기서 IP 주소 범위를 입력할 때 private 대역과 IPv4 CIDR 크기까지 입력하게 되어있다. 나는 /16을 줘서 host IP 개수를 65,536개 까지는 확보할 필요가 없다고 판단했으므로 /24 (host IP 주소 : 256개)로 설정했는데 각자 입맛에 맞게 설정하면 되겠다.
3. vpc 생성이 완료되면 실질적으로 네트워크를 사용할 수 있도록 VPC 안에 Subnet을 구축하자. subnet은 NCP 콘솔 - [subnet management]에서 관리할 수 있다.
- [Subnet 이름]은 각자 입맛에 맞게 입력한다.
- 위에서 생성했던 [VPC]를 선택한다.
- Subnet에서 사용할 [IP 주소 범위]를 입력한다. 나는 이 서브넷에 64개의 IP를 주고 싶어 서브넷 마스크를 /26으로 부여했다.
- [Internet Gateway 전용여부]는 외부와 인터넷 연결이 필요할 경우에는 [Public], 내부 서버끼리만 통신할 경우에는 [Private]을 선택한다. 나는 퍼블릭 서브넷으로 활용할 생각이므로 [public]으로 설정했다.
- [용도]의 경우 이 서브넷이 로드밸런서나 NAT 게이트웨이의 역할은 하지 않을 것이므로 [일반]을 선택한다.
4. 보안을 위해 Network ACL(Access Control List)을 설정하여 Subnet의 Inbound와 Outbound 트래픽을 제어하자. [Network ACL] 메뉴로 들어간다. 새로 하나 만드는 대신에 자동으로 생성된 ACL의 Rule을 설정하겠다. 설정은 우선 https://guide.ncloud-docs.com/docs/vpc-procedure-vpc 에서 권장한 ACL 설정을 따라가되, 필요하다면 설정 도중에 프로토콜이나 포트번호를 추가하고 막아두는 식으로 진행하겠다.
* 참고1 : HDFS와 Ambari에서 사용하는 포트번호는 8080과 2222번이다.
* 참고2 : 네이버 클라우드 docs에서는 TCP의 1-65535번 포트를 차단하는 규칙을 우선순위를 낮게 해서 넣어뒀는데 이럴 경우 ssh를 이용한 통신이 추후 안될 수도 있다. 그리고 원격으로 붙을 때 필요하다면 해당 PC의 ssh 포트를 열어줘야 한다.
5. 라우팅 테이블을 설정하기 위해 NCP 콘솔 - [Route Table]로 들어간다. 확인해보니 기본 라우팅 테이블이 만들어져 있어서 따로 건드리지는 않았다. 나중에 필요하면 추가로 라우팅 테이블 설정을 바꾸겠다.
이제 VPC 설정을 마무리하고, 생성한 VPC 안에 배치할 서버를 생성하면 된다!
2. Server 설정
서버를 생성하기 위해 다음의 절차를 따르려고 한다. 참고로 3세대 서버를 만들 생각이다.
https://guide.ncloud-docs.com/docs/server-create-vpc
1. [NCP 콘솔 - Server]로 들어가서 신규 서버를 생성한다. 이번에는 위 이미지처럼 신규 콘솔 화면을 선택하려고 한다. OS의 경우 우분투 20.04 (ubuntu-20.04)를 선택했다.
* 중요 : ubuntu-22.04 + 하이퍼바이저(KVM)으로 먼저 시도를 해봤는데 HDP 컨테이너가 제대로 작동되지 않았다. 그래서 [NCP 서버 이미지] - ubuntu-20.04 + 하이퍼바이저(XEN)으로 진행을 했었고, 이 조합은 성공했다. 꼭 이 조합으로 진행하자.
2. [서버 설정]으로 넘어와서 서버 타입과 요금제를 선택한다.
- [VPC]와 [subnet]은 앞서 만들었던 VPC 및 서브넷을 선택한다.
- 서버 스펙은 Standard, 메모리 8GB 짜리를 선택한다.
- 요금제의 경우 항상 켜두지는 않을 생각이라 시간 요금제를 일단 선택한다.
- Network InterFace의 경우 IP를 수동으로 할당해도 괜찮고, 자동할당을 받아도 상관없다. 꼭! 설정 완료후 [+추가] 버튼을 누른다.
- 공인 IP(elastic IP)를 받아놓았다. 공인 IP를 받아놓으면 추후 반납해야 함에 유의한다.
- 물리 배치 그룹과 반납 보호는 사용하지 않았다.
3. [스토리지 설정]에서는 이미지 크기가 크고, 실습을 위해서 40GB이상의 디스크 크기를 권장했기 때문에 여분 공간을 더해서 60GB를 받아놓았다.
4. [인증키 설정]에서는 NCP용 .pem 키를 하나 새로 받아놓았다.
5. [ACG 설정] 네트워크 접근을 위한 설정이다. ACG(Access Control Group)은 서버 간 네트워크 접근 제어/관리를 할 수 있는 IP-Port기반 필터링 방화벽 서비스다. [VPC]를 생성하면 자동으로 생성되는 기본 ACG를 선택했다.
6. 생성 완료!
7. ACG 설정을 일부 바꿔줘야 한다. 콘솔 - [Server] - [ACG]로 들어가서 ssh로 원격 접속할 포트 번호만 열어준다. 앞서 ACL로 VPC 서브넷 단의 방화벽을 설정하긴 했지만, 서버 자체의 방화벽도 다시 한 번 설정을 해주자.
8. ssh를 통해 연결하기 전에 서버의 관리자(root 계정) 비밀번호를 미리 확인하는 방법은 콘솔 - [Server] - [서버 관리 및 설정 변경] - [관리자 비밀번호 확인] 에서 확인할 수 있다.
9. ssh 접속을 시도한다.
ssh -i {.pem key 경로} root@{공인 ip 혹은 포트 포워딩시 IP 주소}
10. 접속 완료!
QnA) 접속이 안돼요. 등등 문제 해결은 아래를 참고.
https://guide.ncloud-docs.com/docs/server-ts-vpc
time out의 경우 높은 확률로 방화벽 문제일 가능성이 크니 ACL, ACG를 다시 한번 점검해 보고, 포트도 열어본다.
3. Docker 설치
Docker 설치의 경우 다음 가이드를 따른다.
https://docs.docker.com/engine/install/ubuntu/
4. Sandbox Image 설치
아래의 글을 참했다.
https://ruslanmv.com/blog/Cloudera-HDP-Sanbox-on-AWS
1. git clone으로 설치 파일을 받아오기 위해 sudo apt install -y git 를 실행한다.
sudo apt install -y git
2. 아래의 git clone 명령어를 실행한다.
git clone https://github.com/ruslanmv/HDP-Sandbox-AWS.git
cd HDP-Sandbox-AWS
3. docker를 설치하기 위해서 bash install_docker.sh를 실행해야 하나, 위에서 설치했으면 패스해도 좋다.
bash install_docker.sh
4. HDP 2.6.5를 설치한다.
좀 걸린다.
cd HDP-Sandbox-AWS/HDP_2.6.5
bash docker-deploy-hdp265.sh
5. docker ps로 이미지 설치 및 컨테이너 가동을 확인한다.
docker ps
추후에 서버 재기동 후 컨테이너를 가동할 때는 `sudo docker start sandbox-hdp`와 `sudo docker start sandbox-proxy`로 가동하면 된다. 컨테이너를 올린 후 웹서버 가동에는 시간이 좀 걸리는 편이니 이를 감안하여 실습 환경에 접속하면 되겠다.
5. Ambari 접속 테스트 & HIVE 쿼리 테스트
웹 브라우저에서 http://{서버 인스턴스 공인 IP주소}:8080 을 입력해서 Ambari maria_dev 계정으로 접속하면 아래 화면이 보인다. ( 초기 maria_dev ID/PW는 maria_dev로 동일하다. )
Hive에서 데이터셋을 시각화하는 예시를 따라해보자. MovieLens라는 사이트에서 실제 영화 후기를 기록한 100K 짜리 데이터셋을 가져와본다. 아래 링크에서 zip 파일을 다운로드한다.
http://files.grouplens.org/datasets/movielens/ml-100k.zip
Ambari로 돌아가서 [Hive view]를 열어보자.
[NEW TABLES]를 누르고, [UPLOAD TABLE]을 누른다.
UPLOAD TABLE에서 Field Delimiter는 TAB으로 설정한다.
그리고 앞서 다운로드한 movielens 100k 압축 파일 안에 있는 u.data 파일을 local에서 올린다.
컬럼 이름과 테이블 이름(Name)은 다음과 같이 다시 지어주자.
- u : ratings
- column1 : user_id
- column2 : movie_id
- column3 : rating
- column4 : rating_time
그리고 Create 버튼을 누르고, 쿼리를 찍어보면 테이블이 정상 반영됨을 확인할 수 있다.
'Data Engineering > Hadoop' 카테고리의 다른 글
[Hadoop] MongoDB와 Hadoop (0) | 2024.05.27 |
---|---|
[Hadoop] Hive 소개와 작동 방식 (2) | 2024.05.26 |
[Hadoop] Apache Spark 2.0 개요와 RDD, DataSet (0) | 2024.05.19 |
[Hadoop] Apache Pig의 개요와 사용법 (0) | 2024.05.19 |
[Hadoop] HDFS 개요와 HDFS 접근 방법, MapReduce (0) | 2024.05.12 |