하둡(Hadoop)은 대용량 데이터를 처리하기 위한 오픈 소스 분산 컴퓨팅 프레임워크입니다. 아래는 간단한 가이드라인을 제공하여 Ubuntu 리눅스 서버에 Hadoop 3.0을 의사분산 모드로 설치하는 방법입니다. 주어진 정보를 기반으로 설치를 진행해보세요.
(더 자세한건 : https://github.com/apache/hadoop)

**준비 사항:**
1) AWS 계정 및 EC2 인스턴스 (t2.medium) 보유.
2) Ubuntu 서버에 자바 8 설치.

1. 우분투 어카운트에 로그인( AWS 계정 및 EC2 인스턴스 계정)


2. Ubuntu 서버에 자바 8 설치:**

 

  • ```bash
    sudo apt update
    sudo apt install openjdk-8-jdk-headless
    #유저추가
    sudo adduser hdoop
    su - hdoopssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    # 생성된 공개 키를 authorized_keys 파일에 추가합니다.
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    # authorized_keys 파일에 대한 권한을 설정하여 소유자에게 읽기 및 쓰기 권한만 부여
    chmod 0600 ~/.ssh/authorized_keys
    ```
    # pw 없게 로그인 되게 설정
    # RSA 알고리즘을 사용하여 SSH 키를 생성하고, -P 옵션을 이용하여 암호를 빈 문자열(암호없음)로 설정합니다.



3. Hadoop 다운로드 및 설치:**

 

4. Hadoop 환경 설정:*

 

  • # 로그인시마다 실행되는 파일 설정추가
    vi .bashrc

v

  • # 방금 설정한 설정 적용
    source .bashrc

  • # 마스터 환경설정 파일 접속후 설정 변경
    vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh

 

  • # 내임노드 관련 정보가 들어가는 파일, 수정
    vi $HADOOP_HOME/etc/hadoop/core-site.xml
    <configuration>
      <!-- 임시 디렉터리 설정 -->
      <property>
        <!-- 하둡이 사용하는 임시 디렉터리의 이름을 지정합니다. -->
        <name>hadoop.tmp.dir</name>
        <!-- 임시 디렉터리의 경로를 지정합니다. -->
        <value>/home/hdoop/tmpdata</value>
      </property>

      <!-- 하둡 분산 파일 시스템 (HDFS) 설정 -->
      <property>
        <!-- HDFS의 기본 이름을 지정합니다. -->
        <name>fs.default.name</name>
        <!-- 기본 HDFS 인스턴스의 주소 및 포트를 지정합니다. -->
        <value>hdfs://127.0.0.1:9000</value>
      </property>
    </configuration>
  • # Hadoop의 추가적인 설정을 정의, replication 요소를 1로 추가, 설정추가
    vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
    <!-- Hadoop Configuration File -->
    <configuration>
      <!-- Hadoop NameNode 데이터 디렉터리 설정 -->
      <property>
        <!-- NameNode가 사용하는 데이터 디렉터리의 이름을 지정합니다. -->
        <name>dfs.data.dir</name>
        <!-- NameNode 데이터 디렉터리의 경로를 지정합니다. -->
        <value>/home/hdoop/dfsdata/namenode</value>
      </property>

      <!-- Hadoop DataNode 데이터 디렉터리 설정 -->
      <property>
        <!-- DataNode가 사용하는 데이터 디렉터리의 이름을 지정합니다. -->
        <name>dfs.data.dir</name>
        <!-- DataNode 데이터 디렉터리의 경로를 지정합니다. -->
        <value>/home/hdoop/dfsdata/datanode</value>
      </property>

      <!-- HDFS 복제 팩터(Replication Factor) 설정 -->
      <property>
        <!-- 파일의 복제본 수를 지정합니다. -->
        <name>dfs.replication</name>
        <!-- 파일의 단일 복제본을 사용하도록 설정합니다. -->
        <value>1</value>
      </property>
    </configuration>


  • # Hadoop MapReduce 프레임워크에서 사용할 프레임워크의 yarn을 지정
    vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
    <!-- Hadoop Configuration File -->
    <configuration>
      <!-- MapReduce 프레임워크 설정 -->
      <property>
        <!-- 사용할 MapReduce 프레임워크의 이름을 지정합니다. -->
        <name>mapreduce.framework.name</name>
        <!-- YARN (Yet Another Resource Negotiator)을 사용하도록 설정합니다. -->
        <value>yarn</value>
      </property>
    </configuration>

  • # YARN(Yet Another Resource Negotiator)의 여러 설정을 정의
    vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
    <configuration>
      <!-- YARN 노드 매니저의 보조 서비스 설정 -->
      <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>
      </property>

      <!-- YARN 리소스 매니저 호스트 설정 -->
      <property>
        <!-- YARN 리소스 매니저의 호스트 이름을 지정합니다. -->
        <name>yarn.resourcemanager.hostname</name>
        <!-- 로컬 호스트를 사용하도록 설정합니다. -->
        <value>localhost</value>
      </property>

      <!-- YARN ACL 활성화 설정 -->
      <property>
        <!-- YARN ACL을 활성화 또는 비활성화합니다. -->
        <name>yarn.acl.enable</name>
        <!-- ACL을 비활성화하도록 설정합니다. -->
        <value>0</value>
      </property>

      <!-- 노드 매니저 환경 변수 화이트리스트 설정 -->
      <property>
        <!-- 노드 매니저가 허용하는 환경 변수의 화이트리스트를 지정합니다. -->
        <name>yarn.nodemanager.env-whitelist</name>
        <!-- 허용된 환경 변수 목록을 지정합니다. -->
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PERPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
      </property>

    </configuration>

5. hdfs실행, yarn 실행

  • # 초기화
    hdfs namenode -format

  • # 디렉토리 이동
    cd hadoop-3.3.4/sbin/

  • #HDFS를 시작
    ./start-dfs.sh

  • #yarn을 시작
    ./start-yarn.sh

  • #exit 로 우분투로 나와서, Ubuntu 또는 Debian 기반 시스템에서 OpenJDK 8의 headless(그래픽 사용자 인터페이스 없음) 버전 설치, (GUI) 기능이 없는 환경에서 Java 애플리케이션을 실행하는 데 사용됨
    exit
    sudo apt install openjdk-8-jdk-headless

  • #하둡 계정으로 다시 접근 
    su - hdoop

  • #어떤 자바 프로그램이 돌고 있는지 봄
    jps


6. 하둡 실행

  • ```bash
    # Hadoop 포맷
    bin/hdfs namenode -format

    # Hadoop 시작
    sbin/start-dfs.sh
    ```

    웹 브라우저에서 `http://localhost:9870`으로 접속하여 Hadoop 관리자 페이지 확인.

 

7. 맵리듀스 실행 실습

  • #하둡 폴더로 이동
    cd hadoop-3.3.4/

    #유저 생성
    bin/hdfs dfs dfs -mkdir /user

    # /hdoop 폴더 제작
    bin/hdfs dfs dfs -mkdir /user/hdoop

    # input폴더 만듦
    bin/hdfs dfs dfs -mkdir input

    # words.txt 제작후 분석할 내용 입력
    vi words.txt
    the brave yellow lion the lion ate the cow now the lion is happy

  • 로컬 파일 시스템에 있는 words.txt 파일을 Hadoop 분산 파일 시스템 (HDFS)의 input 디렉토리로 복사
    bin/hdfs dfs -put words.txt input

  • Hadoop 클러스터에서 WordCount 예제가 실행되어 입력 데이터에서 각 단어의 출현 빈도를 계산하고 output에 저장
    bin/hadoop jar shqre/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount input output 
    + bin/hadoop: Hadoop 명령어를 실행 / jar: JAR 파일을 실행 / 실행할 JAR 파일의 경로/ 실행할 Java 클래스인 wordcount / 입력 데이터가 위치한 HDFS의 경로/  출력 결과를 저장할 HDFS의 경로
  • bin/hdfs dfs -ls output
    출력물 리스트 보기

  • #출력물에서 하나 선택
    bin/hdfs dfs -cat output/part-r-00000

 

'하둡,spark' 카테고리의 다른 글

spark 기초  (0) 2024.01.18
맵리듀스(MapReduce) 문제점  (0) 2024.01.18
MapReduce(맵리듀스) 프로그래밍  (0) 2024.01.17
YARN  (0) 2024.01.16
하둡 기초  (0) 2024.01.15

+ Recent posts