Ubuntu 20.04에서 Apache Hadoop을 설치 및 구성하는 방법
이 튜토리얼은 다음 OS 버전에 대해 존재합니다.
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 20.04(Focal Fossa)
이 페이지에서
- 전제 조건
- 시스템 패키지 업데이트
- 자바 설치
- Hadoop 사용자 생성 및 암호 없는 SSH 설정\n
- Hadoop 설치
- Hadoop 구성
- Java 환경 변수 구성\n
- core-site.xml 파일 구성
- hdfs-site.xml 파일 구성
- yarn-site.xml 파일 구성
Apache Hadoop은 클러스터 시스템에서 실행되는 다양한 빅 데이터 애플리케이션의 데이터를 관리, 저장 및 처리하는 데 사용되는 오픈 소스 프레임워크입니다. C 및 쉘 스크립트의 일부 원시 코드와 함께 Java로 작성되었습니다. HDFS(분산 파일 시스템)를 사용하고 단일 서버에서 수천 대의 시스템으로 확장합니다.
Apache Hadoop은 다음 네 가지 주요 구성 요소를 기반으로 합니다.
- Hadoop Common : 다른 Hadoop 모듈에 필요한 유틸리티 및 라이브러리 모음입니다.\n
- HDFS: 여러 노드에 분산된 Hadoop 분산 파일 시스템이라고도 합니다.\n
- MapReduce : 방대한 양의 데이터를 처리하는 애플리케이션을 작성하는 데 사용되는 프레임워크입니다.\n
- Hadoop YARN: Yet Another Resource Negotiator라고도 하는 Hadoop의 리소스 관리 계층입니다.\n
이 튜토리얼에서는 Ubuntu 20.04에서 단일 노드 Hadoop 클러스터를 설정하는 방법을 설명합니다.
전제 조건
- 4GB RAM으로 Ubuntu 20.04를 실행하는 서버.\n
- 서버에 루트 암호가 구성되어 있습니다.\n
시스템 패키지 업데이트
시작하기 전에 시스템 패키지를 최신 버전으로 업데이트하는 것이 좋습니다. 다음 명령으로 수행할 수 있습니다.
apt-get update -y
apt-get upgrade -y시스템이 업데이트되면 시스템을 다시 시작하여 변경 사항을 적용하십시오.
자바 설치
Apache Hadoop은 Java 기반 애플리케이션입니다. 따라서 시스템에 Java를 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.
apt-get install default-jdk default-jre -y
설치가 완료되면 다음 명령을 사용하여 설치된 Java 버전을 확인할 수 있습니다.
java -version
다음 출력이 표시되어야 합니다.
openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1) OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)
Hadoop 사용자 생성 및 암호 없는 SSH 설정
먼저 다음 명령을 사용하여 hadoop이라는 새 사용자를 만듭니다.
adduser hadoop
다음으로 sudo 그룹
usermod -aG sudo hadoop에 hadoop 사용자를 추가합니다.다음으로 hadoop 사용자로 로그인하고 다음 명령을 사용하여 SSH 키 쌍을 생성합니다.
su - hadoop
ssh-keygen -t rsa다음 출력이 표시되어야 합니다.
Generating public/private rsa key pair. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): Created directory '/home/hadoop/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/hadoop/.ssh/id_rsa Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub The key fingerprint is: SHA256:HG2K6x1aCGuJMqRKJb+GKIDRdKCd8LXnGsB7WSxApno The key's randomart image is: +---[RSA 3072]----+ |..=.. | | O.+.o . | |oo*.o + . o | |o .o * o + | |o+E.= o S | |=.+o * o | |*.o.= o o | |=+ o.. + . | |o .. o . | +----[SHA256]-----+
다음으로 이 키를 인증된 ssh 키에 추가하고 적절한 권한을 부여합니다.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys다음으로 다음 명령을 사용하여 암호가 없는 SSH를 확인합니다.
ssh localhost
비밀번호 없이 로그인하면 다음 단계로 진행할 수 있습니다.
하둡 설치
먼저 hadoop 사용자로 로그인하고 다음 명령을 사용하여 최신 버전의 Hadoop을 다운로드합니다.
su - hadoop
wget https://downloads.apache.org/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz다운로드가 완료되면 다음 명령을 사용하여 다운로드한 파일의 압축을 풉니다.
tar -xvzf hadoop-3.2.1.tar.gz
다음으로 추출된 디렉토리를 /usr/local/로 이동합니다.
sudo mv hadoop-3.2.1 /usr/local/hadoop
다음으로 다음 명령을 사용하여 로그를 저장할 디렉터리를 만듭니다.
sudo mkdir /usr/local/hadoop/logs
다음으로 hadoop 디렉토리의 소유권을 hadoop으로 변경합니다.
sudo chown -R hadoop:hadoop /usr/local/hadoop
다음으로 Hadoop 환경 변수를 구성해야 합니다. ~/.bashrc 파일을 편집하면 됩니다.
nano ~/.bashrc
다음 줄을 추가합니다.
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 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
하둡 구성
이 섹션에서는 단일 노드에서 Hadoop을 설정하는 방법을 알아봅니다.
Java 환경 변수 구성
다음으로 hadoop-env.sh에서 Java 환경 변수를 정의하여 YARN, HDFS, MapReduce 및 Hadoop 관련 프로젝트 설정을 구성해야 합니다.
먼저 다음 명령을 사용하여 올바른 Java 경로를 찾습니다.
which javac
다음 출력이 표시되어야 합니다.
/usr/bin/javac
그런 다음 다음 명령을 사용하여 OpenJDK 디렉터리를 찾습니다.
readlink -f /usr/bin/javac
다음 출력이 표시되어야 합니다.
/usr/lib/jvm/java-11-openjdk-amd64/bin/javac
다음으로 hadoop-env.sh 파일을 편집하고 Java 경로를 정의합니다.
sudo nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
다음 줄을 추가합니다.
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export HADOOP_CLASSPATH+=" $HADOOP_HOME/lib/*.jar"
다음으로 Javax 활성화 파일도 다운로드해야 합니다. 다음 명령으로 다운로드할 수 있습니다.
cd /usr/local/hadoop/lib
sudo wget https://jcenter.bintray.com/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar이제 다음 명령을 사용하여 Hadoop 버전을 확인할 수 있습니다.
hadoop version
다음 출력이 표시되어야 합니다.
Hadoop 3.2.1 Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842 Compiled by rohithsharmaks on 2019-09-10T15:56Z Compiled with protoc 2.5.0 From source with checksum 776eaf9eee9c0ffc370bcbc1888737 This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.2.1.jar
core-site.xml 파일 구성
다음으로 NameNode의 URL을 지정해야 합니다. core-site.xml 파일을 편집하면 됩니다.
sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
다음 줄을 추가합니다.
<configuration> <property> <name>fs.default.name</name> <value>hdfs://0.0.0.0:9000</value> <description>The default file system URI</description> </property> </configuration>
완료되면 파일을 저장하고 닫습니다.
hdfs-site.xml 파일 구성
다음으로 노드 메타데이터, fsimage 파일 및 편집 로그 파일을 저장할 위치를 정의해야 합니다. hdfs-site.xml 파일을 편집하면 됩니다. 먼저 노드 메타데이터를 저장할 디렉터리를 만듭니다.
sudo mkdir -p /home/hadoop/hdfs/{namenode,datanode}
sudo chown -R hadoop:hadoop /home/hadoop/hdfs다음으로 hdfs-site.xml 파일을 편집하고 디렉터리 위치를 정의합니다.
sudo nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml
다음 줄을 추가합니다.
<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>
파일을 저장하고 닫습니다.
mapred-site.xml 파일 구성
다음으로 MapReduce 값을 정의해야 합니다. mapred-site.xml 파일을 편집하여 정의할 수 있습니다.
sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
다음 줄을 추가합니다.
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
파일을 저장하고 닫습니다.
yarn-site.xml 파일 구성
다음으로, yarn-site.xml 파일을 편집하고 YARN 관련 설정을 정의해야 합니다.
sudo nano $HADOOP_HOME/etc/hadoop/yarn-site.xml
다음 줄을 추가합니다.
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
완료되면 파일을 저장하고 닫습니다.
HDFS 네임노드 포맷
다음으로 Hadoop 구성을 검증하고 HDFS NameNode를 포맷해야 합니다.
먼저 Hadoop 사용자로 로그인하고 다음 명령을 사용하여 HDFS NameNode를 포맷합니다.
su - hadoop
hdfs namenode -format다음 출력이 표시되어야 합니다.
2020-06-07 11:35:57,691 INFO util.GSet: VM type = 64-bit 2020-06-07 11:35:57,692 INFO util.GSet: 0.25% max memory 1.9 GB = 5.0 MB 2020-06-07 11:35:57,692 INFO util.GSet: capacity = 2^19 = 524288 entries 2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 10 2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10 2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25 2020-06-07 11:35:57,710 INFO namenode.FSNamesystem: Retry cache on namenode is enabled 2020-06-07 11:35:57,710 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis 2020-06-07 11:35:57,712 INFO util.GSet: Computing capacity for map NameNodeRetryCache 2020-06-07 11:35:57,712 INFO util.GSet: VM type = 64-bit 2020-06-07 11:35:57,712 INFO util.GSet: 0.029999999329447746% max memory 1.9 GB = 611.9 KB 2020-06-07 11:35:57,712 INFO util.GSet: capacity = 2^16 = 65536 entries 2020-06-07 11:35:57,743 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1242120599-69.87.216.36-1591529757733 2020-06-07 11:35:57,763 INFO common.Storage: Storage directory /home/hadoop/hdfs/namenode has been successfully formatted. 2020-06-07 11:35:57,817 INFO namenode.FSImageFormatProtobuf: Saving image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 using no compression 2020-06-07 11:35:57,972 INFO namenode.FSImageFormatProtobuf: Image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 of size 398 bytes saved in 0 seconds . 2020-06-07 11:35:57,987 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 2020-06-07 11:35:58,000 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown. 2020-06-07 11:35:58,003 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at ubunt4/69.87.216.36 ************************************************************/
하둡 클러스터 시작
먼저 다음 명령을 사용하여 NameNode 및 DataNode를 시작합니다.
start-dfs.sh
다음 출력이 표시되어야 합니다.
Starting namenodes on [0.0.0.0] Starting datanodes Starting secondary namenodes [ubunt4]
그런 다음 다음 명령을 실행하여 YARN 리소스 및 노드 관리자를 시작합니다.
start-yarn.sh
다음 출력이 표시되어야 합니다.
Starting resourcemanager Starting nodemanagers
이제 다음 명령으로 확인할 수 있습니다.
jps
다음과 같은 결과가 표시되어야 합니다.
5047 NameNode 5850 Jps 5326 SecondaryNameNode 5151 DataNode
Hadoop 웹 인터페이스에 액세스
이제 URL http://your-server-ip:9870을 사용하여 Hadoop NameNode에 액세스할 수 있습니다. 다음 화면이 표시됩니다.
URL http://your-server-ip:9864를 사용하여 개별 DataNode에 액세스할 수도 있습니다. 다음 화면이 표시됩니다.
YARN 리소스 관리자에 액세스하려면 URL http://your-server-ip:8088을 사용하십시오. 다음 화면이 표시됩니다.
결론
축하합니다! 단일 노드에 Hadoop을 성공적으로 설치했습니다. 이제 기본 HDFS 명령 탐색을 시작하고 완전히 분산된 Hadoop 클러스터를 설계할 수 있습니다. 궁금한 점이 있으면 언제든지 문의해 주세요.