Notebook: M1 Macbook Pro
VM machine: UTM
OS: Ubuntu 22.04 (LTS)
hadoop: 3.4.0
맥 환경에서는 터미널에서 하둡을 설치가 가능하지만 리눅스 환경에 익숙해지기 위해서 우분투로 진행해보려고 한다. 맥에서 바로 하둡 설치하다가 막힌 건 비밀..
진행 순서
1. 자바
1.1. 자바 설치
1.2. 자바 환경변수 설정
2. ssh 연결
2.1. openssh-sever & pdsh 설치
2.2. ssh 공개키 & 개인키 생성
2.3. ssh 키 접속
3. 하둡
3.1. 하둡 설치
3.2. 하둡 환경변수 설정
3.3. 하둡 파일 변경
3.4. 하둡 실행
시작 전)
sudo dhclient
putty 등을 쓰지 않고 가상 머신 위에 우분투 하나로 실행할 때는 인터넷 ip 획득을 위해 DHCP 클라이언트를 통해서 네트워크 인터페이스를 구성하고 인터넷에 연결하기. 보통 윈도우에서는 putty를 사용하고, 맥은 터미널에서 바로 설치할 수 있기 때문에 사용은 잘 안 함.
1. 자바
1.1. 자바 install
sudo apt-get update
apt 업데이트 실행
sudo apt-get install openjdk-11-jdk
자바 11버전 설치 실행
java -version
javac --version
자바 버전 확인

1.2. 자바 환경변수 설정
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/*:.
자바 환경변수 설정 -> 위 코드를 vi ~/.bashrc로 들어가서 맨 아래에 3줄 추가
- JAVA_HOME: JDK가 설치된 폴더
- PATH: 실행 프로그램 대상 검색
- CLASSPATH: 사용자 정의 클래스 및 패키지를 찾아야 하는 위치를 지정

source ~/.bashrc
source로 변경사항 적용하기

echo 명령어를 사용해서 경로 확인하기. 위처럼 나오면 적용 완료.
2. SSH 연결
2.1. openssh-server & pdsh 설치
sudo apt-get install openssh-server
Openssh Server 설치. 하둡이 클러스터에 접속할 때 SSH를 통해 터미널을 이용하여 관리 및 작업을 수행할 수 있다.
sudo apt-get install pdsh
pdsh 설치. PDSH를 설치하면 클러스터의 각 노드에 동시에 명령을 내려 수행할 수 있다. 하둡 설치 및 관리를 위해서 SSH 서버가 필요하고, pdsh를 설치하면 클러스터 노드 간의 효율적이 명령 실행이 가능해진다.
2.2. ssh 공개키 & 개인키 생성
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
공개키 생성
- ssh-keygen : SSH 키 생성 및 관리를 위한 유틸리티
- -t rsa : RSA 알고리즘을 사용하여 키 생성
- -P '' : 비밀번호를 설정하지 않고 생성
- -f ~/.ssh/id_rsa : 생성할 키 파일의 이름과 경로를 지정
- ~/.ssh 디렉토리에 'id_rsa'(개인키)와 'id_rsa.pub'(공개키)파일이 생성
- SSH 키를 통해 원격 접속이나 파일 전송 등에서 비밀번호 입력 없이 보연 연결을 제공하는 데 사용
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# authorized_keys에 추가되었는지 확인
vim authorized_keys
# ssh localhost를 입력하면 암호 없이 접속하기 위해 권한 부여
chmod 0600 ~/.ssh/authorized_keys
- cat : 파일의 내용을 출력하는 명령어
- '>>' : 리다이렉션 연산자, 오른쪽의 파일에 데이터 추가
- chmod : 파일 권한을 변경하는 명령어
- 0600 : 'authorized_keys'의 파일의 새로운 권한을 나타내는 숫자로 첫 번째 자리는 소유자 권한, 두 번째 자리는 그룹 권한, 세 번째 자리는 다른 사용자권한. 즉 소유자에게 읽기와 쓰기 권한만 주고, 그룹과 다른 사용자에게는 권한을 주지 않음을 의미
- ssh localhost : 로컬 머신으로 SSH 접속을 시도하는 명령어
2.3. ssh 키 접속

ssh 키로 비밀번호 없이 접속 성공
이때 rcmd socket permission denied 에러가 발생하면 아래 글 확인
https://min8282.tistory.com/35
[Hadoop] rcmd socket permission denied
문제)원인은 pdsh 기본 rcmd가 ssh가 아닌 rsh로 되어 있다. 즉, ssh 원격 로그인 인증이 동일하지 않을 때 발생한다. 해결)~/.bashrc 파일에 아래의 환경변수 내용을 추가한 뒤, 적용해 준다.$ export PDSD_RC
min8282.tistory.com
3. 하둡
3.1. 하둡 설치
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz
하둡 다운로드
tar xvfz hadoop-3.4.0.tar.gz
다운 받은 하둡 압축해제 -> hadoop-3.4.0 폴더 생성됨
3.2. 하둡 환경변수 설정

vi ~/.bashrc
vi ~/.bashrc 명령어로 자바 환경변수 설정하는 것처럼 아래 코드를 맨 아래에 추가
export HADOOP_HOME=/home/ubuntu/hadoop-3.4.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
source ~/.bashrc
추가 후 source 명령어로 변경 사항 적용
하둡과 자바 경로 연결

hadoop-3.4.0 -> etc -> hadoop 폴더로 가서
vi hadoop-env.sh
hadoop-env.sh 파일 아래처럼 변경

JAVA_HOME과 HADOOP_HOME 앞에 #을 지워 주석처리를 없애고 자신의 자바 경로와 하둡 경로 작성
3.3. 하둡 파일 변경
동일하게 hadoop-3.4.0 -> etc -> hadoop 폴더로 가서 4개의 파일을 변경
1. core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/ubuntu/temp</value>
</property>
</configuration>
- hadoop.tmp.dir : hadoop 프레임워크에서 임시 파일 및 디렉토리를 저장하는 경로 설정
- fs.default.name : hadoop의 파일시스템의 기본 위치를 설정
2. hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
- dfs.replication : HDFS에서 데이터의 복제 수 설정
3. mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
- mapreduce.framework.name : 맵리듀스 작업 실행하는 데 사용할 프레임워크
- yarn.app.mapreduce.am.env : YARN 맵리듀스 어드민 환경변수
- mapreduce.map.env :맵리듀스 job의 map task가 실행될 때 사용되는 환경 변수
- mapreduce.reduce.env : 맵리듀스 job의 reduce task 실행될 때 사용되는 환경 변수
4. yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
- yarn.nodemanager.aux-services : YARN에서 실행되는 보조 서비스 설정
- yarn.nodemanager.aux-services.mapreduce.shuffle.class : YARN의 보조서비스인 맵리듀스 셔플링을 처리하는 클래스를 지정
source ~/.bashrc
변경사항 적용
3.4. 하둡 실행
hdfs namenode -format
처음 한 번만 HDFS 포맷 진행


start-all.sh로 하둡 데몬 실행. 종료할 때는 stop-all.sh
start-dfs.sh # dfs 실행
jps # jps를 통해 데이터 노드, 네임 노드, 세컨더리 네임노드 실행 확인
start-yarn.sh # yarn 실행
jps # 리소스매니저, 노드매니저 실행 확인
dfs와 yarn을 따로 실행도 가능

Hadoop daemon 상태를 확인하려면 start-all.sh로 각 데몬을 실행시킨 후 jps 명령어로 확인.
정상적으로 돌아가고 있는 것을 볼 수 있다.
나는 가상 머신에 DHCP로 인터넷을 연결했기 때문에 localhost:8088 말고 192.168.64.4:8088 접속했다. putty 등으로 우분투 서버를 연결했거나 로컬에서 진행하면 localhost로 접속하길 바란다.
YARN resource manager
http://192.168.64.4:8088

NameNode UI
http://192.168.64.4:9870

DataNode
http://192.168.64.4:9864

Reference
우분투 환경에서 설치 참고
- https://velog.io/@dbswlfnvl/%EC%9A%B0%EB%B6%84%ED%88%AC-%ED%95%98%EB%91%A1%EC%84%A4%EC%B9%98
- https://mingg123.tistory.com/125
- https://spidyweb.tistory.com/214
맥 환경에서 설치 참고
- https://benban.tistory.com/70
- https://velog.io/@boyunj0226/M1-%EB%A7%A5%EC%97%90%EC%84%9C-Hadoop-Spark-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
'Dev > Hadoop' 카테고리의 다른 글
| [Linux/Ubuntu] DHCP Client/sudo dhclient (2) | 2024.05.08 |
|---|---|
| [Hadoop] rcmd socket permission denied (1) | 2024.05.08 |