[AWS] 06. AWS EC2 인스턴스 방화벽 설정
AWS EC2 인스턴스 방화벽 설정
AWS EC2 인스턴스 방화벽 설정
Install Hadoop on AWS
EC2 인스턴스 방화벽 설정
- EC2 인스턴스는 기본적으로 SSH 프로토콜 사용을 위한 22번 포트를 제외하고는 모든 포트들이 막혀있다. 따라서 Hadoop이 사용하는 포트의 방화벽을 풀어줘야 한다.
네트워크 및 보안 - 보안 그룹 - launch-wizard-1 체크 박스 선택 - 인바운드 탭 - ‘편집’ 버튼 클릭
인바운드 규칙 편집 - 규칙 추가
- 아래와 같이 편집
- 유형 : 사용자 지정 TCㅈP 규칙
- 프로토콜 : TCP
- 포트 범위 :
- 소스 :
- ‘저장’ 버튼 클릭
- 아래와 같이 변경 된걸 확인 할 수 있다.
- 나의 경우 하둡관련 인스턴스가 launch-wizard-6이어서 6에 추가했다.
하둡 다운로드 및 설치
- 하둡 다운로드
- http://mirror.apache-kr.org/hadoop/common에서 1.2.X stable 버전을 사용
[ec2-user@namenode ~]$ cd [ec2-user@namenode ~]$ wget https://archive.apache.org/dist/hadoop/core/hadoop-1.2.1/hadoop-1.2.1.tar.gz --2019-04-23 07:43:01-- https://archive.apache.org/dist/hadoop/core/hadoop-1.2.1/hadoop-1.2.1.tar.gz Resolving archive.apache.org (archive.apache.org)... 163.172.17.199 Connecting to archive.apache.org (archive.apache.org)|163.172.17.199|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 63851630 (61M) [application/x-gzip] Saving to: 'hadoop-1.2.1.tar.gz' hadoop-1.2.1.tar.gz 100%[============================>] 60.89M 2.39MB/s in 31s 2019-04-23 07:43:34 (1.95 MB/s) - 'hadoop-1.2.1.tar.gz' saved [63851630/63851630] [ec2-user@namenode ~]$
- 하둡 설치파일 압축 해제
# hadoop 압축 해제 [ec2-user@namenode ~]$ tar xvfz hadoop-1.2.1.tar.gz 엄청 길게 실행 됨+_+ # 심볼릭 링크 생성 [ec2-user@namenode ~]$ ln -s hadoop-1.2.1 hadoop [ec2-user@namenode ~]$ cd [ec2-user@namenode ~]$ vi + .bash_profile 가장 아래쪽에 추가하세요. vi 편집기 실행 export HADOOP_HOME=/home/ec2-user/hadoop export PATH=$HADOOP_HOME/bin:$PATH export PATH=$HADOOP_HOME/sbin:$PATH vi 편집기 종료
[ec2-user@namenode ~]$ . .bash_profile
[ec2-user@namenode ~]$ env|grep HOME
HADOOP_HOME=/home/ec2-user/hadoop
EC2_AMITOOL_HOME=/opt/aws/amitools/ec2
EC2_HOME=/opt/aws/apitools/ec2
JAVA_HOME=/usr/java/jdk1.7.0_51
AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
HOME=/home/ec2-user
AWS_AUTO_SCALING_HOME=/opt/aws/apitools/as
AWS_ELB_HOME=/opt/aws/apitools/elb
[ec2-user@namenode ~]$ pwd
/home/ec2-user
- namenode에서 다른 노드(snamenode, data01, data02, data03)들로 hadoop-1.2.1.tar.gz을 scp 명령어로 복사한다.
[ec2-user@namenode ~]$ scp hadoop-1.2.1.tar.gz ec2-user@snamenode: hadoop-1.2.1.tar.gz 100% 61MB 114.7MB/s 00:00 [ec2-user@namenode ~]$ scp hadoop-1.2.1.tar.gz ec2-user@data01: hadoop-1.2.1.tar.gz 100% 61MB 114.3MB/s 00:00 [ec2-user@namenode ~]$ scp hadoop-1.2.1.tar.gz ec2-user@data02: hadoop-1.2.1.tar.gz 100% 61MB 56.6MB/s 00:01 [ec2-user@namenode ~]$ scp hadoop-1.2.1.tar.gz ec2-user@data03: hadoop-1.2.1.tar.gz 100% 61MB 113.4MB/s 00:00 [ec2-user@namenode ~]$
- 각각의 snamenode, data01, data02, data03 노드에 로그인하여 아래와 같이 hadoop-1.2.1.tar.gz 파일의 압축을 풀어주고, 위 과정처럼 환경변수를 확인한다.
$ cd $ tar xvfz hadoop-1.2.1.tar.gz $ ln -s hadoop-1.2.1 hadoop $ vi .bash_profile $ source .bash_profile
- Hadoop 환경 설정 파일 수정(1) - hadoop-env.sh
[ec2-user@namenode ~]$ cd $HADOOP_HOME/conf [ec2-user@namenode conf]$ vi hadoop-env.sh vi 편집기 실행 export JAVA_HOME=/usr/java/jdk1.7.0_51/jre export HADOOP_HOME=/home/ec2-user/hadoop export HADOOP_HOME_WARN_SUPPRESS=1 vi 편집기 종료
- Hadoop 환경 설정 파일 수정(2) - masters
[ec2-user@namenode conf]$ vi masters [ec2-user@namenode conf]$ vi 편집기 실행 namenode-internal snamenode-internal vi 편집기 종료
- Hadoop 환경 설정 파일 수정(3) - slaves
[ec2-user@namenode conf]$ vi slaves [ec2-user@namenode conf]$ vi 편집기 실행 data01-internal data02-internal data03-internal vi 편집기 종료
- Hadoop 환경 설정 파일 수정(4) - core-site.xml
[ec2-user@namenode conf]$ vi core-site.xml [ec2-user@namenode conf]$ vi 편집기 실행 <configuration> <property> <name>fs.default.name</name> <value>hdfs://namenode-internal:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/ec2-user/hadoop-tmp-dir/</value> </property> </configuration> vi 편집기 종료 # 아래 디렉토리들은 하둡 실행시에 자동으로 생성된다. /home/ec2-user/hadoop-tmp-dir
- Hadoop 환경 설정 파일 수정(5) - hdfs-site.xml
[ec2-user@namenode conf]$ vi hdfs-site.xml [ec2-user@namenode conf]$ vi 편집기 실행 <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.http.address</name> <value>namenode-internal:50070</value> </property> <property> <name>dfs.secondary.http.address</name> <value>snamenode-internal:50090</value> </property> <property> <name>dfs.name.dir</name> <value>/home/ec2-user/hadoop-tmp-dir/dfs/name</value> </property> <property> <name>dfs.name.edits.dir</name> <value>${dfs.name.dir}</value> </property> <property> <name>dfs.data.dir</name> <value>/home/ec2-user/hadoop-tmp-dir/dfs/data</value> </property> </configuration> vi 편집기 종료
# 아래 디렉토리들은 하둡 실행시에 자동으로 생성된다.
/home/ec2-user/hadoop-tmp-dir/dfs
/home/ec2-user/hadoop-tmp-dir/dfs/name
/home/ec2-user/hadoop-tmp-dir/dfs/data
- Hadoop 환경 설정 파일 수정(6) - mapred-site.xml
[ec2-user@namenode conf]$ vi mapred-site.xml [ec2-user@namenode conf]$ vi 편집기 실행 <configuration> <property> <name>mapred.job.tracker</name> <value>namenode-internal:9001</value> </property> </configuration> vi 편집기 종료
- 위와 같이 namenode에서 수정한 파일들을 다른 노드들에게도 scp 명령어로 복사해 준다.
[ec2-user@namenode conf]$ scp hadoop-env.sh masters slaves core-site.xml hdfs-site.xml mapred-site.xml ec2-user@snamenode:/home/ec2-user/hadoop/conf hadoop-env.sh 100% 2554 3.6MB/s 00:00 masters 100% 37 64.4KB/s 00:00 slaves 100% 48 96.3KB/s 00:00 core-site.xml 100% 415 753.4KB/s 00:00 hdfs-site.xml 100% 877 1.5MB/s 00:00 mapred-site.xml 100% 294 484.2KB/s 00:00 [ec2-user@namenode conf]$ scp hadoop-env.sh masters slaves core-site.xml hdfs-site.xml mapred-site.xml ec2-user@data01:/home/ec2-user/hadoop/conf hadoop-env.sh 100% 2554 3.8MB/s 00:00 masters 100% 37 61.9KB/s 00:00 slaves 100% 48 103.4KB/s 00:00 core-site.xml 100% 415 812.4KB/s 00:00 hdfs-site.xml 100% 877 1.7MB/s 00:00 mapred-site.xml 100% 294 540.3KB/s 00:00 [ec2-user@namenode conf]$ scp hadoop-env.sh masters slaves core-site.xml hdfs-site.xml mapred-site.xml ec2-user@data02:/home/ec2-user/hadoop/conf hadoop-env.sh 100% 2554 3.3MB/s 00:00 masters 100% 37 63.8KB/s 00:00 slaves 100% 48 89.6KB/s 00:00 core-site.xml 100% 415 641.6KB/s 00:00 hdfs-site.xml 100% 877 1.5MB/s 00:00 mapred-site.xml 100% 294 556.6KB/s 00:00 [ec2-user@namenode conf]$ scp hadoop-env.sh masters slaves core-site.xml hdfs-site.xml mapred-site.xml ec2-user@data03:/home/ec2-user/hadoop/conf hadoop-env.sh 100% 2554 3.6MB/s 00:00 masters 100% 37 66.9KB/s 00:00 slaves 100% 48 91.6KB/s 00:00 core-site.xml 100% 415 812.1KB/s 00:00 hdfs-site.xml 100% 877 1.6MB/s 00:00 mapred-site.xml 100% 294 616.2KB/s 00:00 [ec2-user@namenode conf]$
Hadoop Cluster의 HDFS 포맷
- Hadoop을 실행하기 전에 아래와 같이 namenode에서 HDFS(Hadoop Distributed File System)을 포맷해야 한다.
- 포맷은 Hadoop Cluster set-up 단계에서 한 번만 실행하며, 추후 필요 시 재포맷 할 수 있다.
[ec2-user@namenode conf]$ hadoop namenode -format 19/04/23 08:34:59 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = namenode.localdomain/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 1.2.1 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013 STARTUP_MSG: java = 1.7.0_51 ************************************************************/ 19/04/23 08:35:00 INFO util.GSet: Computing capacity for map BlocksMap 19/04/23 08:35:00 INFO util.GSet: VM type = 64-bit 19/04/23 08:35:00 INFO util.GSet: 2.0% max memory = 1013645312 19/04/23 08:35:00 INFO util.GSet: capacity = 2^21 = 2097152 entries 19/04/23 08:35:00 INFO util.GSet: recommended=2097152, actual=2097152 19/04/23 08:35:00 INFO namenode.FSNamesystem: fsOwner=ec2-user 19/04/23 08:35:00 INFO namenode.FSNamesystem: supergroup=supergroup 19/04/23 08:35:00 INFO namenode.FSNamesystem: isPermissionEnabled=true 19/04/23 08:35:00 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100 19/04/23 08:35:00 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s) 19/04/23 08:35:00 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0 19/04/23 08:35:00 INFO namenode.NameNode: Caching file names occuring more than 10 times 19/04/23 08:35:01 INFO common.Storage: Image file /home/ec2-user/hadoop-tmp-dir/dfs/name/current/fsimage of size 114 bytes saved in 0 seconds. 19/04/23 08:35:01 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/ec2-user/hadoop-tmp-dir/dfs/name/current/edits 19/04/23 08:35:01 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/ec2-user/hadoop-tmp-dir/dfs/name/current/edits 19/04/23 08:35:01 INFO common.Storage: Storage directory /home/ec2-user/hadoop-tmp-dir/dfs/name has been successfully formatted. 19/04/23 08:35:01 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at namenode.localdomain/127.0.0.1 ************************************************************/ [ec2-user@namenode conf]$
- 추후 namenode 재포맷할 시
- Re-format filesystem in /home/oracle/hadoop/hadoop/dfs/name ? (Y or N) <- 반드시 대문자 Y 를 사용!
Hadoop Cluster의 시작과 정지
- Hadoop Cluster 시작은 두 단계로 이루어져 있다.
- (1) Hadoop Cluster start
- 1-1. HDFS daemon들을 start
- 마스터 노드에 NameNode 데몬 프로세스가 기동되고 다른 모든 슬레이브 노드에는 DataNod 데몬이 기동된다.
- HDFS 데몬 프로세스들을 기동시키기 위해서 네임노드에서 start-dfs.sh 쉘 스크립트 명령어를 실행시킨다.
- 1-2. MapReduce daemon 들을 start
- 마스터 노드(여기서는 namenode)에 JobTracker 데몬 프로세스가 기동되고 다른 모든 슬레이브 노드에는 TraskTracker 데몬 프로세스가 기동된다.
- MapReduce 데몬 프로세스들을 기동시키기 위해서 네임노드(또는 JobTracker 를 기동시키기 원하는 노드)에서 start-mapred.sh 쉘 스크립트 명령어를 실행시킨다.
- start-mapred.sh 를 실행시킨 노드에 JobTracker 데몬프로세스가 start 되고, slaves 파일에 기록된 노드에 TaskTraker 들이 start 되어 MapReduce Cluser 가 기동된다.
- 1-3. HDFS 와 MapReduce 를 함께 start
- HDFS 와 MapReduce 를 모두 start 시키기 위해서는 start-all.sh 쉘 스크립트 명령어를 실행시킨다.
- (2) Hadoop Cluster stop
- 하둡 클러스터를 stop 하는 것도 두 단계로 이루어 진다. 그러나 stop 시키는 것은 start 하는 것과 반대의 순서로 한다.
- 2-1. MapReduce 데몬 프로세스들을 stop
- JobTracker 가 실행되는 노드(여기서는 namenode)에서 stop-mapred.sh 명령어를 실행한다.
- stop-mapred.sh 를 실행한 노드에서 실행중인 JobTracker 데몬과 slave 파일에 기술된 노드들에서 실행중인 TaskTracker 데몬들을 stop 시키고 MapReduce 클러스터를 정지한다.
- Master 노드(여기서는 namenode)에 JobTracker 데몬 프로세스가 stop 되고, 다른 모든 Slave 노드에 TraskTracker 데몬 프로세스가 stop 된다.
- 2-2. HDFS 데몬 프로세스들을 stop
- NameNode 데몬이 실행중인 namenode 에서 stop-dfs.sh 쉘 스크립트 명령어를 실행한다.
- stop-dfs.sh 를 실행한 노드에서 실행중인 NameNode 데몬가 stop 되고, 다른 모든 Slave 노드에 DataNode 데몬 프로세스들이 stop 된다.
- master 노드인 namenode 에 NameNode 데몬 프로세스가 stop 되고 다른 모든 slave 노드에 DataNode
- (3) 하둡 클러스터의 시작과 정지 예
- jps 명령어로 하둡 클러스터가 실행 중인지 확인한다. $ jps
- 하둡 클러스터 데몬 프로세스들이 실행중이 아니면 다음 명령어로 하둡 클러스터를 start 시킨다. - HDFS 와 MapRed 를 각각 start 시키고 stop 시켜 본다.
- HDFS & 맵리듀스 모두 시작
# hdfs & mapred 시작 [ec2-user@namenode conf]$ start-all.sh starting namenode, logging to /home/ec2-user/hadoop/logs/hadoop-ec2-user-namenode-namenode.localdomain.out data02-internal: starting datanode, logging to /home/ec2-user/hadoop/logs/hadoop-ec2-user-datanode-data02.localdomain.out data03-internal: starting datanode, logging to /home/ec2-user/hadoop/logs/hadoop-ec2-user-datanode-data03.localdomain.out data01-internal: starting datanode, logging to /home/ec2-user/hadoop/logs/hadoop-ec2-user-datanode-data01.localdomain.out namenode-internal: starting secondarynamenode, logging to /home/ec2-user/hadoop/logs/hadoop-ec2-user-secondarynamenode-namenode.localdomain.out snamenode-internal: secondarynamenode running as process 2733. Stop it first. jobtracker running as process 3042. Stop it first. data03-internal: tasktracker running as process 2800. Stop it first. data02-internal: tasktracker running as process 2826. Stop it first. data01-internal: tasktracker running as process 2820. Stop it first.
# namenode jps 확인
[ec2-user@namenode conf]$ jps
3689 NameNode
3989 Jps
3042 JobTracker
# snamenode jps 확인
[ec2-user@snamenode ~]$ jps
2733 SecondaryNameNode
3071 Jps
# data01 jps 확인
[ec2-user@data01 ~]$ jps
2820 TaskTracker
3181 DataNode
3304 Jps
# data02 jps 확인
[ec2-user@data02 ~]$ jps
3118 DataNode
3239 Jps
2826 TaskTracker
# data03 jps 확인
[ec2-user@data03 ~]$ jps
3069 DataNode
3190 Jps
2800 TaskTracker
[ec2-user@data03 ~]$
# hdfs & mapred 종료
[ec2-user@namenode conf]$ stop-all.sh
stopping jobtracker
data02-internal: stopping tasktracker
data03-internal: stopping tasktracker
data01-internal: stopping tasktracker
stopping namenode
data03-internal: stopping datanode
data02-internal: stopping datanode
data01-internal: stopping datanode
namenode-internal: no secondarynamenode to stop
snamenode-internal: stopping secondarynamenode
[ec2-user@namenode conf]$
6. Hadoop 설치 확인
[ec2-user@namenode conf]$ hadoop dfsadmin -report
Safe mode is ON
Configured Capacity: 24956350464 (23.24 GB)
Present Capacity: 19177766912 (17.86 GB)
DFS Remaining: 19177652224 (17.86 GB)
DFS Used: 114688 (112 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
-------------------------------------------------
Datanodes available: 3 (3 total, 0 dead)
Name: 172.31.28.203:50010
Decommission Status : Normal
Configured Capacity: 8318783488 (7.75 GB)
DFS Used: 36864 (36 KB)
Non DFS Used: 1919713280 (1.79 GB)
DFS Remaining: 6399033344(5.96 GB)
DFS Used%: 0%
DFS Remaining%: 76.92%
Last contact: Tue Apr 23 11:02:19 UTC 2019
Name: 172.31.30.98:50010
Decommission Status : Normal
Configured Capacity: 8318783488 (7.75 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 1920548864 (1.79 GB)
DFS Remaining: 6398193664(5.96 GB)
DFS Used%: 0%
DFS Remaining%: 76.91%
Last contact: Tue Apr 23 11:02:19 UTC 2019
Name: 172.31.17.175:50010
Decommission Status : Normal
Configured Capacity: 8318783488 (7.75 GB)
DFS Used: 36864 (36 KB)
Non DFS Used: 1938321408 (1.81 GB)
DFS Remaining: 6380425216(5.94 GB)
DFS Used%: 0%
DFS Remaining%: 76.7%
Last contact: Tue Apr 23 11:02:19 UTC 2019
[ec2-user@namenode conf]$
확인 2
- 크롬 - http://namenode:50070 접속
HDFS 는 namenode 의 50070 포트에서 모니터링할 수 있다.
- MapReduce namenode의 50030 포트에서 모니터링할 수 있다.
References
개발자님들 덕분에 많이 배울 수 있었습니다. 감사의 말씀 드립니다.