[AWS-Hadoop|Hive|Spark] Hadoop 구축 핵심 및 에러 정리
| System Structure
목차
1. Hadoop 사전준비
2. Hadoop 설정파일 설정
3. Hostname 설정
4. 보안관련
5. hdfs 파일 포맷
6. 에러 모음
내용
1. Hadoop 사전준비
☞ 자세한 사항 :2022.12.05 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] 계정생성 Java8설치 + selinux해제
- JAVA 설치
java -version --설치되어있으면 JAVA 버전이 뜬다.
sudo dnf install java-1.8.0-openjdk ant -y
sudo yum install java-1.8* -y
vi ~/.bashrc 아래 내용 추가
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el9_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc
2. Hadoop 설정파일 설정
☞ 자세한 사항 : 2022.12.07 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hadoop 3.2 설정파일 설정
core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml, workers
2.1 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:8020/</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
2.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/data/name1,file:///home/hadoop/data/name2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/data</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>namenode:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>secondnode:50090</value>
</property>
<property>
<name>dfs.datanode.http-address</name>
<value>0.0.0.0:50010</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///home/hadoop/data/namesecondary</value>
</property>
</configuration>
2.3 yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>secondnode</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/data/nm</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
</configuration>
2.4 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>namenode:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>namenode:19888</value>
</property>
</configuration>
2.5 workers
datanode1
datanode2
datanode3
3. Hostname 설정
☞ 자세한 사항 :
각 서버에 맞게 hostname 설정
3.1 HOST Name 설정
sudo hostnamectl set-hostname namenode
sudo hostnamectl set-hostname secondnode
sudo hostnamectl set-hostname datanode3
sudo hostnamectl set-hostname client
3.2 /etc/hosts 수정
sudo vi /etc/hosts 아래에 추가
172.31.40.48 namenode datanode1
172.31.38.6 secondnode datanode2
172.31.34.81 datanode3
172.31.34.178 client
4. 보안관련
☞ 자세한 사항 : 2022.12.05 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] 계정생성 Java8설치 + selinux해제
4.1 Selinux 해제
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
☞ 자세한 사항 :
4.2 ssh 키 생성 및 복사
각각의 모든 서버에서 해야합니다.
ssh-keygen
sudo vi /etc/ssh/sshd_config
PasswordAuthentication no -> yes로 변경
sudo systemctl restart sshd
ssh-copy-id hadoop@namenode
ssh-copy-id hadoop@secondnode
ssh-copy-id hadoop@datanode3
ssh-copy-id hadoop@client
4.3 방화벽 종료
Hadoop 관련 포트를 모두 여시거나, 방화벽을 내리는것이 좋습니다.
systemctl stop firewalld
4.4 보안그룹 생성
☞ 자세한 사항 :
2022.12.07 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hadoop 3.2 설정파일 설정
AWS 생성시 본인 IP대역대에 한해서 모든 TCP를 허용한다. 또한 보안그룹끼리의 모든 TCP를 허용한다.
5. hdfs 파일 포맷
☞ 자세한 사항 : 2022.12.10 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hdfs 파일 포맷, Hdfs/Yarm 시작 종료
hdfs namenode -format
5.1 Hdfs, Yarm, Jab History 시작
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
5.2 Hdfs, Yarm, Jab History 종료
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
6. 에러 모음
Hadoop 에러가 발생되면 자세한 log를 보기위해서 log 파일을 보는것이 좋습니다.
log 파일을 위치는 보통 $HADOOP_HOME/hadoop/logs 에 있습니다.
[hadoop@secondnode logs]$ cd /home/hadoop/hadoop/logs
[hadoop@secondnode logs]$ ls
[hadoop@secondnode logs]$ vi hadoop-hadoop-secondarynamenode-secondnode.log
또한 에러가 생겼으면
Hdfs를 포맷해주시는것이 좋습니다.
포맷해주기전에 tmp(임시 디렉토리)와 data 디렉토리를 삭제하고 하는것이 좋습니다.
| tmp(임시 디렉토리) 삭제
[hadoop@Namenode ~]$ cd /tmp/
[hadoop@Namenode tmp]$ ls
hadoop-yarn-hadoop
hsperfdata_hadoop
systemd-private-7575bd50671142aa9583a2707733e1c5-chronyd.service-Zo1tT5
systemd-private-7575bd50671142aa9583a2707733e1c5-dbus-broker.service-vk4ce8
systemd-private-7575bd50671142aa9583a2707733e1c5-mariadb.service-yNz0A8
systemd-private-7575bd50671142aa9583a2707733e1c5-systemd-logind.service-ylMovN
[hadoop@Namenode tmp]$ rm -rf *
| data 디렉토리 삭제
[hadoop@Namenode hadoop]$ cat /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/data</value>
[hadoop@Namenode hadoop]$ cd /home/hadoop/
[hadoop@Namenode ~]$ rm -rf data/
위 처럼 Hdfs를 포맷했는데도 에러가 해결되지 않으면 아래를 참고해주세요. ★
에러 1
[hadoop@Namenode hadoop]$ hd -put ~/hflight2.csv /hadoop/workspace/
put: File /hadoop/workspace/hflight2.csv._COPYING_ could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node(s) are excluded in this operation.
[hadoop@secondnode logs]$ cd /home/hadoop/hadoop/logs
[hadoop@secondnode logs]$ vi hadoop-hadoop-secondarynamenode-secondnode.log
org.apache.hadoop.ipc.client: retrying connect to server: . already tried 0 time(s); maxretries=45
해결
1) 방화벽 해제
sudo systemctl stop firewalld
2) 보안그룹 수정 -- AWS 사용시
에러2
[hadoop@Master tmp]$ hd -put ~/hflight2.csv /hadoop/workspace/
put: Call From hadoop.master/172.31.42.135 to master:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
해결
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
원인
hadoop이 안켜져있었음
에러3
[hadoop@Master ~]$ hd -mkdir -p /hadoop/workspace/
[hadoop@Master ~]$ hd -put ~/hflight2.csv /hadoop/workspace/
put: Cannot create file/hadoop/workspace/hflight2.csv._COPYING_. Name node is in safe mode.
해결
[hadoop@Master ~]$ hadoop dfsadmin -safemode leave
WARNING: Use of this script to execute dfsadmin is deprecated.
WARNING: Attempting to execute replacement "hdfs dfsadmin" instead.
Safe mode is OFF
원인
Namenode 비정상 종료시 safemode가 활성화 된다고 함
에러4
jps로 확인시 namenode 혹은 datanode 혹은 Resource manager 등이 안올라옴
자세한 사항을 위해 logs 파일을 본다.
[hadoop@Master logs]$ cd /home/hadoop/hadoop/logs
[hadoop@Master logs]$ ls
hadoop-hadoop-namenode-hadoop.master.log SecurityAuth-hadoop.audit
hadoop-hadoop-namenode-hadoop.master.out
[hadoop@Master logs]$ vi hadoop-hadoop-namenode-hadoop.master.log
2022-12-01 05:44:53,622 INFO org.apache.hadoop.http.HttpServer2: HttpServer.start() threw a non Bind IOException
java.net.BindException: Port in use: 0.0.0.0:9870
at org.apache.hadoop.http.HttpServer2.constructBindException(HttpServer2.java:1231)
at org.apache.hadoop.http.HttpServer2.bindForSinglePort(HttpServer2.java:1253)
at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:1316)
at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:1167)
at org.apache.hadoop.hdfs.server.namenode.NameNodeHttpServer.start(NameNodeHttpServer.java:182)
-> 9870 포트를 이미 사용중이라는 것을 확인할 수 있었다.
[hadoop@Master logs]$ netstat -tulpn | grep LISTEN --사용중인 port를 확인한다.
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 172.31.42.135:8032 0.0.0.0:* LISTEN 8862/java
tcp 0 0 172.31.42.135:8033 0.0.0.0:* LISTEN 8862/java
tcp 0 0 172.31.42.135:8020 0.0.0.0:* LISTEN 8466/java
tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN 8466/java
tcp 0 0 172.31.42.135:8030 0.0.0.0:* LISTEN 8862/java
tcp 0 0 172.31.42.135:8031 0.0.0.0:* LISTEN 8862/java
tcp 0 0 172.31.42.135:8088 0.0.0.0:* LISTEN 8862/java
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
[hadoop@Master logs]$ kill -9 8466 -- 9870을 가지고 있는 process 8466을 강제로 죽인다.