ssh(secure shell) & pssh(parallel ssh)
SSH(Secure shell)
하둡은 데이터를 분산 병렬 시스템으로 처리하기 때문에 여러 대의 컴퓨터에서 실행이 된다.
그러므로 하둡의 마스터노드는 각각의 데이터 노드와 통신을 해야 한다.
이 통신을 위해 SSH(Secure shell)을 이용한다.
Secure ssh은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 수행 후, 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램을 말한다.
즉, 서로 통신할 때 안전하게 통신하기 위해 사용하는 보안 프로토콜이다.
Hadoop 환경을 셋팅할 때, Name node에서 SSH의 공개키를 생성하고 이 공개키를 다른 데이터 노드 서버에 복사해서 사용한다.
위와 같은 설정을 통해 SSH를 사용하여 Hadoop 클러스터의 각 노드 간에 인증 및 암호화된 통신을 설정할 수 있다.
하둡 환경셋팅을 할 때, 전체 서버에 Host를 등록해야 한다.
서버에서 /etc/hosts에 ip주소, host name을 아래와 같이 추가한다.
# Master node
vi /etc/hosts
~
111.111.111.1 server01.hello.com hadoop01
...
이후 로그인 없이(암호없는) ssh 접속을 위해 ssh RSA 키를 생성 및 배포해야 한다.
ssh 입력 후 특별한 입력없이 enter 3번 누르면 성공이다.
ssh-keygen
아래와 같이 나오면 키 생성 성공
이후 키를 모든 서버로 전송한다.
# 01에 전송, 첫 번째 yes, 두 번째 pw 입력
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop01
Are you sure you want to continue connecting? yes
password:
# 02에 전송
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop02
...
# 03에 전송
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop03
...
이제 name node에서 패스워드 입력없이 각 서버들에 접속할 수 있다.
접속은 아래와 같이 진행한다.
# namenode(hadoop00)에서 접속
ssh root@hadoop01
ssh root@hadoop02
ssh root@hadoop03
pssh(parallel ssh)
pssh(parallel-ssh)는 동일한 파일의 복사나 명령어를 다수의 리눅스기반 노드에서 실행해야 할 때 사용한다.
(pssh는 단일 파일만 가능하다.)
pssh는 Python 기반으로 만들어졌기 때문에 Python이 설치되어있어야 한다.
pssh를 사용하기 위해선 아래와 같이 설치를 진행해주어야 한다.
# pssh 설치
yum install -y epel-release
yum install -y pssh
각각 서버의 network 정보를 담는 txt 파일을 etc directory에 생성
# Master node
vi etc/hosts_all.txt
~
hadoop00
hadoop01
hadoop02
hadoop03
vi etc/hosts.txt
~
hadoop01
hadoop02
hadoop03
Master node의 /etc/hosts의 파일을 관리서버를 제외한 Data node 서버들로 복사
*-e: error 뜨면 에러메시지 표시
pscp.pssh -h /etc/hosts.txt /etc/hosts /etc/hosts
[1] 15:12:38 [SUCCESS] hadoop01
[2] 15:12:39 [SUCCESS] hadoop02
[3] 15:12:40 [SUCCESS] hadoop03
*pssh 주요 옵션
옵션 설명
-i | 결과 |
-x | ssh 명령어 옵션 |
-h | 호스트 파일 불러오기 |
- | |
-A | 패스워드 입력 |
-O | ssh config 명령어 옵션 |
pssh를 통한 환경설정 example
하둡을 위한 서버 환경셋팅 진행할 때 pssh를 어떻게 활용할 수 있는지 몇 가지 예를 통해 살펴보자
마스터노드의 /etc/hosts 파일을 datanode들로 복사
pscp.pssh -h ~/hosts.txt /etc/hosts /etc/hosts
openjdk를 관리서버를 제외한 모든 서버에 설치
pssh -t 0 -h etc/hosts.txt yum install -y java-1.8.0-openjsk-devel
JAVA 홈 환경설정한 Masternode의 profile을 데이터노트에 복사 (아마도 앞의 /etc/profile이 마스터노트의 profile이고, 뒤의 /etc/profile이 데이터노트들의 profile인 듯하다.) (즉, 복사대상 붙여넣기대상)
pscp.pssh -h etc/hosts.txt /etc/profile /etc/profile
JAVA 홈 환경 설정 저장
pssh -h etc/hosts.txt source /etc/profile
swapiness 설정
pssh -h ~/all_hosts.txt 'sysctl -w vm.swappiness=0'
echo 'vm.swappiness=0' >> /etc/sysctl.conf
pscp.pssh -h ~/hosts.txt /etc/sysctl.conf /etc/sysctl.conf
transparent_hugepage 설정
pssh -h ~/hosts_all.txt echo never > /sys/kernel/mm/transparent_hugepage/defrag
pssh -h ~/hosts_all.txt echo never > /sys/kernel/mm/transparent_hugepage/enabled
pscp.pssh -h ~/hosts.txt /etc/rc.local /etc/rc.local
이처럼 마스터노트에 셋팅 후 각각 노드 별로 복사 및 명령어 전송시 일일이 노드별 셋팅할 수고를 줄일 수 있으므로 서버셋팅에 소요되는 시간을 단축할 수 있다.