Ubuntu 22.04에 Apache Hadoop을 설치하는 방법
이 튜토리얼은 다음 OS 버전에 대해 존재합니다.
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 20.04(Focal Fossa)
이 페이지에서
- 전제 조건
- 자바 OpenJDK 설치
- 사용자 및 암호 없는 SSH 인증 설정\n
- Hadoop 다운로드
- Hadoop 환경 변수 설정\n
- Apache Hadoop 클러스터 설정: 의사 분산 모드
- NameNode 및 DataNode 설정
- 원사 관리자
Apache Hadoop은 빅 데이터를 처리하고 저장하기 위한 오픈 소스 프레임워크입니다. 오늘날의 산업에서 Hadoop은 빅 데이터의 표준 프레임워크가 되었습니다. Hadoop은 수백 또는 수천 대의 클러스터 컴퓨터 또는 전용 서버가 있는 분산 시스템에서 실행되도록 설계되었습니다. 이를 염두에 두고 Hadoop은 정형 및 비정형 데이터 모두에 대해 대용량 및 복잡성이 있는 대규모 데이터 세트를 처리할 수 있습니다.
모든 Hadoop 배포에는 다음 구성 요소가 포함됩니다.
- Hadoop Common: 다른 Hadoop 모듈을 지원하는 공통 유틸리티입니다.\n
- Hadoop 분산 파일 시스템(HDFS): 애플리케이션 데이터에 대한 높은 처리량 액세스를 제공하는 분산 파일 시스템입니다.\n
- Hadoop YARN: 작업 예약 및 클러스터 리소스 관리를 위한 프레임워크입니다.\n
- Hadoop MapReduce: 대용량 데이터 세트의 병렬 처리를 위한 YARN 기반 시스템입니다.\n
이 튜토리얼에서는 최신 버전의 Apache Hadoop을 Ubuntu 22.04 서버에 설치합니다. Hadoop은 단일 노드 서버에 설치되고 Hadoop 배포의 의사 분산 모드를 생성합니다.
전제 조건
이 가이드를 완료하려면 다음 요구 사항이 필요합니다.
- Ubuntu 22.04 서버 - 이 예에서는 호스트 이름이 hadoop 서버이고 IP 주소가 192.168.5.100인 Ubuntu 서버를 사용합니다.\n
- sudo/root 관리자 권한이 있는 루트가 아닌 사용자.\n
자바 OpenJDK 설치
Hadoop은 주로 Java로 작성된 Apache Software Foundation의 거대한 프로젝트입니다. 이 글을 쓰는 시점에서 최신 버전의 hadoop은 v3.3,4이며 Java v11과 완벽하게 호환됩니다.
Java OpenJDK 11은 기본적으로 Ubuntu 리포지토리에서 사용할 수 있으며 APT를 통해 설치합니다.
시작하려면 아래 apt 명령을 실행하여 Ubuntu 시스템에서 패키지 목록/리포지토리를 업데이트하고 새로 고칩니다.
sudo apt update
이제 아래 apt 명령을 통해 Java OpenJDK 11을 설치합니다. Ubuntu 22.04 리포지토리에서 default-jdk 패키지는 Java OpenJDK v11을 참조합니다.
sudo apt install default-jdk
메시지가 표시되면 y를 입력하여 확인하고 ENTER를 눌러 계속 진행합니다. 그리고 Java OpenJDK 설치가 시작됩니다.
Java가 설치된 후 아래 명령을 실행하여 Java 버전을 확인하십시오. Ubuntu 시스템에 Java OpenJDK 11을 설치해야 합니다.
java -version
이제 Java OpebnJDK가 설치되었으므로 암호가 없는 SSH 인증을 사용하여 hadoop 프로세스 및 서비스를 실행하는 데 사용할 새 사용자를 설정합니다.
사용자 및 암호 없는 SSH 인증 설정
Apache Hadoop은 시스템에서 SSH 서비스를 실행해야 했습니다. 이것은 원격 서버에서 원격 hadoop 데몬을 관리하기 위해 hadoop 스크립트에서 사용됩니다. 이 단계에서는 hadoop 프로세스 및 서비스를 실행하는 데 사용할 새 사용자를 만든 다음 암호 없는 SSH 인증을 설정합니다.
시스템에 SSH가 설치되어 있지 않은 경우 아래의 apt 명령을 실행하여 SSH를 설치하십시오. 패키지 pdsh는 병렬 모드에서 여러 호스트에서 명령을 실행할 수 있는 다중 스레드 원격 셸 클라이언트입니다.
sudo apt install openssh-server openssh-client pdsh
이제 아래 명령을 실행하여 새 사용자 hadoop을 생성하고 hadoop 사용자의 비밀번호를 설정하십시오.
sudo useradd -m -s /bin/bash hadoop
sudo passwd hadoophadoop 사용자의 새 암호를 입력하고 암호를 반복합니다.
다음으로 아래의 usermod 명령을 통해 hadoop 사용자를 sudo 그룹에 추가합니다. 이를 통해 사용자 hadoop은 sudo 명령을 실행할 수 있습니다.
sudo usermod -aG sudo hadoop
이제 hadoop 사용자가 생성되었으므로 아래 명령을 통해 hadoop 사용자로 로그인합니다.
su - hadoop
로그인하면 프롬프트가 다음과 같이 표시됩니다. "[email protected]".
그런 다음 아래 명령을 실행하여 SSH 공개 및 개인 키를 생성하십시오. 키의 암호를 설정하라는 메시지가 표시되면 Enter 키를 눌러 건너뜁니다.
ssh-keygen -t rsa
이제 SSH 키가 ~/.ssh 디렉터리에 생성됩니다. id_rsa.pub은 SSH 공개 키이고 id_rsa 파일은 개인 키입니다.
다음 명령을 통해 생성된 SSH 키를 확인할 수 있습니다.
ls ~/.ssh/
그런 다음 아래 명령을 실행하여 SSH 공개 키 id_rsa.pub를 authorized_keys 파일에 복사하고 기본 권한을 600으로 변경합니다.
ssh에서 authorized_keys" 파일은 ssh 공개 키를 저장한 곳으로, 여러 공개 키일 수 있습니다. authorized_keys 파일에 저장된 공개 키를 가지고 있고 올바른 개인 키는 암호 없이 hadoop 사용자로 서버에 연결할 수 있습니다.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysSSH 암호 없는 구성이 완료되면 아래 ssh 명령을 통해 로컬 시스템에 연결하여 확인할 수 있습니다.
ssh localhost
SSH 지문을 확인하고 추가하려면 yes를 입력하면 암호 인증 없이 서버에 연결됩니다.
이제 hadoop 사용자가 생성되고 암호 없는 SSH 인증이 구성되었으므로 hadoop 바이너리 패키지를 다운로드하여 hadoop 설치를 진행합니다.
하둡 다운로드
새 사용자를 만들고 암호 없는 SSH 인증을 구성한 후 이제 Apache Hadoop 바이너리 패키지를 다운로드하고 설치 디렉터리를 설정할 수 있습니다. 이 예에서는 hadoop v3.3.4를 다운로드하고 대상 설치 디렉토리는 /usr/local/hadoop 디렉토리입니다.
아래 wget 명령을 실행하여 Apache Hadoop 바이너리 패키지를 현재 작업 디렉터리에 다운로드합니다. 현재 작업 디렉토리에 hadoop-3.3.4.tar.gz 파일이 있어야 합니다.
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
다음으로 아래의 tar 명령을 통해 Apache Hadoop 패키지 hadoop-3.3.4.tar.gz를 추출합니다. 그런 다음 추출된 디렉토리를 /usr/local/hadoop으로 이동합니다.
tar -xvzf hadoop-3.3.4.tar.gz
sudo mv hadoop-3.3.4 /usr/local/hadoop마지막으로 hadoop 설치 디렉토리 /usr/local/hadoop의 소유권을 사용자 hadoop 및 그룹 hadoop으로 변경합니다.
sudo chown -R hadoop:hadoop /usr/local/hadoop
이 단계에서는 Apache Hadoop 바이너리 패키지를 다운로드하고 hadoop 설치 디렉터리를 구성했습니다. 이를 염두에 두고 이제 hadoop 설치 구성을 시작할 수 있습니다.
Hadoop 환경 변수 설정
아래의 nano 편집기 명령을 통해 구성 파일 ~/.bashrc를 엽니다.
nano ~/.bashrc
파일에 다음 줄을 추가합니다. 줄 끝에 다음 줄을 배치해야 합니다.
# Hadoop environment variables
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_HOME=/usr/local/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 PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"파일을 저장하고 완료되면 편집기를 종료하십시오.
다음으로 아래 명령을 실행하여 ~/.bashrc. 파일 내에서 새로운 변경 사항을 적용합니다.
source ~/.bashrc
명령이 실행된 후 새 환경 변수가 적용됩니다. 아래 명령을 통해 각 환경 변수를 확인하여 확인할 수 있습니다. 그리고 각 환경 변수의 출력을 가져와야 합니다.
echo $JAVA_HOME
echo $HADOOP_HOME
echo $HADOOP_OPTS다음으로 hadoop-env.sh 스크립트에서 JAVA_HOME 환경 변수도 구성합니다.
다음 나노 편집기 명령을 사용하여 hadoop-env.sh 파일을 엽니다. hadoop-env.sh 파일은 $HADOOP_HOME 디렉토리에서 사용할 수 있으며, 이를 hadoop 설치 디렉토리 /usr/local/hadoop라고 합니다.
nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
JAVA_HOME 환경 행의 주석을 해제하고 값을 Java OpenJDK 설치 디렉터리 /usr/lib/jvm/java-11-openjdk-amd64로 변경합니다.
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
파일을 저장하고 완료되면 편집기를 종료하십시오.
환경 변수 구성으로 아래 명령을 실행하여 시스템에서 hadoop 버전을 확인하십시오. 시스템에 Apache Hadoop 3.3.4가 설치되어 있어야 합니다.
hadoop version
이제 여러 모드로 배포할 수 있는 hadoop 클러스터를 설정하고 구성할 준비가 되었습니다.
Apache Hadoop 클러스터 설정: 의사 분산 모드
hadoop에서는 세 가지 모드로 클러스터를 생성할 수 있습니다.
- 로컬 모드(독립형) - 단일 Java 프로세스 및 비분산 모드로 실행되는 기본 hadoop 설치. 이를 통해 hadoop 프로세스를 쉽게 디버깅할 수 있습니다.\n
- 의사 분산 모드 - 단일 노드/서버로도 분산 모드로 hadoop 클러스터를 실행할 수 있습니다. 이 모드에서 hadoop 프로세스는 별도의 Java 프로세스에서 실행됩니다.\n
- 완전 분산 모드 - 여러 개 또는 수천 개의 노드/서버가 있는 대규모 Hadoop 배포. 프로덕션에서 hadoop을 실행하려면 완전 분산 모드에서 hadoop을 사용해야 합니다.\n
이 예에서는 단일 Ubuntu 서버에서 의사 분산 모드로 Apache Hadoop 클러스터를 설정합니다. 이를 위해 일부 hadoop 구성을 변경합니다.
- core-site.xml - 이것은 hadoop 클러스터에 대한 NameNode를 정의하는 데 사용됩니다.\n
- hdfs-site.xml - 이 구성은 hadoop 클러스터에서 DataNode를 정의하는 데 사용됩니다.\n
- mapred-site.xml - hadoop 클러스터에 대한 MapReduce 구성입니다.\n
- yarn-site.xml - Hadoop 클러스터에 대한 ResourceManager 및 NodeManager 구성.\n
NameNode 및 DataNode 설정
먼저 hadoop 클러스터에 대한 NameNode 및 DataNode를 설정합니다.
다음 nano 편집기를 사용하여 $HADOOP_HOME/etc/hadoop/core-site.xml 파일을 엽니다.
sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
파일에 아래 줄을 추가합니다. NameNode IP 주소를 변경해야 합니다. 그렇지 않으면 NameNode가 모든 인터페이스와 IP 주소에서 실행되도록 0.0.0.0으로 바꿀 수 있습니다.
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.5.100:9000</value>
</property>
</configuration>파일을 저장하고 완료되면 편집기를 종료하십시오.
다음으로 다음 명령을 실행하여 hadoop 클러스터의 DataNode에 사용할 새 디렉토리를 만듭니다. 그런 다음 DataNode 디렉토리의 소유권을 hadoop 사용자로 변경합니다.
sudo mkdir -p /home/hadoop/hdfs/{namenode,datanode}
sudo chown -R hadoop:hadoop /home/hadoop/hdfs그런 다음 아래 nano 편집기 명령을 사용하여 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 파일을 엽니다.
sudo nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml
파일에 다음 구성을 추가합니다. 이 예제에서는 단일 노드에 hadoop 클러스터를 설정하므로 dfs.replication 값을 1로 변경해야 합니다. 또한 DataNode에 사용할 디렉터리를 지정해야 합니다.
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hdfs/datanode</value>
</property>
</configuration>파일을 저장하고 완료되면 편집기를 종료하십시오.
NameNode 및 DataNode가 구성된 상태에서 아래 명령을 실행하여 hadoop 파일 시스템을 포맷합니다.
hdfs namenode -format
다음과 같은 출력을 받게 됩니다.
다음으로 다음 명령을 통해 NameNode 및 DataNode를 시작합니다. NameNode는 core-site.xml 파일에서 구성한 서버 IP 주소에서 실행됩니다.
start-dfs.sh
다음과 같은 출력이 표시됩니다.
이제 NameNode와 DataNode가 실행 중이므로 웹 인터페이스를 통해 두 프로세스를 모두 확인합니다.
hadoop NameNode 웹 인터페이스는 포트 9870을 실행합니다. 따라서 웹 브라우저를 열고 서버 IP 주소와 포트 9870(예: http://192.168.5.100:9870/)을 방문합니다.
이제 다음 스크린샷과 같은 페이지가 표시되어야 합니다. NameNode가 현재 활성화되어 있습니다.
이제 Datanodes 메뉴를 클릭하면 hadoop 클러스터에서 활성화된 현재 DataNode를 가져와야 합니다. 다음 스크린샷은 DataNode가 hadoop 클러스터의 포트 9864에서 실행 중임을 확인합니다.
DataNode Http 주소를 클릭하면 DataNode에 대한 세부 정보가 있는 새 페이지가 나타납니다. 다음 스크린샷은 DataNode가 /home/hadoop/hdfs/datanode 볼륨 디렉터리에서 실행 중임을 확인합니다.
NameNode 및 DataNode가 실행되면 다음으로 Yarn 관리자(Yet Another ResourceManager 및 NodeManager)에서 MapReduce를 설정하고 실행합니다.
원사 관리자
의사 분산 모드에서 Yarn에서 MapReduce를 실행하려면 구성 파일을 몇 가지 변경해야 합니다.
다음 nano 편집기 명령을 사용하여 $HADOOP_HOME/etc/hadoop/mapred-site.xml 파일을 엽니다.
sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
파일에 아래 줄을 추가합니다. mapreduce.framework.name을 yarn으로 변경해야 합니다.
<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>파일을 저장하고 완료되면 편집기를 종료하십시오.
그런 다음 다음 nanoe 편집기 명령을 사용하여 Yarn 구성 $HADOOP_HOME/etc/hadoop/yarn-site.xml을 엽니다.
sudo nano $HADOOP_HOME/etc/hadoop/yarn-site.xml
다음 설정으로 기본 구성을 변경하십시오.
<configuration>
<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 데몬을 시작하십시오. 그러면 ResourceManager와 NodeManager가 모두 시작되는 것을 볼 수 있습니다.
start-yarn.sh
ResourceManager는 기본 포트 8088에서 실행 중이어야 합니다. 웹 브라우저로 돌아가서 서버 IP 주소 다음에 ResourceManager 포트 8088(예: http://192.168.5.100:8088/)을 방문합니다.
hadoop ResourceManager의 웹 인터페이스가 표시되어야 합니다. 여기에서 hadoop 클러스터 내에서 실행 중인 모든 프로세스를 모니터링할 수 있습니다.
노드 메뉴를 클릭하면 Hadoop 클러스터에서 현재 실행 중인 노드를 가져와야 합니다.
이제 Hadoop 클러스터는 의사 분산 모드에서 실행됩니다. 이는 각 Hadoop 프로세스가 NameNode, DataNode, MapReduce 및 Yarn을 포함하는 단일 노드 Ubuntu 서버 22.04에서 단일 프로세스로 실행됨을 의미합니다.
결론
이 가이드에서는 단일 시스템 Ubuntu 22.04 서버에 Apache Hadoop을 설치했습니다. 의사 분산 모드를 사용하여 Hadoop을 설치했습니다. 즉, 각 Hadoop 구성 요소가 시스템에서 단일 Java 프로세스로 실행됩니다. 이 가이드에서는 Java 설정 방법, 시스템 환경 변수 설정 방법, SSH 공개-개인 키를 통한 암호 없는 SSH 인증 설정 방법도 배웠습니다.
이 유형의 Hadoop 배포인 의사 분산 모드는 테스트용으로만 권장됩니다. 중간 또는 대규모 데이터 세트를 처리할 수 있는 분산 시스템을 원하는 경우 클러스터 모드에서 Hadoop을 배포할 수 있습니다. 이 모드에서는 더 많은 컴퓨팅 시스템이 필요하고 애플리케이션에 고가용성을 제공합니다.