ZooKeeper 기반 Hadoop 고 사용 가능 한 클 러 스 터 를 구축 하 는 튜 토리 얼 도해
Hadoop 고가 용(High Availability)은 HDFS 고가 용 과 YARN 고가 용 으로 나 뉘 는데 이들 의 실현 은 기본적으로 유사 하지만 HDFS NameNode 는 데이터 저장 과 그 일치 성에 대한 요구 가 YARN Resource Manger 보다 훨씬 높 기 때문에 그 실현 도 더욱 복잡 하기 때문에 다음 과 같이 설명 한다.
1.1 고가 용 전체 구조
HDFS 고가 용 구 조 는 다음 과 같다.
사진 참조:https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/
HDFS 고가 용 구 조 는 주로 다음 과 같은 구성 요소 로 구성 된다.
Active NameNode 와 Standby NameNode:두 대의 NameNode 가 서로 준비 되 고 한 대 는 Active 상태 에 있 으 며 주 NameNode 이 고 다른 한 대 는 Standby 상태 에 있 으 며 NameNode 에 대비 하여 주 NameNode 만 대외 적 으로 읽 기와 쓰기 서 비 스 를 제공 할 수 있 습 니 다.
현재 Hadoop 은 Quorum Journal Manager(QJM)나 Network File System(NFS)을 공유 하 는 저장 시스템 으로 사용 할 수 있 습 니 다.QJM 클 러 스 터 를 예 로 들 어 설명 합 니 다.Active NameNode 는 먼저 EditLog 를 JournalNode 클 러 스 터 에 제출 한 다음 Standby NameNode 에서 JournalNode 클 러 스 터 에서 정시 에 EditLog 를 동기 화 합 니 다.Active NameNode 가 다운 되면...Standby NameNode 는 메타 데이터 가 완전히 동기 화 되 었 는 지 확인 한 후에 대외 적 으로 서 비 스 를 제공 할 수 있다.
설명 이 필요 한 것 은 JournalNode 클 러 스 터 에 EditLog 를 기록 하 는 것 은'절반 이상 쓰 면 성공 합 니 다'라 는 전략 을 따 르 기 때문에 적어도 3 개의 JournalNode 노드 가 있어 야 합 니 다.물론 노드 수 를 계속 늘 릴 수도 있 지만 노드 총수 가 홀수 라 는 것 을 보증 해 야 합 니 다.아울러 2N+1 대의 JournalNode 가 있다 면 과반 작성 원칙 에 따라 최대 N 대의 JournalNode 노드 가 끊 어 지 는 것 을 용인 할 수 있다.
1.3 NameNode 메 인 스 위칭
NameNode 가 주 전환 을 실현 하 는 프로 세 스 아래 그림:
HealthMonitor 초기 화가 완료 되면 NameNode 에 대응 하 는 HAServiceProtocol RPC 인 터 페 이 스 를 주기 적 으로 호출 하 는 내부 스 레 드 를 시작 하여 NameNode 의 건강 상 태 를 검사 합 니 다.
헬 스 모니터 는 네 임 노드 의 건강 상태 변화 가 감지 되면 ZKFailoverController 등록 에 해당 하 는 방법 으로 되 돌려 처리한다.
ZKFailover Controller 가 주 된 전환 이 필요 하 다 고 판단 하면 먼저 ActiveStandby Elector 를 사용 하여 자동 주 된 선 거 를 실시 합 니 다.
ActiveStandby Elector 와 Zookeeper 가 상호작용 을 하여 자동 예비 선 거 를 완성 합 니 다.
ActiveStandby Elector 는 주 선거 가 완료 되면 ZKFailover Controller 의 해당 방법 으로 현재 NameNode 를 주 NameNode 또는 예비 NameNode 로 알 립 니 다.
ZKFailoverController 는 NameNode 에 대응 하 는 HAServiceProtocol RPC 인 터 페 이 스 를 호출 하 는 방법 으로 NameNode 를 Active 상태 나 Standby 상태 로 변환 합 니 다.
1.4 YARN 고가 용
YARN ResourceManager 의 높 은 사용 가능성 은 HDFS NameNode 의 높 은 사용 가능성 과 유사 하지만,ResourceManager 는 NameNode 와 달리 유지 해 야 할 메타 데이터 정보 가 많 지 않 기 때문에 상태 정 보 는 Zookeeper 에 직접 쓰 고 Zookeeper 에 의존 하여 예비 선 거 를 진행 할 수 있 습 니 다.
2.군집 계획
높 은 사용 가능 한 디자인 목표 에 따라 최소한 두 개의 NameNode(주 1 비)와 두 개의 ResourceManager(주 1 비)가 있어 야 하 며,동시에'과반수 기록 하면 성공'의 원칙 을 만족 시 키 기 위해 서 는 최소 3 개의 JournalNode 노드 가 필요 합 니 다.여기 서 세 대의 호스트 를 사용 하여 구축 합 니 다.클 러 스 터 계획 은 다음 과 같 습 니 다.
3.선행 조건 은 모든 서버 에 JDK 가 설치 되 어 있 고 설치 절 차 는 다음 과 같다.Linux 에서 JDK 설치ZooKeeper 클 러 스 터 를 구축 하고 구축 절 차 는 참조 할 수 있 습 니 다.Zookeeper 단기 환경 과 클 러 스 터 환경 구축모든 서버 간 에 SSH 비밀 로그 인 을 설정 합 니 다.
4.클 러 스 터 설정
4.1 다운로드 및 압축 해제
Hadoop 을 다운로드 하 다.여기 서 제 가 다운로드 한 것 은 CDH 버 전 Hadoop 입 니 다.다운로드 주 소 는 다음 과 같 습 니 다.http://archive.cloudera.com/cdh5/cdh/5/
# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
4.2 환경 변수 설정파일 편집
profile
:# vim /etc/profile
다음 설정 추가:export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2export PATH=${HADOOP_HOME}/bin:$PATH
source
명령 을 실행 하면 설정 이 즉시 적 용 됩 니 다.# source /etc/profile
4.3 설정 수정${HADOOP_HOME}/etc/hadoop
디 렉 터 리 에 들 어가 프로필 을 수정 합 니 다.각 프로필 의 내용 은 다음 과 같 습 니 다.1. hadoop-env.sh
# JDK export JAVA_HOME=/usr/java/jdk1.8.0_201/
2. core-site.xml
<configuration>
<property>
<!-- namenode hdfs -->
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:8020</value>
</property>
<property>
<!-- hadoop -->
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<!-- ZooKeeper -->
<name>ha.zookeeper.quorum</name>
<value>hadoop001:2181,hadoop002:2181,hadoop002:2181</value>
</property>
<property>
<!-- ZKFC ZooKeeper -->
<name>ha.zookeeper.session-timeout.ms</name>
<value>10000</value>
</property>
</configuration>
3. hdfs-site.xml
<configuration>
<property>
<!-- HDFS -->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!-- namenode ( ) , , -->
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/namenode/data</value>
</property>
<property>
<!-- datanode ( ) -->
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/datanode/data</value>
</property>
<property>
<!-- -->
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<!-- NameNode ID -->
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<!-- nn1 RPC -->
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop001:8020</value>
</property>
<property>
<!-- nn2 RPC -->
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop002:8020</value>
</property>
<property>
<!-- nn1 http -->
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop001:50070</value>
</property>
<property>
<!-- nn2 http -->
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop002:50070</value>
</property>
<property>
<!-- NameNode JournalNode -->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</value>
</property>
<property>
<!-- Journal Edit Files -->
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journalnode/data</value>
</property>
<property>
<!-- , NameNode -->
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<!-- sshfence ssh -->
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<!-- SSH -->
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<!-- , Active NameNode -->
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<!-- -->
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
4. yarn-site.xml
<configuration>
<property>
<!-- NodeManager 。 mapreduce_shuffle Yarn MapReduce 。-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!-- ( ) -->
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<!-- ( ) -->
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property>
<!-- RM HA -->
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<!-- RM -->
<name>yarn.resourcemanager.cluster-id</name>
<value>my-yarn-cluster</value>
</property>
<property>
<!-- RM ID -->
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<!-- RM1 -->
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop002</value>
</property>
<property>
<!-- RM2 -->
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop003</value>
</property>
<property>
<!-- RM1 Web -->
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop002:8088</value>
</property>
<property>
<!-- RM2 Web -->
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop003:8088</value>
</property>
<property>
<!-- ZooKeeper -->
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value>
</property>
<property>
<!-- -->
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<!-- -->
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
5. mapred-site.xml
<configuration>
<property>
<!-- mapreduce yarn -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5. slaves모든 종속 노드 의 호스트 이름 이나 IP 주 소 를 줄 마다 설정 합 니 다.모든 종속 노드 의
DataNode
서비스 와NodeManager
서비스 가 시 작 됩 니 다.hadoop001
hadoop002
hadoop003
4.4 배포 프로그램
Hadoop 패 키 지 를 다른 두 서버 에 배포 하고 배포 후 이 두 서버 에 도 Hadoop 의 환경 변 수 를 설정 하 는 것 을 권장 합 니 다.
# hadoop002
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop002:/usr/app/
# hadoop003
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
5.1 ZooKeeper 시작각각 세 대의 서버 에 가서 ZooKeeper 서 비 스 를 시작 합 니 다.
zkServer.sh start
5.2 저널 노드 시작각각 세 대의 서버
${HADOOP_HOME}/sbin
디 렉 터 리 에서 시작journalnode
프로 세 스:hadoop-daemon.sh start journalnode
5.3 NameNode 초기 화hadop001
에서 초기 화 명령 을 실행 합 니 다.NameNode
초기 화 명령 을 실행 한 후hdfs namenode -format
메타 데이터 디 렉 터 리 의 내용 을 다른 포맷 되 지 않 은NameNode
에 복사 해 야 합 니 다.메타 데이터 저장 디 렉 터 리 는 우리 가NameNode
속성 으로 지정 한 디 렉 터 리 입 니 다.여기 서 우 리 는 그것 을hdfs-site.xml
에 복사 해 야 한다. scp -r /home/hadoop/namenode/data hadoop002:/home/hadoop/namenode/
5.4 HA 상태 초기 화ZooKeeper 의 HA 상 태 를 초기 화 하려 면 다음 명령 을 사용 하 십시오.
hdfs zkfc -formatZK
5.5 HDFS 시작dfs.namenode.name.dir
의hadoop002
디 렉 터 리 에 들 어가 HDFS 를 시작 합 니 다.이때NameNode
와hadoop001
의${HADOOP_HOME}/sbin
서비스 와 세 대의 서버hadoop001
서비스 가 모두 시 작 됩 니 다.start-dfs.sh
5.6 YARN 시작hadoop002
의NameNode
디 렉 터 리 에 들 어가 YARN 을 시작 합 니 다.이때DataNode
의hadoop002
서비스 와 세 대의 서버${HADOOP_HOME}/sbin
서비스 가 모두 시 작 됩 니 다.start-yarn.sh
주의해 야 할 것 은 이때hadoop002
의ResourceManager
서 비 스 는 보통 시작 되 지 않 고 수 동 으로 시작 해 야 한 다 는 것 이다.yarn-daemon.sh start resourcemanager
6.군집 보기6.1 프로 세 스 보기
성공 적 으로 시작 하면 모든 서버 의 프로 세 스 는 다음 과 같 아야 합 니 다.
[root@hadoop001 sbin]# jps
4512 DFSZKFailoverController
3714 JournalNode
4114 NameNode
3668 QuorumPeerMain
5012 DataNode
4639 NodeManager
[root@hadoop002 sbin]# jps
4499 ResourceManager
4595 NodeManager
3465 QuorumPeerMain
3705 NameNode
3915 DFSZKFailoverController
5211 DataNode
3533 JournalNode
[root@hadoop003 sbin]# jps
3491 JournalNode
3942 NodeManager
4102 ResourceManager
4201 DataNode
3435 QuorumPeerMain
6.2 웹 UI 보기HDFS 와 YARN 의 포트 번 호 는 각각
NodeManager
과hadoop003
이 고 화면 은 다음 과 같 아야 한다.이때 hadop 001 의
ResourceManager
는 사용 가능 한 상태 입 니 다:그리고 hadop 002 의
50070
는 예비 상태 에 있 습 니 다.hadop 002 의
8080
사용 가능 한 상태:hadop 003 의
NameNode
는 예비 상태 입 니 다.동시에 인터페이스 에 도
NameNode
관련 정보 가 있다.7.군집 의 2 차 시동
위의 클 러 스 터 가 처음 시작 되 는 것 은 초기 화 작업 과 관련 되 기 때문에 과정 이 약간 번거롭다.그러나 클 러 스 터 가 구축 되면 다시 사용 하 는 것 이 편리 합 니 다.단 계 는 다음 과 같 습 니 다.(우선 ZooKeeper 클 러 스 터 가 시작 되 었 는 지 확인 하 는 것 이 좋 습 니 다)
ResourceManager
에서 HDFS 를 시작 합 니 다.이 때 는 NameNode,DataNode,JournalNode 를 포함 한 모든 HDFS 고가 용 서 비 스 를 시작 합 니 다.start-dfs.sh
ResourceManager
에서 YARN 시작 하기:start-yarn.sh
이때Journal Manager
의hadoop001
서 비 스 는 보통 시작 되 지 않 았 기 때문에 수 동 으로 시작 해 야 합 니 다.yarn-daemon.sh start resourcemanager
참고 자료상기 구축 절 차 는 주로 공식 문 서 를 참고 합 니 다.
HDFS High Availability Using the Quorum Journal Manager ResourceManager High Availability
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 ZooKeeper 를 바탕 으로 Hadoop 고가 용 군집 을 구축 하 는 튜 토리 얼 도해 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
zookeeper 오류 보고: NodeException: KeeperErrorCodezookeeper 오류 보고: NodeException: KeeperErrorCode = Node for/consumes/xxx/xxx Node does not exist zookeeper 서버에 로그인하여 node...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.