CentOS7에 하둡 설치하기
Virtualbox에 CentOS7VM 올리기
CentOS7 이미지(.iso)로 VM생성
JAVA 확인

자바 다운로드
JAVA 환경변수 설정
export JAVA_HOME=/usr/local/jdk-18.0.2.1/
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_OPTS="-Dfile.encoding=UTF-8"
export CLASSPATH="."
- 환경설정 후 적용 및 재부팅해준다.
source /etc/profile
reboot

- 재부팅이 완료되면,
java -version
명령어로 자바 설치를 확인해준다.

- 방금 재부팅 했지만, 성공적인 자바 설치 축하로써
poweroff
후 스냅샷을 찍어준다.
하둡 설치
압축 해제한 하둡 파일 이동

mv hadoop-3.2.4 /opt/hadoop
- 압축 해제한 하둡파일을 /opt디렉토리에 hadoop이라는 이름으로 옮겨준다.
하둡 환경 변수 설정 (JAVA환경변수 설정한 곳 아래에 덧붙혀준다.)

export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"
- 이후 마찬가지로 환경설정 적용 및 재부팅해준다.
source /etc/profile
reboot

hadoop version
- 성공적으로 설치가 확인되었으니 스냅샷을 찍어준다.
poweroff
설치 잘 됬는지 확인
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount $HADOOP_HOME/etc/hadoop/hadoop-env.sh wordcount_output
- jar버전 잘 확인
- word 카운트를 사용해서 확인해본다.
- 위 출처 블로그에는 3.2.2버전으로 되어있어 우리가 설치한 3.2.4버전으로 내용을 바꿔서 확인해야 한다.

- 에러

- 성공
- 이렇게 뭔가 길게 나온다.

ls -la wordcount_output/*
- SUCCESS를 확인할 수 있다.
SSH 설치
yum install openssh*
/usr/sbin/sshd
ssh-keygen -t rsa

- 위와같은 출력을 볼 수 있다.

- 키가 잘 생성되었다.

- 내 스스로 ssh접속을 해보면 잘 접솔 할 수 있다.
- 그러나 SSH Public Key를 생성했는데도 비밀번호를 물어본다.

ssh-copy-id root@localhost
- Public Key를 상대 VM (여기서는 localhost)에 넘겨줌으로써 비밀번호 대신 ssh 키를 사용해 로그인한다.

- 다시 접근하면 비밀번호를 묻지 않는다.
환경변수 수정
hadoop-env.sh 파일 수정
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
- export JAVA_HOME= 에 jdk경로를 추가한다.

- export JAVA_HOME=/usr/local/jdk-18.0.2.1
core-site.xml수정(Namenode 세팅)
- 영역 안에서 수정한다.
vi $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
hdfs-site.xml수정
- 역시 영역 안에서 정한다.
- vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Namenode 포맷
hdfs namenode -format

하둡 클러스터 시작하기
- start-all.sh
- jps

- 잘 로그인 되었고, jps에 Datanode와 Namenode가 있어야하는데 없다...?
로그 메세지 확인
cd /opt/hadoop/etc/hadoop/
cat hadoop-root-namenode-localhost.localdomain.log
2022-08-31 07:03:18,600 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
2022-08-31 07:03:18,762 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: createNameNode []
2022-08-31 07:03:18,887 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: Loaded properties from hadoop-metrics2.properties
2022-08-31 07:03:19,062 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s).
2022-08-31 07:03:19,062 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system started
2022-08-31 07:03:19,089 INFO org.apache.hadoop.hdfs.server.namenode.NameNodeUtils: fs.defaultFS is file:///
2022-08-31 07:03:19,225 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddress(DFSUtilClient.java:781)
at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddressCheckLogical(DFSUtilClient.java:810)
at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddress(DFSUtilClient.java:772)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getRpcServerAddress(NameNode.java:555)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loginAsNameNodeUser(NameNode.java:695)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:720)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:977)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:950)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1723)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1790)
2022-08-31 07:03:19,227 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1: java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
2022-08-31 07:03:19,229 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1
************************************************************/
- fs.defaultFS에 권한이 없다.?
- file:///에 권한이 없다는 것은 file경로가 ///로 되어잇어 그런 것 같다.
- 경로 수정하는것을 찾아봐야 할듯 하다.
해결
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://127.0.0.1:9000</value>
</property>
</configuration>
- 위 코드를 복사하니 jps에서 Namenode와 Datanode가 나왔다.

Master VM클론해서 worker1,2만들어주기

- master를 linked clone으로 worker노드 2개로 클론해줬다.
- 각 worker노드의 컴퓨팅 자원은 CPU:1, RAM:2Gb 로 바꿔준다.
호스트이름 변경
hostnamectl set-hostname [변경할 호스트이름]
- 호스트이름을 각 master, worker1, worker2로 바꿔주고, exit명령어로 연결해제 후 재연결해준다.
host setup
vi /etc/hosts
127.0.0.1 localhost
192.168.0.185 master
192.168.0.114 worker1
192.168.0.115 worker2
ping 테스트

SSH public key 복사하기
scp -rp ~/.ssh/id_rsa.pub root@worker1:~/.ssh/authorized_keys
scp -rp ~/.ssh/id_rsa.pub root@worker2:~/.ssh/authorized_keys
- 근데 현재 Master에서 클론해온 VM들인데 이렇게 복사할 필요가 없긴 하다.
- 퍼블릭키까지 복사되었기 때문이다.
- 그냥 각자 ip_rsa.pub을 authorized_keys로 복사해줘도 똑같을 것이다.

- worker1 2 모두 잘 연결되었다.
core-site.xml 수정
<configuration> </configuration>
영역 안에서 수정
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
namenode와 datanode디렉토리 생성 (master만)
cd $HADOOP_HOME
rm -rf namenode
rm -rf datanode
mkdir namenode
chmod 777 namenode
mkdir datanode
chmod 777 datanode
worker1, 2에 datanode폴더 생성
cd $HADOOP_HOME
rm -rf datanode
mkdir datanode
chmod 777 datanode
hdfs-site.xml수정 (master만)
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/datanode</value>
</property>
</configuration>
hdfs-site.xml수정 (worker1, 2)
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/datanode</value>
</property>
</configuration>
job tracker 셋업 (모두)
vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml수정 (모두)
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.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/opt/hadoop/share/hadoop/mapreduce/*,/opt/hadoop/share/hadoop/mapreduce/lib/*,/opt/hadoop/share/hadoop/common/*,/opt/hadoop/share/hadoop/common/lib/*,/opt/hadoop/share/hadoop/hdfs/*,/opt/hadoop/share/hadoop/hdfs/lib/*,/opt/hadoop/share/hadoop/yarn/*,/opt/hadoop/share/hadoop/yarn/lib/*</value>
</property>
</configuration>
masters, workers수정 (master만 적용)
vi $HASOOP_HOME/etc/hadoop/masters

vi $HASOOP_HOME/etc/hadoop/workers

namenode 포맷 (master)
하둡 start alc process리스트 확인(모두)
start-all.sh
jps

- 잘 나온다 ㅎㅎ
- 여기서 master에서만 namenode가 나와야한다.
- 잘 보면 worker1에도 namenode가 존재하는데, 이는 처음 실수로 start-all.sh를 worker1에서 해서 그렇다.
- 재부팅한 후 다시 확인해보면 없어져있다.
텍스트파일 업로드 해보기(master)
hadoop에 있는 README.txt올려보기
