yum install java-1.8.0-openjdk-devel.x86_64 -y
java -version
cd /opt
mkdir hadoop
cd hadoop
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz
https://hadoop.apache.org/release/ 에서 여러 버전을 다운 받을 수 있다.
tar -xzf hadoop-3.3.3.tar.gz
adduser lyk
passwd lyk
usermod -aG wheel lyk
sudo chown -R lyk:lyk /opt/hadoop
su lyk
localhost로 ssh가 접속이 되는지 확인한다.
ssh localhost
ssh key를 생성해준다.
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh key는 비밀번호보다 보안이 좋으며 서버간 접속 시 로그인을 하지 않아도 되기 때문에 생성한다.
-t 옵션은 무슨 알고리즘으로 key를 생성할건지를 뜻한다. 여기서는 rsa 알고리즘으로 생성한다.
-p 옵션은 passphrase라고 private key를 보호하기 위한 추가적인 옵션이지만 여기서는 필요없으므로 비워둔다.
-f 옵션은 key 파일을 어디에 무슨 이름으로 할지에 대한 옵션이다.
id_rsa는 private key로 절대 노출하면 안된다.
ssh의 public key를 authorized_keys에 추가해준다.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
authorized_keys는 원격 호스트에 로그인 하도록 허용된 사용자를 인증하는 데 사용되는 키를 저장하는 곳이다. 즉, client들의 공개키가 저장되는 곳이다.
owner만 읽고 쓸 수 있게 권한을 변경해준다.
chmod 0600 ~/.ssh/authorized_keys
sudo update-alternatives --config java
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.372.b07-1.el7_9.x86_64
export HADOOP_HOME=/opt/hadoop/hadoop-3.3.3
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source ~/.bashrc
hadoop 설정 파일들이 있는 directory로 이동한다.
cd $HADOOP_CONFIG_HOME
core-site.xml을 다음과 같이 수정해준다.
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
uri 형식으로 입력하여 기본 파일 시스템 이름을 설정해준다.
datanode들은 이 uri로 hearbeat를 보낸다.
hdfs-site.xml을 다음과 같이 수정해준다.
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/data/datanode</value>
</property>
</configuration>
dfs.replication은 파일이 생성될 때 복제 개수를 나타낸다.
dfs.namnode.name.dir은 namenode의 hdfs 파일시스템의 메타데이터를 저장하는 경로설정이다.
dfs.datanode.data.dir은 datanode의 hdfs 블록을 저장하는 경로의 목록이다.
yarn-site.xml을 수정해준다.
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
<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.webapp.address</name>
<value>0.0.0.0:8088</value>
</property>
</configuration>
yarn.resourcemanager.hostname은 resourcemanager의 hostname을 설정하여 모든 노드가 올바른 리소스 매니저와 통신할 수 있도록 하기 위함이다.
yarn.nodemanager.aux-services는 yarn 노드 매니저에서 실행되는 보조 서비스(auxiliary services)를 정의하는데 사용된다. 여기서는 보조 서비스로 MapReduce Shuffle 서비스를 활성화 한 것이며 MapReduce 작업의 데이터 전송을 지원한다. 이를 통해 맵 태스크와 리듀스 태스크 간의 데이터 이동을 최적화하고, MapReduce 작업의 성능을 향상시킬 수 있다.
yarn.nodemanager.aux-services.mapreduce_shuffle.class는 yarn 노드 매니저 설정에서 MapReduce ShuffleHandler를 구현한 Java 클래스를 지정한다. ShuffleHandler 클래스는 map 태스크로부터 중간 결과를 수신하여 메모리나 디스크에 저장하고 reudce 태스크가 요청하는 데이터를 제공한다.
yar.resourcemanager.webapp.address는 Resource Manager의 웹 애플리케이션 주소를 지정하는 구성 속성이다. 웹 애플리케이션을 통해 YARN 클러스의 리소스 매니저에 대한 상태 정보, 클러스터 메트릭, 실행 중인 애플리케이션 등을 모니터링 할 수 있다.
mapred-site.xml을 설정해준다.
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-master:9001</value>
</property>
</configuration>
mapreduce.framework.name은 MapReduce 작업을 실행하기 위해 사용할 프레임워크를 지정한다. 일반적으로 yarn이 사용되며 yarn은 hadoop 클러스터에서 리소스 관리와 작업 스케줄링을 담당하는 컴포넌트이다. 다른 값으로는 local이 있으며 이는Hadoop 클러스터 외부에서 독립적으로 실행되는 로컬 환경에서 MapReduce 작업을 실행함을 의미한다. 주로 개발 및 테스트 목적으로 사용되는 작은 규모의 데이터셋에 적합하다.
yarn.app.mapreduce.am.env는 yarn MapReudce ApplicationMaster의 환경 변수를 설정하는 속성이다. 이 속성을 사용하여 MapReduce 애플리케이션의 ApplicationMaster에 전달되는 환경 변수를 지정할 수 있다. 여기서는 Hadoop MapReduce의 홈 디렉토리를 설정해주었다. ApplicationMaster는 이 값을 참조하여 해당 디렉토리에서 필요한 파일 및 설정을 참조할 수 있다.
mapreduce.map.env는 MapReduce 작업의 맵 태스크에 대한 환경 변수를 설정하는 구성 속성이다.
mapreduce.reduce.env는 MapReduce 작업의 리듀스 태스크에 대한 환경 변수를 설정하는 구성 속성이다.
mapred.job.tracker는 JobTracker의 주소를 지정하는 속성이다. 현재는 JobTracker 대신 YARN으로 대체되어 필요하지 않다.
Hadoop 실행을 하기 위해 namenode와 datanode 폴더를 만들어둔다.
cd /opt/hadoop
mkdir data
cd data
mkdir namenode
mkdir datanode
네트워크 호스트 이름과 IP 주소의 매핑 정보를 추가해준다.
vim /etc/hosts
10.250.xxx.xx hadoop-master
hostname을 바꿔준다.
vim /etc/hostname
hadoop-master
재시작을 하여 hostname을 변경 시켜준다.
reboot -p
HDFS의 네임노드를 포맷한다.
hdfs namenode -format
namenode를 초기화하고 hdfs의 파일 시스템 메타데이터를 새로 생성하는 작업을 수행한다. 기존의 파일 시스템 데이터와 메타데이터가 삭제되고 새로운 namenode 포맷이 수행된다. 실제 운용 환경에서는 사용되지 않아야 하며 실행하기 전 백업이나 기타 필요한 조치를 취하고 주의하여 사용해야 한다.
hadoop을 실행시킨다.
start-dfs.sh
start-yarn.sh
jps 명령어를 아래 5가지의 job들이 나오면 성공이다.
10.250.xxx.xx:9870을 들어가 datanode들이 live로 잘 떠 있는지 확인한다.