Hadoop SingleNode 설치

Written on 2023-02-11

준비

  • hadoop version : hadoop-3.3.4
  • java version : 17.0.2
  • os : CentOS 7

혹시나 다른 버전의 hadoop이 필요할 경우, hadoop Archive Realese 사이트에서 다운로드 받으면 된다.

hadoop version 과 java version 간 호환성에 대하여 알고 싶으면, HadoopJavaVersions , 또는 Hadoop+Java+Versions 에서 확인 가능하다.

설치 및 환경설정파일 setting

hadoop Archive Realese 에서 hadoop package를 다운로드 한다.

설정파일은 각 xml 파일별로 아래와 같이 설정

  • $(HADOOP_HOME)/etc/hadoop/core-site.xml
<configuration>
    <!-- fs.defaultFS 항목은 기본 파일 시스템의 이름이자,FileSystem 구현을 결정하는 URI. 그리고 namenode URI 가 된다. -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>

    <!-- 
          복제계수 
          같은 데이터를 다른 node로 몇개나 복제할것이냐? 를 결정하는 수.
          기본적으로 singleNode 의 경우 당연히 node 갯수가 1개 이므로 1, 
          MultiNode의 경우 Node갯수에 맞추어 홀수로 설정해야 한다. 
    -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
  • $(HADOOP_HOME)/etc/hadoop/hdfs-site.xml
<configuration>

    <!-- 
         namenode 의 FSimage(스냅샷) 저장위치.(optional)
         원하는 directory 로 설정하는것을 권장함.
         설정하지 않을 경우, default(file://${hadoop.tmp.dir}/dfs/name) 로 지정되므로 
         되도록이면 설정하도록 한다.
    -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/data/hdfs/namenode</value>
    </property>

    <!-- 
        hadoop datanode의 블록을 저장하는 위치(optional)
        원하는 directory 로 설정하는것을 권장함.
        설정하지 않을 경우,  default(file://${hadoop.tmp.dir}/dfs/data) 로 지정되므로
        되도록이면 설정하는 것을 권장한다. 
    -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/data/hdfs/datanode</value>
    </property>
   
    <!-- 
        hadoop tmp 디렉토리(optional)
        원하는 directory 로 설정하는것을 권장함.
        설정하지 않을 경우, default(/tmp/hadoop-${user.name}) 로 지정됨. 
    -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/data/hdfs/tmp</value>
    </property>

</configuration>
  • $(HADOOP_HOME)/etc/hadoop/hadoop-env.sh
    # hdfs를 실행할 User명을 등록한다.
    # ex) export HDFS_NAMENODE_USER=<user명> 
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root

설정파일 setting 이 완료되었으면, ssh공개키 인증을 통하여, 패스워드 없이 localhost에 ssh 접속이 가능한지 확인한다.

[gymbombom@localhost~]$ ssh localhost; #password 없이 접속 가능하다면 PASS... 그렇지 않다면 아래과정 진행

#ssh 키 생성 및 공개키 배포
[gymbombom@localhost~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa; # ssh key 생성
[gymbombom@localhost~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; #ssh 공개키 배포
[gymbombom@localhost~]$ chmod 0600 ~/.ssh/authorized_keys; # 파일 권한설정

실행

실행 전 hadoop 을 설치하고 namenode 를 최초 기동하는 경우라면, 기동전에 namenode format 을 해줘야 한다.

[gymbombom@localhost~]$ $HADOOP_HOME/bin/hdfs namenode -format;

namenode 및 datanode를 기동한다.

[gymbombom@localhost~]$ $HADOOP_HOME/sbin/start-dfs.sh; # namenode, datanode 모두 기동
[gymbombom@localhost~]$ $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode; #hadoop namenode만 실행
[gymbombom@localhost~]$ $HADOOP_HOME/sbin/hadoop-daemon.sh start datanode; #hadoop datanode만 실행

확인

  • namenode web interface UI 에 접속하여 잘 실행되었는지 확인한다.
    NameNode - http://localhost:9870/

  • 검사

  $ $HADOOP_HOME/bin/hdfs dfs -mkdir /user
  
  # user명과 같은 directory를 생성한다.
  #ex) $HADOOP_HOME/bin/hdfs dfs -mkdir /user/<username> 
  $ $HADOOP_HOME/bin/hdfs dfs -mkdir /user/root
  
  $ $HADOOP_HOME/bin/hdfs dfs -mkdir input #input directory 생성
  $ $HADOOP_HOME/bin/hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml input #파일 복사
  
  # mapreduce 작업을 실행해본다.
  $ $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep input output 'dfs[a-z.]+'

  $ $HADOOP_HOME/bin/hdfs dfs -get output output # 파일 get
  
  # output 파일검사
  $ $HADOOP_HOME/bin/hdfs dfs -cat output/*
    1	dfsadmin
    1	dfs.replication
    1	dfs.namenode.name.dir
    1	dfs.datanode.data.dir

yarn 설정

  • $(HADOOP_HOME)/etc/hadoop/mapred-site.xml
    <configuration>
        
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        
        <property>
            <name>mapreduce.application.classpath</name>
            <value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
        </property>

    </configuration>
  • $(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>
  • $(HADOOP_HOME)/etc/hadoop/hadoop-env.sh
    # yarn을 실행할 User명을 등록한다.
    # ex) export YARN_RESOURCEMANAGER_USER=<user명> 
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root

확인

$ $HADOOP_HOME/sbin/start-yarn.sh
  • ResourceManager web interface UI 에 접속하여 잘 실행되었는지 확인한다.
    ResourceManager - http://localhost:8088/

Experience


hadoop2,3 버전 port List 정리
core-default.xml 설정값
hdfs-default.xml 설정값