mast01~03, work01~03의 6대의 서버가 있고, mast01,mast02가 ntp 메인입니다.
1. ntp 설치
action server: all
User: root
pwd: -
yum install -y ntp
2. ntp 설정파일 수정 (* 각 서버마다 콘피그값 다름)
action server: all
User: root
pwd: -
# mast01 서버
vi /etc/ntp.conf
# 주석 해제 및 앞단 ip 해당 서버의 ip의 D클래스는 0으로 수정
# 예를 들어 mast01서버가 192.168.56.100이라면 아래와 같이 수정
restrict 192.168.56.0 mask 255.255.255.0 nomodify notrap
# 4행 주석 처리
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 아래행추가
server 127.127.1.0
# mast02 서버
vi /etc/ntp.conf
# 주석 해제 및 앞단 ip 해당 서버의 ip의 D클래스는 0으로 수정
# 예를 들어 mast02서버가 192.168.56.101이라면 아래와 같이 수정
restrict 192.168.56.0 mask 255.255.255.0 nomodify notrap
# 4행 주석 처리
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 아래행추가
server mast01
server 127.127.1.0
server 127.127.1.0
# mast03, work01~03서버
vi /etc/ntp.conf
# 4행 주석 처리
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server mast01
server mast02
# mast01서버에서 파일 다운로드, 설정 파일 수정 후 다른 서버들에게 배포할 예정
# 계정 전환 - root
exit
# 폴더 이동
cd /opt/apps/
# 하둡 파일 다운로드
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.5/hadoop-3.3.5.tar.gz
# 압축해제
tar xvfz /opt/apps/hadoop-3.3.5.tar.gz
# 폴더 이동
cd /opt/apps/hadoop-3.3.5/etc/hadoop
4. 하둡 config 설정 1
action server: mast01
user: root
pwd: /opt/apps/hadoop-3.3.5/etc/hadoop
cmd:
# 데이터노드를 지정합니다.
vi workers
work01
work02
work03
# 하둡 실행 설정을 작성합니다.
vi hadoop-env.sh
.....
.....
# java 경로를 지정해줍니다.
export JAVA_HOME=/opt/apps/jdk8/
# ssh 포트가 22가 아니라면 해당 행에 포트를 지정해줍니다.
export HADOOP_SSH_OPTS="-p 22002"
.....
.....
# pid파일이 생성될 위치를 지정해줍니다.
export HADOOP_PID_DIR=/data/hadoop/pids
5. 하둡 config 설정 2
action server: mast01
user: root
pwd: /opt/apps/hadoop-3.3.5/etc/hadoop
cmd:
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<!-- hadoop nameservice 지정 -->
<value>hdfs://NNHA</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<!-- zookeeper cluster 지정 -->
<value>mast01:2181,mast02:2181,mast03:2181</value>
</property>
</configuration>
vi hdfs-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
--><!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.client.failover.proxy.provider.NNHA</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!-- namenode 관련 데이터가 저장될 경로 -->
<value>/data/hadoop/dfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<!-- datanode 관련 데이터가 저장될 경로 -->
<value>/data/hadoop/dfs/datanode</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<!-- journalnode 관련 데이터가 저장될 경로 -->
<value>/data/hadoop/dfs/journalnode</value>
</property>
<property>
<name>dfs.nameservices</name>
<!-- hadoop nameservice 지정 -->
<value>NNHA</value>
</property>
<property>
<name>dfs.ha.namenodes.NNHA</name>
<!-- 각 네임노드의 별칭 지정 -->
<value>name1,name2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.NNHA.name1</name>
<value>mast01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.NNHA.name2</name>
<value>mast02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.NNHA.name1</name>
<value>mast01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.NNHA.name2</name>
<value>mast02:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://mast01:8485;mast02:8485;mast03:8485/NNHA</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence(hadoop:22002)</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
vi mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2560</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx2048m</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2560</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2048m</value>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>1024</value>
</property>
</configuration>
vi yarn-site.xml
<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- Site specific YARN configuration properties -->
<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.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/rm-local-dir</value>
</property>
<property>
<name>yarn.resourcemanager.fs.state-store.uri</name>
<value>/data/hadoop/yarn/system/rmstore</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/opt/apps/hadoop-3.3.5/etc/hadoop,
/opt/apps/hadoop-3.3.5/share/hadoop/common/*,
/opt/apps/hadoop-3.3.5/share/hadoop/common/lib/*,
/opt/apps/hadoop-3.3.5/share/hadoop/hdfs/*,
/opt/apps/hadoop-3.3.5/share/hadoop/hdfs/lib/*,
/opt/apps/hadoop-3.3.5/share/hadoop/mapreduce/*,
/opt/apps/hadoop-3.3.5/share/hadoop/mapreduce/lib/*,
/opt/apps/hadoop-3.3.5/share/hadoop/yarn/*,
/opt/apps/hadoop-3.3.5/share/hadoop/yarn/lib/*
</value>
</property>
<!-- RM HA-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>mast01:2181,mast02:2181,mast03:2181</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- RM1 configs -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>mast02</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>mast02:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>mast02:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
<value>mast02:8090</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>mast02:38088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>mast02:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>mast02:8033</value>
</property>
<!-- RM2 configs -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>mast03</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>mast03:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>mast03:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
<value>mast03:8090</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>mast03:38088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>mast03:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>mast03:8033</value>
</property>
<!-- 튜닝 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>6</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>51200</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>3</value>
</property>
<property>
<name>yarn.scheduler.increment-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>10240</value>
</property>
<property>
<name>yarn.scheduler.increment-allocation-mb</name>
<value>1024</value>
</property>
</configuration>
cd /opt/apps/
vi /etc/profile.d/hadoop.sh
export HADOOP_HOME=/opt/apps/hadoop-3.3.5
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile.d/hadoop.sh
su - hadoop
cd /opt/apps/hadoop-3.3.5
10. hadoop 실행
action server: mast01, mast02, mast03
user: hadoop
pwd: /opt/apps/hadoop-3.3.5
cmd:
# mast01 서버 실행 (최초 1회)
./bin/hdfs zkfc -formatZK
# mast01, mast02, mast03 서버 실행
./bin/hdfs --daemon start journalnode
# mast01 서버 실행 (최초 1회, 지정한 nameservice 입력 )
./bin/hdfs namenode -format NNHA
# mast01 서버 실행
./bin/hdfs --daemon start namenode
./bin/hdfs --daemon start zkfc
./bin/hdfs --workers --daemon start datanode
# mast02 서버 실행
./bin/hdfs namenode -bootstrapStandby (최초 1회)
./bin/hdfs --daemon start namenode
./bin/hdfs --daemon start zkfc
# namenode
mast01:9870, mast02:9870 웹 UI 확인
# resource manager
mast02:38088, mast03:38088 웹 UI 확인
# journalnode (mast01, mast02, mast03)
netstat -nltp | grep 8485
혹은 mast01:8480, mast02:8480, mast03:8480 웹 UI 확인
# zkfc (mast01, mast02)
jps
DFSZKFailoverController
# JobHistoryServer
mast02:19888 웹 UI 확인
14. namenode, resource manager HA 상태 확인
action server: mast02, mast02
user: hadoop
pwd: /opt/apps/hadoop-3.3.5
cmd:
------ namenode failover check ------
# 앞서 hdfs-site.xml 에서 설정한 네임노드 별칭
# mast01 서버에서 진행
./bin/hdfs haadmin -getServiceState name1
./bin/hdfs haadmin -getServiceState name2
# 액티브인 서버에서 실행
./bin/hdfs --daemon stop namenode
# 추후 스탠바이 네임노드가 액티브가 되었는지 확인
./bin/hdfs haadmin -getServiceState name1
./bin/hdfs haadmin -getServiceState name2
# 앞서 종료한 네임노드 기동
./bin/hdfs --daemon start namenode
------ resource manager HA check ------
mast02:38088, mast03:38088 웹 UI 접속 시
하나의 url로 리다이렉트 되는데, 스탠바이 리소스매니저의 웹으로 접근하게되면
자동으로 액티브 리소스매니저의 웹으로
redirect됨.
# 명령어확인
# mast02서버에서 실행
./bin/yarn rmadmin -getServiceState rm1
./bin/yarn rmadmin -getServiceState rm2
윈도우 탐색기 – cmd – ipconfig 입력 – VirtualBox Host-Only Network 주소 확인
(아래 Virtual Machine 내 호스트 네트워크 관리자 설정에 필요)
가상 머신(Virtual Box) 실행 및 호스트 네트워크 관리자 설정
IPv4 주소에 위 명령 프롬포트 창의VirtualBox Host-Only Network 주소를 입력
다음과 같이 설정
가상 서버 생성
(이름 설정에 ‘cent’를 입력하면 자동으로 리눅스 계열로 설정된다, 후 원하는 서버 이름 입력)
메모리 크기 설정
아래와 같이 체크 확인 후 다음
아래와 같이 체크 확인 후 다음
아래와 같이 체크 확인 후 다음
아래와 같이 체크 확인 후 다음
아래 순서에 따라 클릭
(서버 이름(nn01)옆 네모 박스는 회사 업무 중 복구를 위한 스냅샷, 본 가이드와는 무관하여 가림 처리, 초기 설치 시 없어도 그대로 진행)
다운로드 받았던 디스크 이미지 파일 등록
후 네트워크 클릭 - 어댑터1에 디폴트로 NAT 어댑터가 등록되어있음을 확인
어댑터 2를 새로 추가 - 아래와 같이 설정
여기서 잠깐!!
Virtual box 네트워크 어댑터 설정 방법:
가상 서버를 생성하였을 때, 기본적으로 어댑터 1에는 NAT 어댑터가 등록된다.
NAT 어댑터는 게스트 OS(새로 생성한 가상서버)가 호스트OS(로컬PC의 운영체제 여기서는 WINDOWS 10)의 IP를 통해 외부 인터넷에 연결해주는 가장 간단한 방법이다. 외부 인터넷과의 연결을 통해 wget등의 명령어로 필요한 모듈들을 설치한다. 하지만 게스트OS간의 통신이 불가하다.
호스트 전용 어댑터는 외부 인터넷과는 단절되어 있지만 구축한 게스트OS간의 통신이 가능하다.
이 두 어댑터를 사용하여 서로의 단점을 보완, 게스트->외부 인터넷, 게스트 -> 게스트 통신이 가능하다.
vi /etc/sysconfig/network-scripts/ifcfg-eth0 <- 이더넷이름은 다를 수 있음
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=fecb60c2-87bd-41ae-9cb8-231d730ca53d DEVICE=eth0 ONBOOT=yes IPADDR=192.168.10.101 -> 고정할 IP PREFIX=24 GATEWAY=192.168.10.1 -> 운영환경이 아닌 개인 테스트 용이라면 고정할 IP의 마지막 D클래스를 1로 DNS1=8.8.8.8 -> 구글 DNS 서버 DNS2=8.8.4.4 -> 구글 DNS 서버 IPV6_PRIVACY=no