HDFS 고 가용성을 사용하여 Hadoop 클러스터를 설정하는 방법



이 블로그는 HDFS 고 가용성 아키텍처에 대한 개요와 간단한 단계로 HDFS 고 가용성 클러스터를 설정 및 구성하는 방법을 제공합니다.

HDFS 2.x 고 가용성 클러스터 아키텍처

이 블로그에서는 HDFS 2.x 고 가용성 클러스터 아키텍처와 HDFS 고 가용성 클러스터를 설정하는 절차에 대해 설명합니다.이것은의 중요한 부분입니다 . 이 블로그에서 다루는 주제의 순서는 다음과 같습니다.

  • HDFS HA ​​아키텍처
    • 소개
    • NameNode 가용성
    • HA 아키텍처
    • HA (JournalNode 및 공유 스토리지) 구현
  • Hadoop 클러스터에서 HA (Quorum Journal Nodes)를 설정하는 방법은 무엇입니까?

소개:

고 가용성 클러스터의 개념은 Hadoop 2에서 도입되었습니다..x에서 Hadoop 1.x의 단일 장애 지점 문제를 해결합니다. 내 이전 블로그에서 알다시피 NameNode가 마스터 데몬 역할을하고 DataNode라는 다른 슬레이브 노드를 관리하는 마스터 / 슬레이브 토폴로지를 따릅니다. 이 단일 마스터 데몬 또는 네임 노드는 병목 현상이됩니다. Secondary NameNode의 도입은 데이터 손실을 막고 NameNode의 부담을 덜어 주었지만 NameNode의 가용성 문제를 해결하지는 못했습니다.





NameNode 가용성 :

HDFS 클러스터의 표준 구성을 고려하면 NameNode는 단일 실패 지점 . NameNode를 사용할 수 없게되는 순간 누군가가 NameNode를 다시 시작하거나 새 클러스터를 가져올 때까지 전체 클러스터를 사용할 수 없게되기 때문에 발생합니다.

NameNode를 사용할 수없는 이유는 다음과 같습니다.



  • 유지 보수 작업과 같은 계획된 이벤트에는 소프트웨어 또는 하드웨어 업그레이드가 포함됩니다.
  • 또한 몇 가지 이유로 인해 NameNode가 충돌하는 계획되지 않은 이벤트 때문일 수도 있습니다.

위의 두 경우 모두 문제가되는 HDFS 클러스터를 사용할 수없는 다운 타임이 발생합니다.

HDFS HA ​​아키텍처 :

HDFS HA ​​아키텍처가 NameNode 가용성의이 중요한 문제를 어떻게 해결했는지 이해하겠습니다.

HA 아키텍처는 활성 / 수동 구성에서 두 개의 NameNode를 가질 수 있도록함으로써 NameNode 가용성 문제를 해결했습니다. 따라서 고 가용성 클러스터에서 동시에 두 개의 실행중인 NameNode가 있습니다.



  • 활성 NameNode
  • 대기 / 수동 NameNode.

HDFS HA ​​아키텍처-고 가용성 클러스터-Edureka

하나의 NameNode가 다운되면 다른 NameNode가 책임을 맡을 수 있으므로 클러스터 다운 시간을 줄일 수 있습니다. 대기 NameNode는 Hadoop 클러스터에 장애 조치 기능을 통합하는 백업 NameNode (보조 NameNode와 달리)의 목적을 제공합니다. 따라서 StandbyNode를 사용하면 NameNode가 충돌 할 때마다 (계획되지 않은 이벤트) 자동 장애 조치를 수행하거나 유지 관리 기간 동안 정상적인 (수동으로 시작된) 장애 조치를 수행 할 수 있습니다.

HDFS 고 가용성 클러스터에서 일관성을 유지하는 데는 두 가지 문제가 있습니다.

  • 활성 및 대기 NameNode는 항상 서로 동기화되어야합니다. 즉, 동일한 메타 데이터를 가져야합니다. 이를 통해 Hadoop 클러스터를 충돌이 발생한 동일한 네임 스페이스 상태로 복원 할 수 있으므로 빠른 장애 조치를 제공 할 수 있습니다.
  • 두 개의 활성 NameNode로 인해 데이터가 손상되므로 한 번에 하나의 활성 NameNode 만 있어야합니다. 이러한 종류의 시나리오를 클러스터가 더 작은 클러스터로 분할되는 분할 브레인 시나리오라고하며 각 클러스터는 해당 클러스터가 유일한 활성 클러스터라고 믿습니다. 이러한 시나리오를 피하기 위해 펜싱이 수행됩니다. 펜싱은 특정 시간에 하나의 NameNode 만 활성 상태로 유지되도록하는 프로세스입니다.

HA 아키텍처 구현 :

이제 HDFS HA ​​아키텍처에서 두 개의 NameNode가 동시에 실행된다는 것을 알고 있습니다. 따라서 다음 두 가지 방법으로 Active 및 Standby NameNode 구성을 구현할 수 있습니다.

  1. 쿼럼 저널 노드 사용
  2. NFS를 사용하는 공유 스토리지

한 번에 하나씩 수행하는 다음 두 가지 구현 방법을 이해하겠습니다.

1. 쿼럼 저널 노드 사용 :

  • 대기 NameNode와 활성 NameNode는 별도의 노드 또는 데몬 그룹을 통해 서로 동기화 상태를 유지합니다. 저널 노드 .JournalNodes는 노드가 서로 연결되어 링을 형성하는 링 토폴로지를 따릅니다.JournalNode는 들어오는 요청을 처리하고 정보를 링의 다른 노드에 복사합니다..이것은 JournalNode 오류의 경우 내결함성을 제공합니다.
  • 활성 NameNode는 JournalNodes에있는 EditLogs (메타 데이터 정보)를 업데이트합니다.
  • StandbyNode는 JournalNode의 EditLogs에 대한 변경 사항을 읽고이를 자체 네임 스페이스에 일정한 방식으로 적용합니다.
  • 장애 조치 중에 StandbyNode는 새로운 Active NameNode가되기 전에 JournalNode에서 메타 데이터 정보를 업데이트했는지 확인합니다. 이렇게하면 현재 네임 스페이스 상태가 장애 조치 이전의 상태와 동기화됩니다.
  • 두 NameNode의 IP 주소는 모든 DataNode에서 사용할 수 있으며 하트 비트와 블록 위치 정보를 NameNode에 모두 보냅니다. 이는 StandbyNode가 클러스터의 블록 위치에 대한 업데이트 된 정보를 가지고 있기 때문에 빠른 장애 조치 (다운 타임 감소)를 제공합니다.

NameNode의 펜싱 :

이제 앞에서 설명한 것처럼 한 번에 하나의 Active NameNode 만 있는지 확인하는 것이 매우 중요합니다. 따라서 펜싱은 클러스터에서 바로이 속성을 보장하는 프로세스입니다.

  • JournalNodes는 한 번에 하나의 NameNode 만 작성자가되도록 허용하여이 펜싱을 수행합니다.
  • Standby NameNode는 JournalNode에 쓰기 책임을 맡고 다른 NameNode가 활성 상태를 유지하는 것을 금지합니다.
  • 마지막으로 새로운 Active NameNode는 활동을 안전하게 수행 할 수 있습니다.

2. 공유 스토리지 사용 :

  • StandbyNode와 활성 NameNode는 a를 사용하여 서로 동기화를 유지합니다. 공유 저장 장치 .활성 NameNode는 네임 스페이스에서 수행 된 모든 수정 기록을이 공유 스토리지에있는 EditLog에 기록합니다.StandbyNode는이 공유 저장소의 EditLog에 대한 변경 사항을 읽고이를 자체 네임 스페이스에 적용합니다.
  • 이제 장애 조치의 경우 StandbyNode는 처음에 공유 스토리지의 EditLog를 사용하여 메타 데이터 정보를 업데이트합니다. 그런 다음 Active NameNode의 책임이 있습니다. 이렇게하면 현재 네임 스페이스 상태가 장애 조치 이전의 상태와 동기화됩니다.
  • 관리자는 분할 브레인 시나리오를 피하기 위해 적어도 하나의 차단 방법을 구성해야합니다.
  • 시스템은 다양한 펜싱 메커니즘을 사용할 수 있습니다. 여기에는 NameNode의 프로세스를 종료하고 공유 스토리지 디렉토리에 대한 액세스를 취소하는 것이 포함될 수 있습니다.
  • 최후의 수단으로 STONITH로 알려진 기술을 사용하여 이전에 활성화 된 NameNode를 차단하거나 '머리에있는 다른 노드를 쏘십시오'. STONITH는 특수 배전 장치를 사용하여 NameNode 시스템의 전원을 강제로 끕니다.

자동 장애 조치 :

페일 오버는 장애 또는 장애를 감지 할 때 시스템이 자동으로 제어를 보조 시스템으로 이전하는 절차입니다. 장애 조치에는 두 가지 유형이 있습니다.

정상적인 장애 조치 : 이 경우 일상적인 유지 관리를 위해 수동으로 장애 조치를 시작합니다.

자동 장애 조치 : 이 경우 장애 조치는 NameNode 장애 (예상되지 않은 이벤트)의 경우 자동으로 시작됩니다.

Apache Zookeeper는 HDFS 고 가용성 클러스터에서 자동 장애 조치 기능을 제공하는 서비스입니다. 소량의 조정 데이터를 유지하고 클라이언트에게 해당 데이터의 변경 사항을 알리며 클라이언트의 오류를 모니터링합니다. Zookeeper는 네임 노드와 세션을 유지합니다. 실패 할 경우 세션이 만료되고 Zookeeper는 다른 NameNode에게 장애 조치 프로세스를 시작하도록 알립니다. NameNode가 실패하는 경우 다른 수동 NameNode가 Zookeeper에서 잠금을 설정하여 다음 Active NameNode가 되길 원합니다.

ZookeerFailoverController (ZKFC)는 NameNode 상태를 모니터링하고 관리하는 Zookeeper 클라이언트입니다. 각 NameNode는 ZKFC도 실행합니다. ZKFC는 주기적으로 네임 노드의 상태를 모니터링합니다.

이제 Hadoop 클러스터에서 고 가용성이 무엇인지 이해 했으므로 이제 설정할 차례입니다. Hadoop 클러스터에서 고 가용성을 설정하려면 모든 노드에서 Zookeeper를 사용해야합니다.

Active NameNode의 데몬은 다음과 같습니다.

  • 사육사
  • Zookeeper Fail Over 컨트롤러
  • JournalNode
  • 네임 노드

Standby NameNode의 데몬은 다음과 같습니다.

  • 사육사
  • Zookeeper Fail Over 컨트롤러
  • JournalNode
  • 네임 노드

DataNode의 데몬은 다음과 같습니다.

  • 사육사
  • JournalNode
  • 데이터 노드

HDFS 및 Hadoop을 마스터하려면 Edureka에서 특별히 선별 한 빅 데이터 및 Hadoop 과정을 확인하십시오. 시작하려면 아래 버튼을 클릭하세요.

C C #과 C ++의 차이점

Hadoop에서 고 가용성 클러스터 설정 및 구성 :

먼저 각 노드의 Java 및 호스트 이름을 설정해야합니다.

가상 기기 IP 주소 호스트 이름
활성 NameNode192.168.1.81nn1.cluster.com 또는 nn1
대기 NameNode192.168.1.58nn2.cluster.com 또는 nn2
데이터 노드192.168.1.82dn1.cluster.com 또는 dn1

Hadoop 및 Zookeeper 바이너리 tar 파일을 다운로드하고 파일을 추출하여 구성 파일을 편집하십시오.

명령 : wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

사육사 확산 -3.4.6.tar.gz

명령 : tar –xvf zookeeper-3.4.6.tar.gz

Apache Hadoop 사이트에서 안정적인 Hadoop 바이너리 tar를 다운로드합니다.

명령 : wget https://archive.apache.org/dist/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz

Hadoop 타르볼을 추출합니다.

명령 : tar –xvf hadoop-2.6.0.tar.gz

hadoop 바이너리를 확산합니다.

Hadoop, Zookeeper 및 경로를 .bashrc 파일에 추가하십시오.

.bashrc 파일을 엽니 다.

명령 : sudo gedit ~ / .bashrc

아래 경로를 추가하십시오.

export HADOOP_HOME = export HADOOP_MAPRED_HOME = $ HADOOP_HOME export HADOOP_COMMON_HOME = $ HADOOP_HOME export HADOOP_HDFS_HOME = $ HADOOP_HOME export YARN_HOME = $ HADOOP_HOME export HADOOP_CONF_DIR = $ HADOOP = $ HAOP export JAVA_HOME = export / had Zoop_HOME / etc / hadoop export $ 경로 : $ JAVA_HOME / bin : $ HADOOP_HOME / bin : $ HADOOP_HOME / sbin : $ ZOOKEEPER_HOME / bin

.bashrc 파일을 편집하십시오.

모든 노드에서 SSH를 활성화합니다.

모든 노드에서 SSH 키를 생성하십시오.

명령 : ssh-keygen –t rsa (모든 노드에서이 단계)

모든 노드에서 SSH 키를 설정합니다.

키를 저장하기 위해 Enter 파일에 대한 경로를 제공하지 말고 암호를 제공하지 마십시오. Enter 버튼을 누릅니다.

모든 노드에서 ssh 키 프로세스를 생성하십시오.

ssh 키가 생성되면 공개 키와 개인 키를 받게됩니다.

.ssh 키 디렉토리에는 권한 700이 포함되어야하며 .ssh 디렉토리 내의 모든 키에는 권한 600이 포함되어야합니다.

SSH 디렉토리 권한을 변경하십시오.

디렉토리를 .ssh로 변경하고 파일 권한을 600으로 변경하십시오.

공개 및 개인 키 권한을 변경합니다.

이름 노드 ssh 공개 키를 모든 노드에 복사해야합니다.

Active Namenode에서 cat 명령을 사용하여 id_rsa.pub를 복사합니다.

명령 : 고양이 ~ / .ssh / id_rsa.pub >> ~ / .ssh / authorized_keys

Namenode ssh 키를 인증 된 키에 복사합니다.

다음을 사용하여 NameNode 공개 키를 모든 노드에 복사합니다. ssh-copy-id 명령.

명령 : ssh-copy-id –i .ssh / id_rsa.pub edureka@nn2.cluster.com

목적 키를 대기 NameNode에 복사합니다.

NameNode 공개 키를 데이터 노드에 복사합니다.

명령 : ssh-copy-id –i .ssh / id_rsa.pub edureka@dn1.cluster.com

Namenode 공개 키를 데이터 노드에 복사합니다.

모든 노드에서 sshd 서비스를 다시 시작합니다.

명령 : sudo service sshd restart (모든 노드에서 수행)

SSH 서비스를 다시 시작하십시오.

이제 인증없이 네임 노드에서 모든 노드에 로그인 할 수 있습니다.

Active Name 노드에서 core-site.xml 파일을 열고 아래 속성을 추가합니다.

Active namenode에서 core-site.xml 편집

Active Namenode에서 hdfs-site.xml 파일을 엽니 다. 아래 속성을 추가하십시오.

dfs.namenode.name.dir / home / edureka / HA / data / namenode dfs.replication 1 dfs.permissions false dfs.nameservices ha-cluster dfs.ha.namenodes.ha-cluster nn1, nn2 dfs.namenode.rpc-address .ha-cluster.nn1 nn1.cluster.com:9000 dfs.namenode.rpc-address.ha-cluster.nn2 nn2.cluster.com:9000 dfs.namenode.http-address.ha-cluster.nn1 nn1.cluster. com : 50070 dfs.namenode.http-address.ha-cluster.nn2 nn2.cluster.com:50070 dfs.namenode.shared.edits.dir qjournal : //nn1.cluster.com : 8485nn2.cluster.com : 8485dn1. cluster.com:8485/ha-cluster dfs.client.failover.proxy.provider.ha-cluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.automatic-failover.enabled true ha.zookeeper .quorum nn1.cluster.com:2181,nn2.cluster.com:2181,dn1.cluster.com:2181 dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files / home / edureka /.ssh/id_rsa

디렉토리를 zookeeper의 conf 디렉토리로 변경합니다.

명령 : cd zookeeper-3.4.6 / conf

Zookeeper Conf 디렉토리.

conf 디렉토리에 zoo_sample.cfg 파일이 있고 zoo_sample.cfg 파일을 사용하여 zoo.cfg를 만듭니다.

명령 : cp zoo_sample.cfg zoo.cfg

zoo.cfg 파일을 만듭니다.

원하는 위치에 디렉토리를 만들고이 디렉토리를 사용하여 사육사 데이터를 저장합니다.

명령 : mkdir

사육사 데이터를 저장할 디렉터리를 만듭니다.

zoo.cfg 파일을 엽니 다.

명령 : gedit zoo.cfg

위 단계에서 생성 한 디렉토리 경로를 dataDir 속성에 추가하고 zoo.cfg 파일에 나머지 노드에 대한 아래 세부 정보를 추가합니다.

Server.1 = nn1.cluster.com : 2888 : 3888

Server.2 = nn2.cluster.com : 2888 : 3888

Server.3 = dn1.cluster.com : 2888 : 3888

zoo.cfg 파일을 편집하십시오.

이제 scp 명령을 사용하여 Java 및 Hadoop-2.6.0, zookeeper-3.4.6 디렉토리 및 .bashrc 파일을 모든 노드 (대기 이름 노드, 데이터 노드)에 복사하십시오.

명령 : scp –r edureka @ :

Hadoop, Zookeeper 및 .bashrc 파일을 모든 노드에 복사합니다.

마찬가지로 .bashrc 파일과 zookeeper 디렉토리를 모든 노드에 복사하고 각 노드에 따라 환경 변수를 변경하십시오.

데이터 노드에서 HDFS 블록을 저장해야하는 디렉토리를 만듭니다.

데이터 노드에서 dfs.datanode.data.dir 속성을 추가해야합니다.

제 경우에는 데이터 노드 블록을 저장할 디렉토리.

Datanode 디렉토리를 만듭니다.

데이터 노드 디렉토리에 대한 권한을 변경하십시오.

데이터 노드 디렉토리 권한을 변경합니다.

HDFS-site.xml 파일을 열고 dfs.datanode.data.dir 속성에이 Datanode 디렉터리 경로를 추가합니다.

참고 : Active namenode에서 복사 된 모든 속성을 유지하고 namenode에 dfs.datanode.data.dir 하나의 추출 속성을 추가합니다.

dfs.datanode.data.dir / home / edureka / HA / data / datanode

Active namenode에서 zookeeper 구성 파일 (dataDir 속성 경로)을 저장할 디렉토리를 변경합니다.

디렉토리 내에 myid 파일을 만들고 파일에 숫자 1을 추가하고 파일을 저장합니다.

명령 : vi myid

myid 파일을 만듭니다.

대기 이름 노드에서 사육사 구성 파일 (dataDir 속성 경로)을 저장할 디렉터리를 변경합니다.

디렉토리 내에 myid 파일을 만들고 파일에 숫자 2를 추가하고 파일을 저장합니다.

데이터 노드에서 zookeeper 구성 파일 (dataDir 속성 경로)을 저장할 디렉터리를 변경합니다.

디렉토리 내에 myid 파일을 만들고 파일에 숫자 3을 추가하고 파일을 저장합니다.

세 노드 모두에서 Journalnode를 시작합니다.

명령 : hadoop-daemon.sh 시작 journalnode

Journalnode를 시작하십시오.

jps 명령을 입력하면 모든 노드에 JournalNode 데몬이 표시됩니다.

포맷활동적인 목적.

명령 : HDFS 의도 형식

활성 NameNode 형식.

Namenode 데몬과 Active Namedode를 시작합니다.

명령 : hadoop-daemon.sh 시작 목적

Namenode를 시작하십시오.

HDFS 메타 데이터를 활성 이름 노드에서 대기 이름 노드로 복사합니다.

명령 : HDFS 의도 -bootstrapStandby

HDFS 메타 데이터를 Active name 노드에서 Standby Namenode로 복사합니다.

이 명령을 실행하면 메타 데이터가 복사중인 노드 및 위치와 복사 성공 여부에 대한 정보를 얻을 수 있습니다.

활성 목적 세부 정보에 대한 정보.

메타 데이터가 Active namenode에서 standby namenode로 복사되면 스크린 샷에 아래와 같은 메시지가 표시됩니다.

Standby Namenode의 HDFS에 관한 정보.

대기 네임 노드 머신에서 네임 노드 데몬을 시작합니다.

명령 : hadoop-daemon.sh 시작 목적

이제 세 노드 모두에서 Zookeeper 서비스를 시작합니다.

명령 : zkServer.sh start (모든 노드에서이 명령 실행)

활동 목적 :

Active NameNode에서 zookeeper를 시작하십시오.

대기 Namenode에서 :

대기 NameNode에서 zookeeper를 시작하십시오.

데이터 노드에서 :

DataNode에서 zookeeper를 시작하십시오.

Zookeeper 서버를 실행 한 후 JPS 명령을 입력하십시오. 모든 노드에서 QuorumPeerMain 서비스를 볼 수 있습니다.

데이터 노드 시스템에서 데이터 노드 데몬을 시작합니다.

명령 : hadoop-daemon.sh 시작 데이터 노드

활성 이름 노드 및 대기 이름 노드에서 Zookeeper 장애 조치 컨트롤러를 시작합니다.

활성 네임 노드에서 사육사 장애 조치 컨트롤러를 포맷합니다.

명령: HDFS zkfc –formatZK

ZKFC를 포맷합니다.

Active namenode에서 ZKFC를 시작합니다.

명령 : hadoop-daemon.sh start zkfc

jps 명령을 입력하여 DFSZkFailoverController 데몬을 확인하십시오.

eclipse의 오이 예제가있는 셀레늄 웹 드라이버

ZKFC를 시작합니다.

zookeeper 장애 조치 컨트롤러를 Standby namenode에서 포맷합니다.

명령 : hdfs zkfc –formatZK

대기 이름 노드에서 ZKFC를 시작합니다.

명령 : hadoop-daemon.sh start zkfc

jps 명령을 입력하여 DFSZkFailoverController 데몬을 확인하십시오.

이제 아래 명령을 사용하여 각 Namenode의 상태, 어떤 노드가 활성 상태인지 또는 어떤 노드가 대기 상태인지 확인하십시오.

명령 : hdfs haadmin –getServiceState nn1

각 NameNode의 상태를 확인하십시오.

이제 웹 브라우저를 사용하여 각 네임 노드의 상태를 확인하십시오.

웹 브라우저를 열고 아래 URL을 입력하십시오.

: 50070

이름 노드가 활성인지 대기 상태인지를 보여줍니다.

활성 NameNode.

웹 브라우저를 사용하여 다른 이름 노드 세부 정보를 엽니 다.

대기 NameNode.

활성 이름 노드에서 이름 노드 데몬을 종료하여 대기 이름 노드를 활성 이름 노드로 변경합니다.

Active namenode에 jps를 입력하고 데몬을 종료합니다.

명령: sudo kill -9

데몬 프로세스 ID.

네임 노드 프로세스 ID는 7606이며 네임 노드를 죽입니다.

명령 : Sudo kill -9 7606

이름 노드 프로세스 종료

웹 브라우저를 통해 두 노드를 열고 상태를 확인하십시오.

네임 노드 세부 사항.

NameNode 상태.

축하합니다. Hadoop에서 HDFS 고 가용성 클러스터를 성공적으로 설정했습니다.

이제 Hadoop 고 가용성 클러스터 아키텍처를 이해 했으므로 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka BigData Hadoop 인증 교육 과정은 학습자가 소매, 소셜 미디어, 항공, 관광, 금융 분야의 실시간 사용 사례를 사용하여 HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume 및 Sqoop의 전문가가 될 수 있도록 도와줍니다.

질문이 있으십니까? 의견란에 언급 해 주시면 연락 드리겠습니다.

window._LQ_ = window._LQ_ || {}

lqQuizModal (window, document, {quizId :’XAIVp8 ′, baseUrl :’https : //quiz.leadquizzes.com/’,trigger :’exit’}, _LQ_)