[Hadoop] 하둡 설치 (hadoop install)

Hyeri·2021년 2월 17일
0

Mac, VM VirtualBox, WSL 모두에서 가능하다.
나는 wsl2에서 진행했다.

# 안해도 상관없는 과정
# hadoop용 user 추가
$ sudo addgroup bigdata
$ sudo adduser --ingroup bigdata hadoop
$ sudo adduser hadoop sudo
$ sudo apt-get install openssh

# su: 현 사용자를 로그아웃하지 않고, 다른 사용자의 권한을 획득할 때 사용
$ su - hadoop
# java install
$ sudo apt-get install openjdk-8-jdk
# java 설치 확인 가능
$ java -version
# hadoop 파일 다운로드
$ wget http://mirror.apache-kr.org/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
$ tar -xvzf hadoop-2.7.7.tar.gz
# ssh
$ sudo apt-get install ssh
$ sudo service ssh restart
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
$ ssh localhost

# 접속되는거 확인했으면 나가기
$ exit
# .bashrc에 환경변수 추가
$ vi ~/.bashrc


### .bashrc에 추가할 내용
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 설치한 java 버전으로 입력
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7 # 설치한 hadoop 버전으로 입력
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop


$ source ~/.bashrc

vi로 파일 수정하는 방법 모르는 사람을 위해,
i를 누르면 insert mode로 변환됨
내용 입력 후 esc누르면 insert mode 종료
:wq 입력(저장 후 종료)


# hadoop-env.sh 내용 변경
$ vi /home/hadoop/hadoop-2.7.7/etc/hadoop/hadoop-env.sh


### export JAVA_HOME 있는 부분 찾아서 아래 내용으로 변경
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # .bashrc에 입력한 JAVA_HOME과 동일

의사분산모드 환경설정이다.
single node cluster. 모든 하둡 데몬을 로컬 머신에서 실행한다. 따라서 작은 규모의 클러스터에서 실행하는 것과 같은 효과가 있다.

# HADOOP_HOME 에서 모두 진행
$ vi etc/hadoop/core-site.xml


<configuration>     
      <property>         
            <name>fs.defaultFS</name>         
            <value>hdfs://localhost:9000</value>     
      </property> 
</configuration>
$ vi etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
$ vi 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>
$ vi etc/hadoop/yarn-site.xml


<configuration>     
      <property>         
            <name>yarn.nodemanager.aux-services</name>         
            <value>mapreduce_shuffle</value>     
      </property> 
      <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>localhost</value>
      </property>
</configuration>

환경 설정을 끝냈다.
이제 namenode를 포맷하고 데몬들을 키고 하둡 연습을 해보자.

아래 과정은 ssh localhost 접속 후 실행했다.


namenode format은 최초 1회만 해야한다.
하지만 분명 설치에서 수많은 오류를 만나며,,,포맷을 또 시도하고 시도해야 하는 상황이 분명히 올것임 😥
그러면 logs파일을 삭제하고 포맷하면 된다. (logs파일의 default경로는 '$HADOOP_HOME/logs')

# format namenode
$ bin/hadoop namenode -foramt
# run DFS daemons
$ sbin/start-dfs.sh
$ jps
Jps
NameNode
DataNode
SecondaryNameNode 


# run YARN daemons
$ sbin/start-yarn.sh
$ jps
SecondaryNameNode
DataNode
Jps
ResourceManager
NameNode
NodeManager


# DFS와 YARN daemons 모두 한번에 키고 끄기
$ sbin/start-all.sh
$ sbin/stop-all.sh

이제 daemon을 켰으니, localhost:50070 (hadoop-3.0.0 부터는 localhost:9870 으로 바뀜) namenode web ui 접속할 수 있다.
namenode web ui

localhost:8088 으로 resource manager web ui 접속이 가능하다.
resource manager web ui

8088포트로 접속했을 때 지금 나는 완료된 task가 하나 있는데 이것은 wordcount를 해봐서 그렇다. 시작해보자.

# daemon을 키면 하둡 파일들을 확인할 수 있다

# 데이터를 저장할 디폴트 폴더 만들기 (디폴트로 만들어서 추후에 바로 접근 가능)
$ hdfs dfs -mkdir -p /user/hadoop
# 안되면 bin/hadoop ~~~

# 데이터 넣기
$ hdfs dfs -put README.txt
# $ hadoop dfs -put 로컬파일경로 hdfs경로에만들파일경로

# list 확인
$ hdfs dfs -ls /user
(또는 hdfs dfs -ls hdfs://localhost:9000/user)

# file or directory 삭제
$ hdfs dfs -rm 파일이름
$ hdfs dfs -rm -r 디렉토리이름
# wordcount 실행예제
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount README.txt output_wc
# .jar 뒤에는 인풋파일이름(bin/hadoop fs -ls 했을 때 뜨는 input file)과 원하는 아웃풋파일이름을 적어준다



그리고 음,,,,, 빅데이터수업 들으면서 교수님이 외부노드로 접속해 있다면 tunneling이 필요하다고 했는데

ssh -L 50070:localhost:50070 -L 8088:localhost:8088 username@본인ip주소

내 상황에서는 딱히 필요 없는 것 같다 사실 외부노드로 접속한다는게 뭔지 잘 모르겠다ㅎㅎㅎㅎㅎㅎ




reference
1. https://www.notion.so/Hadoop-3aa81e72270c41108126579143b123ae
2. 책- 하둡 완벽가이드 4판. 부록A
3. https://www.youtube.com/watch?v=ZnrtnFEz22E
4. http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html

profile
아무거나 내가 적고 싶은거 🤟

0개의 댓글