이 글은 LS글로벌의 [빅데이터 처리 분석 실무 표준 과정] 교육 중 Hadoop을 Oracle VirtualBox에 설치하는 실습 과정을 AWS에 설치하는 내용으로 정리하였습니다.
[AS-IS]
VM : Oracle Virtualbox + CentOS 6
[TO-BE]
VM : AWS + Amazon Linux AMI 2017.03.1 (HVM), SSD Volume Type – ami-e21cc38c
그리고, 아래와 같이 총 5개의 내용으로 구성되어 있습니다.
1. EC2(Elastic Compute Cloud) 인스턴스 2개 생성
2. 생성된 EC2 인스턴스 접속 방법
3. Hadoop 설치를 위한 기본 환경 설정
4. Hadoop 설치
5. Hive 설치
주의사항
AWS는 Linux t2.micro 1개의 인스턴스 사용시 1개월 실행을 가정하여 12개월 동안 무료로 사용할 수 있습니다.
이번 설치 과정에서는 Linux t2.micro 2개의 인스턴스를 사용하여 Hadoop을 설치할 예정으로 보름(15일) 실행 시 무료입니다. Hadoop 설치 후 해당 인스턴스를 보름(15일) 이상 계속 사용할 경우 요금이 부과될 수 있으니 요금 부과를 원하지 않을 경우 꼭 인스턴스를 Stop 하거나 Terminate 해야 합니다.
1. EC2(Elastic Compute Cloud) 인스턴스 2개 생성
2. 생성된 EC2 인스턴스 접속 방법
3. Hadoop 설치를 위한 기본 환경 설정
1) 네트워크 환경 설정
Hadoop 설치를 위하여 각 인스턴스(해당 인스턴스를 ls1, ls2로 하겠습니다.)의 환경을 설정합니다.
먼저 hostname 을 변경합니다. 아래 과정은 ls1 인스턴스의 환경 설정을 하는 화면입니다. 동일하게 ls2 인스턴스도 환경 설정이 필요하며, ls1과의 차이점은 /etc/sysconfig/network 파일의 hostname입니다. ls1은 SERVER1, ls2는 SERVER2 로 설정합니다.
/etc/sysconfig/network 파일을 vi편집기로 열어 HOSTNAME을 SERVER1으로 변경합니다. SERVER1이 Hadoop 구성 시 Name node로 사용됩니다.
$ sudo vi /etc/sysconfig/network
두번째 줄의 HOSTNANE=localhost.localdomain 을 HOSTNAME=SERVER1으로 변경한 후 저장합니다.
두 번째 /etc/hosts 파일을 vi 편집기로 열어 Name node와 Data node로 사용할 인스턴스에 대한 hostname을 추가합니다. 각 인스턴스의 Private IP에 SERVER1, SERVER2 로 설정하면 됩니다.
$ sudo vi /etc/hosts
인스턴스를 reboot 합니다.
$ $ sudo reboot
Reboot 후 다시 ls1 인스턴스에 접속합니다. 접속하면 해당 인스턴스의 hostname은 SERVER1으로 변경된 것을 확인할 수 있습니다. hostname 명령을 통해서도 SERVER1으로 나타나는 것을 확인할 수 있습니다.
두번째 인스턴스인 ls2를 지금까지 과정을 반복하면서 설정합니다. 처음에도 이야기 하였듯이 /etc/sysconfig/network 의 hostname을 SERVER2로 설정하는 것 외엔 동일합니다. 인스턴스를 reboot 하면 hostname이 SERVER2로 변경된 것을 확인할 수 있습니다.
2) SSH 공개키 생성 및 복사
Hadoop은 여러 개(이번 과정에서는 두개)의 Hadoop Cluster간 SSH 프로토콜을 이용하여 통신을 하게 됩니다. Name node(=SERVER1)에서 SSH 공개키를 생성한 후 해당 공개키를 다른 서버들에게 복사를 하는 방법으로 서버간 통신이 가능하도록 합니다.
SERVER1 에서 SSH 공개키를 생성합니다.
$ ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
public Key가 정상적으로 저장되었다는 메시지를 확인할 수 있습니다. 해당 경로의 파일을 아래 명령 실행을 통해 authorized_keys에 등록합니다. 정상적으로 실행되면 터미널 창에 특별한 메시지 없이 프롬프트만 다시 나타납니다.
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
해당 서버에 SSH 접속이 되는지 localhost 및 hostname(SERVER1)으로 테스트 해봅니다.
우선 localhost 로 접속합니다. 처음 접속 시 “Are you sure you want to continue connection (yes/no)? 라고 나오면 yes를 입력합니다. 두번째 접속부터는 해당 질문없이 로그인 되어야 정상입니다.
$ ssh localhost
exit 명령으로 ssh 접속을 종료합니다.
$ exit
Hostname SERVER1으로 ssh 접속을 해봅니다. 접속 방법은 localhost 접속과 동일합니다.
$ ssh SERVER1
3) SSH 공개키 복사
기본적으로 AWS의 인스턴스에 접속하기 위해서는 다운로드 한 Key 파일이 필요합니다. 이 Key 파일은 AWS 내의 인스턴스에서 다른 인스턴스 간 접속을 할 때도 마찬가지 입니다. Key 파일을 SERVER1 에 전송 후 해당 key 파일을 통해 SERVER2로 접속이 가능합니다. 즉, Key 파일만 있으면 scp 명령어로 SERVER1의 파일을 SERVER2 인스턴스로 복사할 수 있습니다.
이 문서에서는 scp 명령어가 아닌 Windows를 사용하는 Client PC에서 sFTP를 사용하는 방법으로 정리하였습니다. 즉, SERVER1의 파일을 Client PC로 다운로드 받은 후 해당 파일을 SERVER2로 다시 업로드 하는 방법입니다.
Client PC와 AWS 인스턴스간 파일을 업로드/다운로드 하기 위해서는 sFTP 접속을 지원하는 프로그램이 필요합니다. 파일질라도 sFTP 접속을 지원합니다. 파일질라는 아래 경로에서 다운로드 받을 수 있습니다.
https://filezilla-project.org/download.php?type=client
설치 버전을 다운로드 받아 실행 하면 설치가 됩니다. 설치 버전이 아닌 무설치 버전을 다운받기 위해서는 아래 보이는 화면에서 중간의 Show additional download options 를 클릭합니다.
Windows (64bit) 카테고리에 있는 파일 중 확장자가 *.zip 인 파일의 링크를 클릭하여 원하는 폴더에 다운로드 합니다.
다운이 완료되면 압축파일을 풀고 파일질라를 실행합니다.
파일질라 실행 후 sFTP 접속을 하기 위해 아래와 같이 설정합니다.
- 호스트(H): SERVER1의 Public IP or hostname - 프로토콜(T): SFTP – SSH File Transfer Protocol - 로그온 유형(L): 키 파일 - 사용자(U): ec2-user - 키 파일(K): LSG.ppk
설정을 마쳤으면 [연결(C)]를 클릭합니다.
아래와 같이 SERVER1 인스턴스에 접속이 되어 ec2-user 홈 경로가 표시됩니다. .ssh 폴더를 더블클릭하여 /home/ec2-user/.ssh 경로로 이동합니다. 해당 경로에 authorized_keys, id_rsa, id_rea.pub 파일이 있는 것을 확인할 수 있습니다.
authorized_keys 파일이 각 인스턴스간 통신을 하기 위해 필요한 Key 파일입니다. 해당 파일만 있어도 각 인스턴스간 SSH 접속을 위한 구성을 할 수 있으나 id_rsa 파일도 같이 복사하는 것으로 하겠습니다. SERVER1 인스턴스에 있는 해당 두 개의 파일을 선택하여 Client PC의 원하는 폴더에 드래그하면 다운로드가 됩니다.
이제 SERVER2 인스턴스에 sFTP 접속을 합니다. 접속을 위한 설정은 SERVER1과 동일하며 호스트(H): 부분만 SERVER2에 해당하는 IP로 변경합니다. [연결(C)]을 클릭하여 접속합니다.
SERVER2 인스턴스에 접속 후 .ssh 폴더를 더블클릭 하여 /home/ec2-user/.ssh 경로로 이동합니다.
Client PC에 다운로드 받은 authorized_keys, id_rsa 파일을 선택 후 SERVER2 인스턴스의 해당 경로에 드래그 합니다.
authorized_keys 파일은 이미 해당 경로에 파일이 있기 때문에 아래와 같은 팝업창이 나타납니다. 이때는 덮어쓰기 하시면 됩니다.
이제 SERVER1 인스턴스에서 SERVER2 인스턴스로 ssh로 접속이 되는지 확인합니다. 정상적으로 접속이 되면 공개키 복사가 완료된 것입니다.
$ ssh SERVER2
4) 방화벽 설정 변경
교육 과정에서는 CentOS의 방화벽 설정을 사용하지 않도록 iptables 서비스를 중지 하였습니다. 반면에 AWS내의 인스턴스에 대한 방화벽은 Security Groups 에서 Rule 생성으로 설정할 수 있습니다.
AWS Console 화면에 접속한 후 [NETWORK & SECURITY]> Security Groups 메뉴로 이동 한 후 launch-wizard-1을 선택하고 아래 탭 중에 [Inbound] 를 선택합니다.
Inbound 탭 내의 [Edit]를 클릭하거나 해당 화면의 위쪽에 있는 [ACTIONS] > [Edit Inbound Rules]를 선택하면 Edit를 할 수 있는 새로운 창이 나타납니다.
[Add Rule] 을 클릭하여 9000-9001번, 50000-50100 포트를 아래 그림과 같이 추가한 후에 [Save] 를 클릭합니다. 해당 포트는 Hadoop 설치 및 사용에 필요한 포트 입니다.
- Type: Custom TCP - Port Range: 9000-9001 50000-50100 - Source: Anywhere
저장을 하고 나면 Inbound Rule에 아래와 같이 추가된 것을 확인할 수 있습니다.