웹사이트 검색

Ubuntu 20.04에서 Apache Hadoop을 설치 및 구성하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)

이 페이지에서

  1. 전제 조건
  2. 시스템 패키지 업데이트
  3. 자바 설치
  4. Hadoop 사용자 생성 및 암호 없는 SSH 설정\n
  5. Hadoop 설치
  6. Hadoop 구성
    1. Java 환경 변수 구성\n
    2. core-site.xml 파일 구성
    3. hdfs-site.xml 파일 구성

    1. 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 클러스터를 설계할 수 있습니다. 궁금한 점이 있으면 언제든지 문의해 주세요.