Data Engineering

맥에서 하둡 설치하기

728x90
반응형

들어가며..

오늘은 엘라스틱이 아닌 하둡...! 포스팅을 해보겠다!

사실 엘라스틱만 하다가 갑자기 무슨 하둡인가... 할 수 있겠지만

아무래도 거의 분산 환경의 원조격이라고 볼 수 있기 때문에

안 해보는 건 예의가 아니라고 생각해서... 한번 해보려고 한다!

면접 준비도 좀 해야 하고,,,

거의 처음으로 튜토리얼 개념의 글인 거 같다,, ㅎㅎ


오늘의 주제

오늘은 공식 다큐먼트 기반으로 local에

단일 노드 클러스터 구성으로 하둡을 설치해보는 내용을 다뤄본다.

아래 링크를 기반으로 설치를 하고, 실행을 해볼 예정이다!

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#Execution

 

Apache Hadoop 3.3.1 – Hadoop: Setting up a Single Node Cluster.

<!--- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or a

hadoop.apache.org

 

  1. 하둡 설치 (단일 노드 클러스터)
  2. 실행 (Pseudo-Distributed Operation)
  3. 기타 오류 정리

정도의 내용을 다뤄보겠다!


설치 목표

하둡의 맵리듀스와 하둡 분산 파일 시스템(HDFS)을

간단하고 빠르게 설정해서 사용할 수 있는

하둡 단일 노드 클러스터를 구축하는 것이 목표이다!


설치 전 필수 조건

하둡을 설치하기 위해 몇 가지 확인해야 할 조건들이 있다!

  1. 플랫폼(맥, 리눅스, 윈도우 등) 지원 여부
  2. 필수 소프트웨어 설치 여부

먼저 1번은 기본적으로 Linux/GNUwindow 모두 가능하다고 나와있는데

이 말은 어지간한 OS는 다 지원한다는 말이 된다.

 

2번 필수 소프트웨어는 또 두 가지로 나누어진다!

  1. 자바 설치 (java8 or java11)
  2. ssh 설치

여기서 자바는 Java 8과 11 둘 다 가능하다고는 하지만

compile은 Java 8로 할 것을 권장하고 있다..

자세한 정보는 아래 링크에서 확인!

https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions 

 

Hadoop Java Versions - Hadoop - Apache Software Foundation

Supported Java Versions Apache Hadoop 3.3 and upper supports Java 8 and Java 11 (runtime only)Please compile Hadoop with Java 8. Compiling Hadoop with Java 11 is not supported:  HADOOP-16795 - 이슈 세부사항 가져오는 중... 상태 Apache Hadoop f

cwiki.apache.org

ssh의 경우는 하둡 daemon의 실행과 중지를 위한

하둡 스크립트를 실행하기 위해 필요하다고 한다!

 

ssh의 설치 여부는 간단하게 터미널에서

$ ssh localhost

를 입력해서 확인할 수 있다!

 

ssh가 설치되어있지 않다면

$ sudo apt-get install ssh
$ sudo apt-get install pdsh

위 명령어를 입력해서 설치해주자

 

ssh가 설치되어 있는 경우에는

ssh localhost

위처럼 마지막으로 로그인한 시각이 뜬다.

참고로 ssh가 설치되어 있어도 ssh localhost 커맨드를 사용했을 때

password를 입력하라고 나오는 경우도 존재하는데 이를 그냥 두게 되면

추후에 하둡을 실행할 때 permission denied 오류가 발생하니 

이 부분도 미리 해결해주어야 한다!

Permission denied

이 문제에 대한 해결법은 역시 공식 다큐먼트에 있는데

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

다음 커맨드로 아주 간단하게 해결할 수 있다!

간단히 위 커맨드를 설명하면 일종의 인증키를 미리 생성해서 

ssh에 로그인할 때 비밀번호 대신 미리 생성해둔 인증키를 사용하는 방식이라고 보면 된다.

 

이제 사전에 필요한 몇 가지 설정은 끝났다!

본격적으로 설치해보자!


하둡 설치

맥에서 하둡을 설치하는 방법은 몇 가지 존재하지만

그중 가장 편한 방법은 home brew를 사용하는 것으로 알려져 있다.

하지만 편한 건 편한 거고 처음부터 너무 편하게 하는 건 좋지 않다고 생각하기 때문에

조금 번거롭더라도 공식 자료실에서 tar.gz 파일을 다운로드하여 설치해보겠다.

 

http://www.apache.org/dyn/closer.cgi/hadoop/common/

 

Apache Downloads

We suggest the following site for your download: https://dlcdn.apache.org/hadoop/common/ Alternate download locations are suggested below. It is essential that you verify the integrity of the downloaded file using the PGP signature (.asc file) or a hash (.

www.apache.org

위 링크로 접속해서

 

접속 화면

상단에 보이는 하둡 링크를 클릭하면

다음과 같이 여러 버전의 하둡 디렉토리 파일이 보인다.

가장 최신 버전인 3.3.1을 선택하고

아래쪽에 보이는 

"hadoop-3.3.1.tar.gz" 파일을 클릭해서 다운로드 받아주자

 

맥에서 별도의 설정을 건드리지 않았다면 대부분 파인더의 다운로드 폴더에 파일이 들어가 있을 텐데

이를 원하는 위치로 이동시켜주고 터미널을 실행시키자

$ tar -zxvf hadoop-3.3.1.tar.gz

그다음 tar.gz 파일의 압축을 풀기 위한 tar 커맨드를 사용해서 압축을 풀어주면

간단하게 설치가 끝난다!

 

디렉토리명은 기본적으로 hadoop-3.3.1 일 텐데 이게 싫으면 

mv 커맨드로 변경해주면 된다.

 

나 같은 경우에는

$ mv hadoop-3.3.1 hadoop

으로 단순하게 hadoop이란 이름을 가지게 바꿔주었다!

그리고 다운로드한 hadoop 디렉토리에 들어가서 어떤 녀석들이 있는지 확인해보면

이것저것 제대로 다운 받아져 있는 걸 볼 수 있다!


하둡 실행

하둡의 맵리듀스와 하둡 분산 파일 시스템(HDFS)을

간단하고 빠르게 설정해서 사용할 수 있는

하둡 단일 노드 클러스터를 구축하는 것이 목표이다!

 

로컬에서 하둡을 실행하는 방법은 크게 3 가지로 나뉘어볼 수 있다

  1. Standalone Operation - 단일 프로세스 형태 (ES에서 단일 노드 클러스터처럼)
  2. Pseudo-Distributed Operation - 슈도 분산 구조 (실제 분산 구조는 아니지만, 각 데몬이 다른 자바 프로세스에서 실행되어 유사 분산 구조를 띔)
  3. Fully-Distributed Operation - 완전체.. (진짜 분산/클러스터 구조)

이 3 가지 중, 오늘 2번째 슈도 분산 구조로 하둡을 실행해보려 한다!

그냥 단일 프로세스로 하긴 하둡의 "분산 구조"를 조금이나마 경험해보고 싶어서,,,

2번째 방법을 선택했다!

 

본격적으로 실행하기 전에 먼저 자바 홈 패스를 잡아줘야 하는데

hadoop/etc/hadoop 디렉토리 아래에

"hadoop-env.sh" 파일을 열고 수정을 해줘야 한다!

# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest

내가 사용하는 로컬에는 자바 버전이 여러 개가 설치되어 있어서 조금 다르게

자바 홈 패스를 잡아주었다!

패스를 제대로 설정해주었다면

다시 하둡의 최상의 디렉토리로 돌아와서

다음의 명령어를 실행해보자!

$ bin/hadoop

일반적으로 bin 파일 안의 hadoop을 실행시키는 명령어인데

다른 옵션을 주지 않았기 때문에 아래 이미지처럼 하둡 사용 설명서가 출력되면

정상적인 상태라고 볼 수 있다.

usage&amp;amp;amp;amp;amp;nbsp;documentation

 


Pseudo-Distributed Operation

일종의 분산 구조를 흉내 내는 "가짜 분산 구조" 형태로 하둡을 실행 시키는 것을 의미한다.

실질적으로는 단일 노드 형태로 실행되는 것이고

각 하둡 데몬이 서로 다른 자바 프로세스에서 실행되게 해서 분산 구조를 흉내 낸다고 볼 수 있다!

 

Configuration

그럼 슈도 분산 구조 실행을 위한 Configuration을 설정해보자!

앞서 자바 홈을 잡아주기 위해 hadoop-env.sh 파일을 수정했던 것을 기억할 것이다.

이번에 수정할 configuration들도 모두 아까와 동일한 디렉토리

hadoop/etc/hadoop 디렉토리 아래에 존재한다.

 

먼저 "core-site.xml" 파일을 열고

다음과 같이 configuration 영역을 수정해주자!

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

 

참고로 파일을 터미널에서 오픈할때 vscode가 설치되어있다면

code 명령어를 사용할 수 있게 설정해서 vscode 에디터로 편집할 수도 있지만

보통은 기본적으로 vim 에디터를 많이 사용한다!

$ vim core-site.xml

위처럼 vim 명령어 다음으로 오픈하고자 하는 파일 명을 입력하면

vim 에디터가 열리는데 i를 입력하면 편집이 가능한 INSERT 모드가 되어

파일의 수정이 가능하다! 그 후 esc 키를 눌러 Insert 모드를 종료하고 :wq를

입력하면 저장 후 에디터를 종료할 수 있다!

 

더 자세한 vim 명령어는 구글에 검색하면 쉽게 찾아볼 수 있다!

이 글에서는 분량상 패스,,,

 

다음으로 "hdfs-site.xml"에 대해서도 동일한 방법으로

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

configuration을 수정해주자!

설정을 마쳤으면 이제 진짜 실행을 해보자...!

 

Execution

기본적으로 로컬에서 실행하는 것이 가장 간단하고 쉬운 방법이지만

결국 어려운 형태로 접해야.. 나중에 쉬워짐을 느낄 수 있기 때문에

단일 노드이지만 YARN을 활용하는 방법을 다뤄보려고 한다!

 

우선 파일 시스템을 포맷해주어야 한다!

$ bin/hdfs namenode -format

그다음으로 namenode  deamon과 data node daemon을 실행시켜준다!

$ sbin/start-dfs.sh

정상적으로 실행되었다면

정상 실행

namenode와 datanode를 실행한다는 내용이 출력되고

http://localhost:9870/ 을 브라우저에 입력해 접속하게 되면

active

위 이미지처럼 정상적으로 실행된 것을 확인할 수 있다!

 

다음으로 MapReduce 작업을 하기 위해 필요한 HDFS 디렉토리를 생성해주어야 한다!

$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>

그리고 그냥 무난하게  mapreduce 작업을 테스트해보고 끝내도 되는데

최대한 하둡 기능을 활용하기 위해 Single Node에서도 Yarn을 사용해 MapReduce

작업을 할 수 있게 추가적인 설정을 해보자!

 

우선 몇 가지 configuration을 잡아주어야 한다!

"hadoop/etc/hadoop/디렉토리 하위에

"mapred-site.xml" / "yarn-site.xml" 파일을 수정해야 한다.

 

아까 사용했던 vim 에디터 혹은 vscode를 사용해 수정을 해주면 된다!

mapred-site.xml 파일의 configuration은

<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>

수정해주고

 

yarn-site.xml의 configuration을

<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 디렉토리로 돌아가서

$ sbin/start-yarn.sh

ResourceManager와 NodeManager daemon을 실행 해보자!

 

오류 메시지 출력 없이 실행되었다면

Resource Manager

http://localhost:8088/ 를 브라우저에 입력해 접속하면

위와 같이 리소스 매니저로 접속된다!

 

Stop

실행해둔 data&namenode daemon과 

resource manager를 종료하기 위해서는

다음 명령어를 사용해주면 된다!

$ sbin/stop-dfs.sh
$ sbin/stop-yarn.sh

결론

오늘은 하둡을 설치하고 실행해보는

간단한 튜토리얼을 정리해보았다!

 

다음 포스팅은 아마 MapReduce task를 수행하는

튜토리얼(?)을 다뤄보겠다!


마무리..

역시 포스팅은 정말이지 어렵다..

이 짧은 글을 정리하는데만 해도 거의 일주일....?

내가 천천히 써서 그런 것도 없지 않아 있지만,,,

다음번 글은 엘라스틱 카테고리 or LAB 카테고리 중에

하나로 생각 중이다..!

 

그럼 모두 화이팅...!

 

 

더보기

※이 포스팅은 아파치 하둡 3.3.1 버전 기반으로 작성되었으며, 참고한 공식 Document 또한 동일 버전입니다.

※ 참고 자료 : https://hadoop.apache.org/docs/r3.3.1/

728x90
반응형