하둡 Hadoop

[Hadoop] 우분투(Ubuntu)에서 하둡(Hadoop) 설치와 환경세팅 및 실행/중단 방법

sseozytank 2024. 3. 29.

ubuntu 환경에서 hadoop을 설치해보고, 사용해보자! 일단 가장 먼저 java 설치부터 스타트  

1.JAVA 설치 

1.java 설치 확인

java -version

 

나의 경우, 깔려있고 깔려있지 않은 사람들은 Command 'java' not found, but can be installed with: ~ 문구가 뜬다. 

 

2.java가 설치 되지 않았을 때, 다운로드 

sudo apt install openjdk-8-jre-headless

 

혹시 Unable to locate package 에러가 뜬다면 아래 코드 두 개 입력해주기

sudo apt update
sudo apt install openjdk-8-jdk-headless

 

 

 

 

2.Hadoop 계정 세팅 

1.새 유저 생성 

sudo adduser [username]

 

- 입력하면  비밀번호 세팅하는게 뜨고, 원하는 비밀번호를 입력해주고, 한번 더 확인차 입력해준다. 그 후 나오는 옵션들은 엔터로 모두 스킵해도 된다. 정보 입력이 완료 되었으면 Y를 눌러서 확정하기 ! 

2.생성 계정으로 스위칭

su - [username]

 

 

3.패스워드 없이 로컬 호스트에 로그인하기 위해 세팅 

1.ssh key pair 생성

 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

 

*ssh-keygen : SSH키 생성 명령어

*-t rsa : 생성할 키의 타입을 RSA (공개키 암호화 알고리즘)로 지정 

*-P '' : 키의 패스워드 설정, 비어있는 문자열 = 패스워드 사용 X 

*-f ~/.ssh/id_rsa : ~/.ssh/id_rsa 경로에 id_rsa라는 이름의 키 파일 생성

 

 

2.Public Key를 authorized key로 등록

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

 

*cat : 텍스트 파일의 내용을 화면에 출력 

* >> : 대상 파일이 없을 때는 생성하고, 있다면 대상 파일에 내용을 추가 

(즉, 해당 코드는 id_rsa.pub의 텍스트를 authorized_keys에다가 추가하기) 

 

3.authorized key를 읽기 전용으로 만듬 

chmod 0600 ~/.ssh/authorized_keys

 

*chmod : 다른 사용자에게 접근 권한을 부여할 때 사용 

 

3.Hadoop 설치

1.wget을 이용해서 하둡 다운로드 

wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.4/hadoop-3.3.4.tar.gz

설치 되는 중 ~.~

 

2. 1에서 다운로드 파일의 알집 해제 

tar -xvzf hadoop-3.3.4.tar.gz

 

3.설치 완료 확인 

ls

 

 

4.hadoop-3.3.4 폴더명을 hadoop으로 바까주자 

sudo mv hadoop-3.3.4 hadoop

변경 완뇨 v

 

4.Hadoop 환경 세팅 

오타 몇개 내봤는데 절대 실행 안된다.ㅎㅎ. 복사 붙혀넣기 해서 똑같이 할 것! 

vi ~/.bashrc

 

아래 코드 복사 > vi 창에서 a > 커서를 맨 마지막으로 보낸 후 shift + Insert > esc > :wq! 

export BASE_HOME=/home/[username] #본인의 계정으로 수정 
export HADOOP_HOME=$BASE_HOME/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"

 

🙇‍♂️ vi 사용하기 🙇‍♂️

 

[Linux] 뉴비를 위한 VIM 기초 사용법 총정리

1.vim과 nano - 유닉스에서 사용할 수 있는 에디터로, 터미널을 통해서 텍스트 편집이 가능한 텍스트 편집기 2.vi와 vim - vi : visual display editor - vim : vi iMproved , 향상된 vi (업그레이드 버전) 3.vim 사용법

sseozytank.tistory.com

 

이 후 아래 코드를 입력해서 환경 변수 적용하기 

source .bashrc

 

이제 다음 4가지 파일을 수정해야한다.위에서 말했듯이 하나라도 틀리면 gg다!!!!!!! 

  1. hadoop-env.sh : 자바 홈디렉토리와 hadoop 홈디렉토리가 어딘지 지정한다.
  2. core-site.xml : 하둡의 네임노드가 어느 서버인지를 지정한다.
  3. mapred-site.xml : java 로 만들어진 mapreduce 프레임워크와 관련된 정보를 지정하는 파일
  4. hdfs-site.xml : 하둡 파일 시스템인 HDFS(Hadoop Distributed File System) 와 관련된 정보를 저장하는 파일

1.hadoop-env.sh 수정

 vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh

 

export JAVA_HOME 부분 주석 해제 후 아래 코드 삽입 (참고로 위치 찾을려면 esc -> /export JAVA_HOME) 후 저장

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

 

 

2.core_site.xml 설정 

vi $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/[username]/tmpdata</value> #수정필요
	</property>
	<property>
		<name>fs.default.name</name>
		<value>hdfs://127.0.0.1:9000</value>
	</property>
</configuration>

 

 

3.hdfs-site.xml 설정

vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
	<property>
		<name>dfs.data.dir</name>
		<value>/home/[username]/dfsdata/namenode</value> #수정필요
	</property>
	<property>
		<name>dfs.data.dir</name>
		<value>/home/[username]/dfsdata/datanode</value> #수정필요
 	</property>
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
</configuration>

 

 

 

4.mapred-site.xml 설정

 vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
         <value>yarn</value>
    </property>
</configuration>

 

 

*yarn-site.xml 설정 

- 리소스 매니저 web-ui 주소, 노드매니저에서 중간단계 파일 및 로그를 저장할 경로 정의를 위해 수정해주자 

 vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
	<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>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>localhost</value>
	</property>
	<property>
		<name>yarn.acl.enable</name>
		<value>0</value>
	</property>
	<property>
		<name>yarn.nodemanager.env-whitelist</name>
		<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS,HADOOP_CONF_DIR,CLASSPATH_PERPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
	</property>
</configuration>

 

 

5.HDFS & YARN 실행 

🙇‍♂️ yarn이 궁금하다면? 🙇‍♂️

 

[Hadoop] 하둡(Hadoop)이란? - HDFS, MapReduce, YARN

빅데이터 개념을 마스터하기 위해 시리즈를 작성해보기로 했다. 이번 빅데이터 시리즈 포스팅의 궁극적인 목적은 Hadoop -> Hive -> Spark -> Pyspark까지 마스터 하는 것. 하지만 내 머릿속엔 아무것도

sseozytank.tistory.com

 

이제 설치도 했고, 환경 설정도 했으니 실행해 보도록 하자 .

 

1.HDFS를 포맷해준다. 

hdfs namenode -format

 

2. hadoop 과 yarn을 실행해주기

(hadoop의 sbin에 있다) 

#하둡 실행
~/hadoop/sbin/start-dfs.sh

#YARN 실행 
~/hadoop/sbin/start-yarn.sh

#한번에 실행 (추천~)
~/hadoop/sbin/start-all.sh

 

⛔ 에러 발생 한 사람만 보고가기 ⛔  

그러면 나같은 경우 Permission denied라는 오류가 발생했다. (안 발생한 사람은 아래로 넘어가세용) 

화려한 Permission denied의 향연...

pdsh -q -w localhost

 

를 통해 확인해보면, Rcmd type이 rsh로 되어있는데, 이를 ssh로 바꿔줘야 한다. 

export PDSH_RCMD_TYPE=ssh
source ~/.bashrc

 

이 후 기존에 실행했던걸 혹시 모르니 이렇게 중단해준다.

~/hadoop/sbin/stop-all.sh

 

 

다시 아래 코드를 입력해보면 

~/hadoop/sbin/start-all.sh

 

localhost: ssh exited with exit code 1 이람서 namenode 스타팅이 안된다.. stackoverflow 확인 결과 권한 문제여서 

(stackoveflow는 신이다 신) 

chown -R [username]:[username] ~/hadoop/*

 

아래와 같이 설정해줬다. 이후 다시 아래 코드 실행해준다. 

~/hadoop/sbin/stop-all.sh
~/hadoop/sbin/start-all.sh

 

위에서 떴던 메세지가 사라지고 진짜 오류없이 잘 스타트 된걸 확인할 수 있다! 

 

⛔  Cannot set priority of secondarynamenode process XXXXX  오류 발생한다면 ⛔

중간에 경로 넣는 부분에서 자신의 username을 제대로 입력하지는 않았는지 전체적으로 검토하고 가면된다. 

 

 

3. 잘 실행됐는지 확인하기 

jps

 

 

⛔ datanode가 제대로 실행되지 않는다면 ⛔

datanode 및 namenode 관련 tmp 폴더를 모두 삭제해준 후 재실행

 

Datanode process not running in Hadoop

I set up and configured a multi-node Hadoop cluster using this tutorial. When I type in the start-all.sh command, it shows all the processes initializing properly as follows: starting namenode, l...

stackoverflow.com

 

6.HDFS 명령어 

이제 HADOOP 설정이 끝났다. 

hdfs dfs -ls

 

위 코드를 쳐보면

 

이렇게 나오는 것을 확인할 수 있다. 당연하다. 만든게 없으니간. 나는 이제 hdfs를 linux에 mount하고, samba로 공유 디렉토리를 생성해서 사용할 것이다. 그렇지 않고 hdfs 자체로 사용할 사람들은 아래 글 (정리가 매우 잘되어있다.) 을 참고해서 사용하면 된다. 

 

[Hadoop] hdfs 명령어 정리

HDFS 명령어 Hadoop 의 Filesystem 인 HDFS 는, 아래와 같은 명령어 구조를 사용해 다룰 수 있다. Hadoop-2.6.0 에서는 총 33개의 HDFS 명령어를 지원한다. hdfs dfs [GENERIC_OPTIONS] [COMMAND_OPTIONS] ls 특정 디렉토리 또

wooono.tistory.com

 

 

hadoop 세팅을 진행하면서 오류 해결에 시간이 많이 걸렸다. 그래서 나처럼 처음 세팅하는 사람들이 조금 더 수월하게 셋팅할 수 있도록 기존 게시글을 참고하여 생략된 부분을 채우려고 노력했답!  :)  조금이라도 도움이 되길 바랍니당! 빠빠 

 

참고 자료 

https://ysyblog.tistory.com/349

https://wikidocs.net/163908#hadoop

https://stackoverflow.com/questions/42756555/permission-denied-error-while-running-start-dfs-sh

https://stackoverflow.com/questions/50998451/hadoop-namenode-not-starting-with-exit-code-1

댓글