[기술공부]/Linux

Ubuntu에서 Hadoop 설치하기

DH’s Blog 2023. 10. 18. 11:17
반응형

데이터 분야에서 업무를 진행하면서, 평소 리눅스 운영체제에 대해 배워보고 싶다는 생각을 갖고 있었다. 현재 재직중인 회사에서는 DA(데이터 아키텍트)가 운영팀 & 엔지니어링팀(개발팀)으로 나뉘며 나는 개발팀에 소속되어 있다. 하지만 개발팀 특성상 실제 서버단의 데이터 수집은 TA(테크니컬 아키텍트)가 담당하고, DA는 수집된 데이터를 처리하고 가공해주는 부분을 담당하고 있다. 업무를 하면서 서버단에 직접 접근해서 작업해보고 싶다는 생각이 있었고 이번 기회에 시작하게 되었다. 익숙하지 않은 부분이어서 어려움은 있으나 하나씩 천천히 배워보고자 한다.

 

Ubuntu는 Linux 커널을 기반으로 하는 운영 체제 시스템으로 이번 시간에는 Ubuntu에서 하둡을 설치하는 과정을 알아보겠다.

 

 


1. Java 설치하기

먼저, 아래 명령문을 이용하여 Java를 설치한다.

sudo apt update
sudo apt install openjdk-8-jdk -y

설치된 Java 버전을 확인해서 정상적으로 설치 완료되었음을 확인한다.

java -version

 

 

 

2. 하둡용 계정 생성 후 sudo 그룹에 추가하기

(1) 계정 생성

  • 클러스터를 효율적으로 관리하고 보안의 안정성 때문에 하둡용 계정을 따로 만들어준다. 일반적으로는 yarn, hdfs, mapred 용으로 계정을 분리해서 사용하는 것이 좋지만 본 실습에서는 hadoop 계정 하나만을 가지고 진행한다.
sudo adduser hadoop

 

하둡 계정을 만들었으면, root 권한으로 들어가서 하둡 계정을 sudo 그룹에 추가해준다. (참고. sudo 그룹은 root 권한을 사용할 수 있는 유저 그룹이다.)

su -
usermod -aG sudo hadoop
su - hadoop

 

(2) ssh 통신 연결하기

하둡은 ssh 프로토콜을 이용해서 클러스터 간의 내부 통신으로 노드를 제어할 수 있다. (ex. Name node가 설치된 서버에서 Data node가 설치된 서버에 접근해서 Tracker를 구동) 이를 위해 공개키를 모든 노드에 공유해주어, 모든 서버 간에 패스워드 없이 자유롭게 통신할 수 있게 만들어준다.

sudo apt install openssh-server openssh-client -y
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
ssh localhost

 

 

 

3. 하둡 설치 및 파일 압축 해제하기

아래 하둡 사이트에서 본인이 사용할 버전의 파일 link를 사용하며 본 실습에서는 3.2.3 버전을 활용했다.

https://downloads.apache.org/hadoop/common/

 

Index of /hadoop/common

 

downloads.apache.org

wget https://downloads.apache.org/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz
tar xzf hadoop-3.2.3.tar.gz

 

 

 

4. 하둡 환경변수 추가하기

기본적으로 사용할 하둡 환경 변수를 설정해준다. (참고. 아래 nano 명령어는 리눅스에서 사용하는 텍스트 편집기 기능이라고 생각하면 된다)

nano .bashrc

 

bashrc 파일이 열리면 아래 내용을 추가하고 (ctrl + x >> y >> Enter)로 저장 후 파일을 빠져나온다. (참고. 아래에 나오는 모든 파일 수정시에 이 방법으로 동일하게 저장 후 빠져나온다)

 

아래 변수 설정을 통해 앞으로 사용되는 $HADOOP_HOME은 (/home/hadoop/hadoop-3.2.3)을 가리킨다. 해당 경로는 본인의 컴퓨터에 하둡 파일이 저장된 경로로 지정해주는 것으로, 아래 내용에서 HADOOP_HOME 디렉토리 부분만 본인에 맞게 수정해주면 된다.

 

#Hadoop related options
export HADOOP_HOME=/home/hadoop/hadoop-3.2.3
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 PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib.native"

(결과) 추가된 하둡 환경 설정

 

아래 명령어를 실행하여 환경변수가 추가된 것을 적용시킨다.

source ~/.bashrc

 

 

 

5. 하둡 환경설정하기

아래 경로에 들어가보면 hadoop 디렉토리($HADOOP_HOME/etc/hadoop) 하위에 소스 파일들을 확인할 수 있는데, 여기서 본인이 실행하고 싶은 하둡 환경설정을 지정한다.

$HADOOP_HOME/etc/hadoop 하위의 파일 리스트

 

(1) Java Home 디렉토리 설정

먼저, Java가 설치된 경로를 확인한다. (나의 경우 usr/lib/jvm/java-8-openjdk-amd64 하위에 원본 파일이 있음을 확인했다)

which javac
readlink -f /usr/bin/javac

 

다음으로 편집하고자 하는 hadoop-env.sh 파일을 열어준다.

nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh

 

열린 파일에서 스크롤을 내려보면 주석으로 처리된 export JAVA_HOME= 부분이 보이는데, 주석을 해제하고 위에서 찾은 파일 경로로 수정해준다. (참고. ctrl+x >> export JAVA_HOME을 검색하면 빨리 찾을 수 있다)

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

(결과) 수정된 모습

 

 

(2) core-site.xml 파일 편집하기 (하둡의 핵심 property를 정의하는 파일)

먼저 /home/hadoop/ 경로에 tmpdata 폴더를 만들어주고, 이 부분도 본인 컴퓨터의 경로에 맞게 설정해준다.

(예시) 하둡 파일 설치 경로가 /home/hadoop/hadoop-3.2.3이면, /home/hadoop/ 경로에 폴더를 만들어준다.

mkdir /home/hadoop/tmpdata
nano $HADOOP_HOME/etc/hadoop/core-site.xml

 

core-site.xml 파일이 열리면 아래 내용을 추가해서 저장해준다.

<configuration>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/tmpdata</value>
	</property>
	<property>
		<name>fs.default.name</name>
		<value>hdfs://127.0.0.1:9000</value>
	</property>
</configuration>

(결과) 수정된 모습

 

 

(3) hdfs-site.xml 파일 편집하기 (노드 저장소 디렉토리를 지정하는 파일)

먼저, 네임노드/보조 네임노드/데이터노드의 데이터 저장소에 대한 디렉토리 경로를 생성하고 hadoop 계정에 소유자 권한을 부여해준다.

mkdir -p /home/hadoop/hdfs/namenode
mkdir -p /home/hadoop/hdfs/secondnode
mkdir -p /home/hadoop/hdfs/datanode
chown hadoop /home/hadoop/hdfs -R
mkdir -p /home/hadoop/yarn
chown hadoop /home/hadoop/yarn -R

hdfs, yarn 디렉토리 생성 확인

 

디렉토리를 만들었으면 hdfs-site.xml 파일을 열어준다.

nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml

 

hdfs-site.xml 파일이 열리면 아래 내용을 추가해서 저장해준다.

  • 단일 노드에선 파일 block을 복제해줄 필요가 없기 때문에 dfs.replication의 값을 1로 설정한다.
  • 위에서 생성한 네임노드, 보조 네임노드, 데이터노드의 저장소 디렉토리 경로로 지정해준다.
<configuration>
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:/home/hadoop/hdfs/namenode</value>
	</property>
	<property>
		<name>fs.checkpoint.dir</name>
		<value>file:/home/hadoop/hdfs/secondnode</value>
	</property>
	<property>
		<name>fs.checkpoint.edits.dir</name>
		<value>file:/home/hadoop/hdfs/secondnode</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:/home/hadoop/hdfs/datanode</value>
	</property>
</configuration>

(결과) 수정된 모습

 

 

(4) mapred-site.xml 파일 편집하기 (맵리듀스 관련된 내용을 정의하는 파일)

먼저, mapred-site.xml 파일을 열어준다.

nano $HADOOP_HOME/etc/hadoop/mapred-site.xml

 

mapred-site.xml 파일이 열리면 아래 내용을 추가해주어, 맵리듀스 프레임워크 이름을 yarn으로 지정해준다.

<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>

(결과) 수정된 모습

 

 

(5) yarn-site.xml 파일 편집하기 (yarn 관련 세팅을 정의하는 파일)

먼저, yarn-site.xml 파일을 열어준다.

nano $HADOOP_HOME/etc/hadoop/yarn-site.xml

 

yarn-site.xml 파일이 열리면 아래 내용을 추가해준다. (참고. yarn-nodemanager.aux-services으로 mapreduce.shuffle 방식을 사용할 것임을 노드매니저에게 전달해준다)

<configuration>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
		<value>org.apache.hadoop.mapred.ShuffleHandler</value>
	</proerty>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>0.0.0.0</value>
	</property>
	<property>
		<name>yarn.resourcemanager.address</name>
		<value>0.0.0.0:8032</value>
	</property>	
	<property>
		<name>yarn.web-proxy.address</name>
		<value>0.0.0.0:8089</value>
	</property>
</configuration>

(결과) 수정된 모습

 

 

6. HDFS 네임노드 포맷하기

HDFS 네임노드(파일 시스템의 모든 metadata를 추적하는 역할)를 시작하려면 네임노드를 포맷하는 과정이 필요하다.

hdfs namenode -format

포맷 결과창

 

 

7. 하둡 클러스터 실행하기

더보기

아래 명령어만 실행하면 하둡이 실행되는데 나는 위에서 수정한 파일들이 어떻게 호출되고 불러와져서 실행되는지 궁금했다. 그래서 하둡 내의 모든 코드 파일을 뜯어보면서 찾아봤다.

 

${HADOOP_HOME}/sbin/start-dfs.sh 쉘 동작과정에 대하여

참고로, 4번에서 정의한 환경 변수들이 아래 쉘에서 사용된다.

 

step1) 하둡 실행에 필요한 변수 및 파일을 불러온다. (아래 순서대로 파일 호출함)

  • ${HADOOP_HOME}/libexec/hdfs-config.sh
  • ${HADOOP_HOME}/libexec/hadoop-config.sh
  • ${HADOOP_HOME}/libexec/hadoop-functions.sh
    • ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh : 5-1번에서 수정한 파일
    • ${HADOOP_HOME}/libexec/shellprofile/* : 하둡 실행에 필요한 클래스 호출

 

step2) 네임노드 >> 데이터노드 >> 보조 네임노드 순으로 실행된다. (아래 순서대로 파일 호출함)

  • ${HADOOP_HDFS_HOME}/bin/hdfs
  • ${HADOOP_HOME}/libexec/hdfs-config.sh
  • ${HADOOP_HOME}/libexec/hadoop-config.sh

hadoop-3.2.3/sbin/start-dfs.sh
hadoop-3.2.3/sbin/start-yarn.sh
jps

실행 결과창

 

 

8. 하둡 UI 브라우저 접속해서 확인하기

하둡이 정상적으로 실행되었다면 아래 UI 접속을 통해 네임노드, 데이터 노드, yarn 리소스 상황을 모니터링할 수 있다.

 

(1) Namenode UI - http://localhost:9870

 

(2) Datanode UI - http://localhost:9864

 

(3) Yarn resource manager UI - http://localhost:8088

 

 

 

9. (실습 완료 후) 하둡 종료

아래 명령을 통해 하둡이 종료되면 htop 으로 cpu 사용량을 확인해서 정상적으로 하둡이 종료된 것을 볼 수 있다.

hadoop-3.2.3/sbin/stop-yarn.sh
hadoop-3.2.3/sbin/stop-dfs.sh

 

 

 

 

 

 


 

 

처음 해보는 작업이어서 헤매는 부분도 많았고, 실습해보면서 수정한 파일들이 하둡 실행에 어떻게 사용되는지 너무 궁금했다. (평소 궁금한 것을 못 넘기는 편이어서ㅎ) 설치까지 완료한 하둡을 다시 삭제하고 재설치해보면서 코드 구조와 어떤 방식으로 동작되는지 뜯어보았다. 이 글을 접하는 누군가에게도 단순히 명령문을 따라 써보는 것보다, (설치 >> 디렉토리에 설치된 파일 리스트 확인 >> 각 파일들을 하나씩 열어보면서 어떤 코드가 있는지) 찾아보는 것을 적극 추천한다. 아래는 내가 실습하면서 참고한 사이트이며, 다음 시간에도 이어서 공부해볼 예정이다.

 

 

 

반응형