Hadoop On-premise생성
- 데이터 엔지니어링 수업 과정 중 Hadoop Spark수업을 진행하기에 앞서 희망하는 사람들을 대상으로 Hadoop전용 노트북을 받아서 클러스터를 생성
- 총 8대의 컴퓨터를 대여하여 Ubuntu22.04버전 운영체제로 설치하고, 각 컴퓨터를 namenode, secondnode, datanode1~5, client를 설정
ibus-setup
입력 후 한글 사용 가능 설정sudo adduser hadoop
ssh 키 생성 이유
- 인증 및 보안 : ssh키를 이용하여 클러스터 노드 간에 안전한 통신을 위해 설정
- 자동 접속 : ssh키를 사용하여 각 노드별 공유시 암호를 입력하지 않고 원격 노드에 접속 가능
sudo apt install openssh-server
ssh-keygen -t rsa
: ssh 키 생성- 키 생성 후
cat id_rsa_pub >> authorized_keys
입력 후 ssh키를 가진 authorized_keys 생성chmod 600 ./authorized_keys
: 소유자에게만 읽기, 쓰기 적용visudo
입력 후 hadoop ALL = (ALL:ALL) ALL 추가
ufw란?
- 리눅스 시스템에서 사용되는 방화벽 관리 도구 (네트워크 트래픽 제어 및 보호)
hadoop클러스터 설정 시 ufw를 비활성화하는 이유
- 네트워크 통신 : 클러스터의 노드 간의 데이터 송수신이 되어야 하는데, ufw가 활성화되어 있으면 클러스터 노드 가의 통신이 제한될 가능성이 있음
- port 접근 : HDFS는 데이터 전송을 특정 포트(50070)를 사용하는데, ufw가 활성화 되있을 시 클러스터의 성능에 영향을 줄 수 있음
sudo apt install ufw
sudo systemctl stop ufw #방화벽 서비스 일시 중지
sudo systemctl disable ufw #시스템 부팅 시 ufw가 자동으로 시작 되지 않도록 설정
고정 IP설정 이유
- 식별성 및 안전성 : 각 노드별 식별 확인을 위해서 설정
- 네트워크 통신 : 고정 IP주소 설정 시 노드 간 통신에 필요한 IP주소를 미리 알 수 있어, 이를 기반으로 통신설정 가능
수동
으로 설정 후 주소
에 본인의 IP주소, 넷마스크는 255.255.255.0, 게이트웨이는 192.168.80.1
로 모든 노드 동일하게 설정sudo apt install java-1.8.0-openjdk ant -y
: java 설치vim ~/.bashrc
터미널에서 입력 후 경로 지정을 위해 아래 명령어 입력export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.372.b07-1.el7_9.x86_64"
sudo apt install wget
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
tar xzf hadoop-3.2.1.tar.gz
mv ./hadoop-3.2.1 ./hadoop
export SPARK_HOME=/home/hadoop/spark
export HADOOP_HOME=/home/hadoop/hadoop
export HIVE_HOME=/home/hadoop/hive
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin
scp ./authorized_keys client:/home/hadoop/.ssh/
scp ./authorized_keys namenode:/home/hadoop/.ssh/
scp ./authorized_keys secondnode:/home/hadoop/.ssh/
scp ./authorized_keys datanode1:/home/hadoop/.ssh/
scp ./authorized_keys datanode2:/home/hadoop/.ssh/
scp ./authorized_keys datanode3:/home/hadoop/.ssh/
scp ./authorized_keys datanode4:/home/hadoop/.ssh/
scp ./authorized_keys datanode5:/home/hadoop/.ssh/
vim /etc/hosts
: hosts파일 수정192.168.80.14 datanode1
192.168.80.150 datanode2
192.168.80.169 datanode3
192.168.80.160 datanode4
192.168.80.155 datanode5
192.168.80.170 client
192.168.80.4 namenode
192.168.80.28 secondnode
from pythonping import ping
node_list = ['namenode',
'secondnode',
'datanode1',
'datanode2',
'datanode3',
'datanode4',
'datanode5',
'client']
for hostname in node_list :
response = ping(hostname)
if response.success():
print(f"{hostname} is reachable")
else:
print(f"{hostname} is unreachable")
sudo python3 hadoop_ping.py
을 입력하면 각 노드별 상태를 확인 가능함