Linux

ssh(secure shell) & pssh(parallel ssh)

jhpaik 2025. 5. 1. 10:07

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 

 

이처럼 마스터노트에 셋팅 후 각각 노드 별로 복사 및 명령어 전송시 일일이 노드별 셋팅할 수고를 줄일 수 있으므로 서버셋팅에 소요되는 시간을 단축할 수 있다.