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
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 사용하기 🙇♂️
이 후 아래 코드를 입력해서 환경 변수 적용하기
source .bashrc
이제 다음 4가지 파일을 수정해야한다.위에서 말했듯이 하나라도 틀리면 gg다!!!!!!!
- hadoop-env.sh : 자바 홈디렉토리와 hadoop 홈디렉토리가 어딘지 지정한다.
- core-site.xml : 하둡의 네임노드가 어느 서버인지를 지정한다.
- mapred-site.xml : java 로 만들어진 mapreduce 프레임워크와 관련된 정보를 지정하는 파일
- 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이 궁금하다면? 🙇♂️
이제 설치도 했고, 환경 설정도 했으니 실행해 보도록 하자 .
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라는 오류가 발생했다. (안 발생한 사람은 아래로 넘어가세용)
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 폴더를 모두 삭제해준 후 재실행
6.HDFS 명령어
이제 HADOOP 설정이 끝났다.
hdfs dfs -ls
위 코드를 쳐보면
이렇게 나오는 것을 확인할 수 있다. 당연하다. 만든게 없으니간. 나는 이제 hdfs를 linux에 mount하고, samba로 공유 디렉토리를 생성해서 사용할 것이다. 그렇지 않고 hdfs 자체로 사용할 사람들은 아래 글 (정리가 매우 잘되어있다.) 을 참고해서 사용하면 된다.
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
'하둡 Hadoop' 카테고리의 다른 글
[Hadoop] 우분투(Ubuntu)에서 HDFS에 파일 업로드 (0) | 2024.04.01 |
---|---|
[Hadoop] 하둡 에코시스템(Hadoop Ecosystem)과 주요 컴포넌트 (0) | 2024.02.13 |
[Hadoop] 하둡(Hadoop)이란? - HDFS, MapReduce, YARN (0) | 2024.02.07 |
댓글