Understading BigData(3)
Intro
학교 수강과목에서 학습한 내용을 복습하는 용도의 포스트입니다.
빅데이터 개념과 오픈소스인 아파치 하둡과 맵리듀스 및 스파크를 이용한 빅데이터 적용을 공부합니다.
맵 리듀스의 경우 사용하기에 다소 진입장벽이 있는편입니다.
스파크처럼 통합 환경을 제공하지 않아 원하는 유틸리티나 라이브러리를 별도로 연결해서 사용해야하기 때문입니다. 이를 해소하는 것이 스파크라는 분산 데이터 처리 통합 엔진입니다.
따라서 맵 리듀스로 먼저 공부해보고, 스파크로 넘어갑니다.
스파크 엔진의 경우 Java가 아닌 Scalar라는 언어로 사용하며, 기존 우리가 알고 있는 SQL을 통해 고급 질의가 가능하며, 시각화나 스트림 처리 및 기계학습등 까지의 높은 수준의 분석을 제공하는 통합 프레임 워크입니다.
빅데이터 컴퓨팅(분산시스템상의 분산처리 환경)의 기본 개념과 원리를 이해하고 이를 실습해보는 과정에서 2대 이상의 리눅스 클러스터 서버를 구축 및 활용할 것입니다.
이번 주제는 클러스터 실습 환경 구축입니다.
아래 순서로 진행합니다.
- 빅데이터 실습 환경
- VirtualBox 클러스터 서버
- 윈도우 클라이언트
빅데이터 실습 환경
PC에서 클라이언트(putty와 notepad++이 됩니다)와 클러스터 서버(VirtualBox 가상머신 두대) 실습을 합니다.
그래서 VB 가상머신 상에 2개의 리눅스 서버를 올릴 예정이며, VB에서 제공되는 1개의 NAT 게이트웨이를 통해서 클라이언트와의 통신을 구현합니다.
클라이언트로는 Putty를 통해서 서버로 접속할 수도 있고, Notepad++를 통해 서버에 코드를 직접 작성할 수도 있습니다.
이외에도 웹브라우저를통해서도 서버에 접속할 수 있습니다.
이를 이해하기 위해 선수지식으로 컴퓨터 네트워크 지식이 필요합니다.
-
- IP주소 CIDR(Classless InterDomain Routing)
- IP주소의 서브넷 부분이 임의의 길이를 가지는 것을 말합니다.
a.b.c.d/x의 주소형식에서 x는 주소의 서브넷 부분의 비트 수를 나타냅니다.
대개는 비트수를 24로 설정한 경우를 많이 보셨을 겁니다.
-
DHCP : 대개 IP주소는 내부 DHCP 서버에 의해 유동IP를 동적으로 할당받아 사용해오셨을 겁니다.
- DHCP 동작의 개요입니다.
- DHCP discover
- DHCP offer
- DHCP request
- DHCP ACK
- DHCP discover
호스트는 DHCP 서버를 발견하여 메시지를 보내고, DHCP 서버는 DHCP 제공 메시지를 응답하며, 호스트는 DHCP 요청 메시지를 다시 한번 보내면 최종적으로 DHCP서버가 DHCP ACK 메시지로 사용할 IP를 주소를 보내주는 것입니다.
- NAT(Network Address Translation) : 내부네트워크가 있고 외부에서 내부를 바라보면 하나의 IP주소만을 알게되는데 사실상 내부망에서도 각 호스트들을 구분해줘야하는데, 포트포워딩을 이용하여 이에 대한 해결을 하는 솔루션이 바로 NAT입니다.
가상머신의 게이트웨이에 있는 NAT translation table에 의해 포트번호가 몇인지를 확인하여 해당하는 호스트를 찾아가게 하는 것이죠.
우리는 위와 같이 실습 네트워크 환경을 갖출 겁니다.
수동으로 IP를 저렇게 갖출거에요.
VirtualBox 클러스터 서버
- VirtualBox 다운로드
아래 링크로부터 VB installer를 다운로드 받아 설치를 진행해주세요.
이후에 여러분께서는 우분투 이미지를 download 받아서 두대의 가상머신에 OS를 올려주세요!
저의 경우엔 이미 만들어놨던 가상머신 가져오기로 실행했기 때문에 이 포스트에는 가상머신 설치과정이 생략되어있습니다.
- 게이트웨이 설정
가상머신 게이트웨이를 설정해줍니다.
아래 캡처들을 쭉 따라해주세요!
VirtualBox Host NIC를 우클릭하여 속성으로 들어가주세요.
그럼 아래와 같은 창이 팝업될건데요, TCP/IPv4 속성을 켭니다.
IP주소는 우리가 계획한대로 입력해주시고, 아래 DNS 서버 정보들은 자신에게 맞는 DNS 서버 주소를 입력해주신뒤 적용해주시면 됩니다.
DNS 서버 확인은 윈도우 호스트가 받은 IP정보를 확인하면 금방 확인하실 수 있습니다.
- VB 네트워크 설정
그 다음 VB의 네트워크 설정을 NAT로 변경해줄 겁니다.
환경설정에서 네트워크로 들어가 NAT 네트워크 설정을 바꿔줍니다.
네트워크 CIDR을 저희가 원하는 대로 저렇게 설정해주시고 비트수도 맞게 24로 설정해주시고요.
포트포워딩 설정까지 해봅시다.
아래 캡처화면을 그대로 따라해주세요.
VB 네트워크설정을 마쳤으면, Master와 Slave1 가상머신의 설정도 해줄 겁니다.
설정이 완료되었으면, 머신을 실행시켜보겠습니다.
그럼 아래와 같은 방화벽 경고 창이 확인되실 겁니다. 액세스 허용해주셔야합니다!
마스터 머신을 먼저 실행시켜봤는데요, ip addr이라는 명령어를 입력하시게되면 현재 해당 머신의 ip 정보를 확인하실 수 있습니다.
저희는 IP 정보를 저희가 원하는대로 줄 필요가 있습니다! 아래의 명령어를 입력해 변경해볼까요.
sudo nano /etc/netplan/50-cloud-init.yaml
ip address와 nameserver를 설정하고 저장해줍니다. 네임서버의 경우 host의 것 그대로 해주었습니다.
이후 변경사항을 반영하기 위해 아래의 명령어를 입력해주세요.
sudo netplan apply
적용 이후 ip addr 명령어로 다시 확인해보시면 우리가 원하는 ip인 192.168.0.200/24를 받은 것을 확인하실 수 있을 겁니다.
같은 방법으로 ip 주소만 192.168.0.201/24로 하여 Slave1 호스트에도 설정해주세요.
클라이언트-PuTTY로 접속 확인하기
우리가 실제 서버를 운영하게 되는 경우, 지금처럼 VB 따위를 이용해 가상머신으로 운영하는 게 아니고 실제로 물리적으로 서버컴이 떡하고 있을거란말이죠?
그렇다면 우리가 어떤 작업을 할 때 매번 서버가 물리적으로 설치된 곳으로 가서 작업을 하기란 쉽지가 않습니다.
원격으로 내 집에서 서버에 접속하여 작업을 할 수 있다면 참 편리하겠지요?
가상 머신 서버를 SSH로 접속하기 위한 클라이언트 프로그램인 PuTTy를 윈도우 호스트에 설치해주세요.
압축파일을 다운받은 후 압축 해제하셔서 사용하시면 됩니다.
PuTTY를 실행하여 SSH를 이용하여 Master 서버로 접속합니다.
이때 저희가 정한 포트포워딩 규칙대로 IP, port를 입력하셔야 합니다.
최초 접속 시에는 경고창이 확인되실겁니다.
예 버튼을 누르시면 됩니다.
클라이언트-Notepad++의 FTP 이용
오픈소스 문서 및 소스코드 편집기로서 FTP를 사용한 원격 서버의 파일 편집 기능을 제공하는 Notepad++를 윈도우 호스트에 설치해줍니다.
저는 64bit installer를 다운 받았습니다.
notepad를 실행시켜 잘 설치되었는지 확인해주세요.
이후 FTP를 위한 플러그인을 설치해줍니다.
다운로드 경로 : https://github.com/bruderstein/nppPluginManager/releases
압축해제후 아래와 같이 두 폴더를 복사하여 Notepad폴더쪽으로 붙여넣어주세요.
원격 서버 연결 편집을 위해서 FTP 플러그인을 설치해줄 겁니다.
플러그인 관리창을 열어 NppFTP를 설치해주세요.
설치가 잘되었다면 초기 설정을 몇가지 해줄겁니다.
아래 캡처처럼 설정창으로 진입해주세요.
Add new를 클릭하여 Master 서버에 대한 프로필설정을 진행합니다.
똑같이 진행해주세요.
특히 SSH 포트 사용을 위해 sFTP로 설정해주시기 바랍니다.
설정을 완료하셨으면 close 버튼누르고 나오신 후에 확인을 한번 해줍니다.
마찬가지로 최초 경고창이 나오게될 건데 예 버튼눌러주시구요.
그러면 해당 서버의 파일디렉토리를 보고 계신 상태가 될 겁니다.
Slave1 서버를 위한 같은 작업을 진행해주시기 바랍니다!
포트 10001로 설정했던 것 기억하시죠?
다 하셨다면 잘 전송이 되는지도 확인하기 위해 서로 다른 언어인 python과 c 소스코드를 작성하여 Master 서버에서는 노트패드로 작성된 c 원시코드를 받아 gcc 컴파일러로 번역하여 실행시켜보고, Slave1 서버에서는 python을 받아 해당 소스코드를 interpreter에 의해 실행을 시켜보도록 하겠습니다. 물론 쁘띠로요 ㅎㅎ.
LAB
가장 먼저, 윈도우 호스트에서 노트패드를 이용해 C 소스코드와 python 소스코드를 작성해줍니다.
그리고 이 두 파일을 두개의 서버 Master와 Slave1에게 사이좋게 하나씩 나눠줍니다.
사진은 마스터에 옮기는 것만 캡처했지만 슬레이브에게도 Python 파일을 전송해줘야해요!
우리는 원격으로 각 서버의 파일을 수정할 수도 있습니다!
윈도우와 리눅스는 파일의 EOL 형식이 다르기 때문에 한번 수정해보도록하겠습니다.
보기 탭의 기호보기의 줄끝 표시를 체크하시면 이런 화면을 확인하실 수 있을겁니다.
다음은 putty로 Master와 Slave1 호스트에 차례로 접속해 파일을 잘 받았는지 확인하고, 실행까지 해보도록 할건데요!
그러려면 Master엔 gcc가, Slave1에는 python interpreter가 설치되어있어야 실행이 가능하겠지요?
Master 먼저 해보겠습니다.
gcc 컴파일러를 설치해주시고 잘 설치되었는지 확인해주세요.
gcc가 잘 설치되었으며, lab1.c도 잘 받았다는 걸 확인하실 수 있습니다!
컴파일 후 실행해봅시다.
아래 명령어를 통해 컴파일합니다.
gcc -o [실행파일] [파일명]
컴파일 이후에 실행파일이 생겼다는 것을 알 수 있습니다!
그럼 한 번 실행도 해봅시다.
아래 명령어를 통해 실행파일을 실행할 수 있습니다.
./[실행파일명]
잘 출력되었네요 ㅎ_ㅎ
슬레이브에서도 확인해봅시다.
putty를 이용해 슬레이브로 접속합시다!
포트 10001로 설정했었죠.
접속 시도합니다.
ls 명령어를 통해 FTP로 받은 lab1.py 파일이 잘 있는지 확인해주세요.
소스코드 실행을 위해 python 인터프리터를 설치해주세요.
python의 경우 인터프리트언어로 컴파일없이 아래명령어로 실행됩니다.
python3 ./[소스코드파일명]
짠! 잘 됩니다.
이건 추가로 버박에서 실행해본것..ㅎㅎ입니다.
이로써 Master와 Slave1 서버가 모두 잘 설정되었다는 것을 알 수 있습니다.
실습 환경 구축을 마칩니다.
개인이 공부하고 포스팅하는 블로그입니다. 작성한 글 중 오류나 틀린 부분이 있을 경우 과감한 지적 환영합니다!