Cloud | AI | BigData

[AWS-Hadoop|Hive|Spark] Hadoop 구축 핵심 및 에러 정리

개폰지밥 2022. 12. 10. 10:00
반응형
☞ 관련 글
2022.11.16 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark]AWS 회원가입, 계정 삭제, 비밀번호 변경
2022.12.03 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark]인스턴스 생성, 시작과 종료
2022.12.04 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] 인스턴스 putty 접속 + root 접속 + puttygen .ppk 생성 +
2022.12.05 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] 계정생성 Java8설치 + selinux해제
2022.12.06 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Haoop3.2 설치(Hadoop 계정)
2022.12.07 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hadoop 3.2 설정파일 설정
2022.12.08 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] 인스턴스 복사(AMI 생성) + 이미지/인스턴스 삭제
2022.12.09 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hadoop Name/DataNode 및 Client 서버 기본 설정+ ssh 키생성
2022.12.10 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hdfs 파일 포맷, Hdfs/Yarm 시작 종료
2022.12.10 - [Cloud | AI | BigData] - [AWS-Hadoop|Hive|Spark] Hadoop 구축 핵심 및 에러 정리
2022.12.11 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] yum으로 MariaDB 10.5 설치
2022.12.12 - [Cloud | AI | BigData] - [AWS-Hadoop|Hive|Spark] Hive 3 설치
2022.12.13 - [Cloud | AI | BigData] - [AWS-Hadoop|Hive|Spark] Spark 3 설치
2022.12.14 - [Cloud | AI | BigData] - [AWS-Hadoop|Hive|Spark] pip install로 jupyter 설치

 

| 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 설정

 

☞ 자세한 사항 : 

2022.12.09 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hadoop Name/DataNode 및 Client 서버 기본 설정+ ssh 키생성

 

각 서버에 맞게 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

☞ 자세한 사항 :

2022.12.09 - [Cloud | AI | BigData] - [AWS-EC2 Hadoop|Hive|Spark] Hadoop Name/DataNode 및 Client 서버 기본 설정+ ssh 키생성

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을 강제로 죽인다.


 

반응형