클러스터 웹 인터페이스

Apache HadoopApache Spark와 같이 Dataproc 클러스터에 포함된 일부 핵심 오픈소스 구성요소는 웹 인터페이스를 제공합니다. 이러한 인터페이스를 사용하여 YARN 리소스 관리자, HDFS(Hadoop 분산 파일 시스템), 맵리듀스, Spark와 같은 클러스터 리소스 및 기능을 관리하고 모니터링할 수 있습니다. 클러스터에 설치하는 다른 구성요소 또는 애플리케이션은 웹 인터페이스도 제공합니다. 예를 들어 Dataproc 클러스터에 Jupyter 메모장 설치 및 실행을 참조하세요.

사용 가능한 인터페이스

다음 인터페이스는 Dataproc 클러스터 마스터 노드에서 사용할 수 있습니다(master-host-name를 마스터 노드의 이름으로 바꿈).

웹 UI 포트 URL
YARN ResourceManager 8088 http://master-host-name:8088
HDFS NameNode 98701 http://master-host-name:9870

1  이전 Dataproc 출시 버전(1.2 이전)에서 HDFS Namenode 웹 UI 포트는 50070이었습니다.

YARN ResourceManager의 'Tracking UI' 열 아래에는 현재 실행 중이거나 완료된 모든 맵리듀스 및 Spark 애플리케이션 웹 인터페이스에 대한 링크가 표시됩니다.

허용되는 YARN ResourceManager REST API

클러스터를 만들 때 Dataproc은 yarn-site.xml yarn.resourcemanager.webapp.methods-allowed 속성을 'GET,HEAD'로 설정합니다. 'GET,HEAD'는 YARN Resource Manager 웹 UI 및 REST API에서 호출할 수 있는 HTTP 메서드를 GETHEAD 메서드로 제한합니다. 이 기본 설정은 또한 YARN REST API를 통한 작업 제출 및 수정을 사용 중지합니다.

이 속성을 하나 이상의 쉼표로 구분된 HTTP 메소드 이름으로 설정하여 포트 8088에서 특정 HTTP 메소드를 사용 설정하도록 기본값을 재정의할 수 있습니다. 값이 ALL이면 이 포트에서 모든 HTTP 메소드가 허용됩니다.

예:

gcloud dataproc clusters create \
    --properties='yarn:yarn.resourcemanager.webapp.methods-allowed=GET,POST,DELETE' \
    --region=region \

권장 사항: 기본값이 아닌 HTTP 메소드를 허용하도록 이 속성을 설정할 경우, 포트 8088에 대한 액세스를 제한하도록 방화벽 규칙 및 기타 보안 설정을 구성해야 합니다.

웹 인터페이스에 연결하기

Dataproc 구성요소 게이트웨이, 프로젝트의 Cloud Shell 또는 Cloud SDK gcloud 명령줄 도구를 사용하여 Dataproc 클러스터에서 실행되는 웹 인터페이스에 연결할 수 있습니다.

  • 구성요소 게이트웨이: 클릭 한 번으로 Cloud Console에서 Hadoop, Spark, 기타 구성요소 웹 UI 인터페이스로 연결합니다. 클러스터를 만들 때 구성요소 게이트웨이를 사용 설정합니다.

  • Cloud Shell: Google Cloud Console의 Cloud Shell에는 Cloud SDK 명령어와 유틸리티가 사전 설치되어 있으며 SSH 터널을 통해 클러스터의 웹 인터페이스 포트에 빠르게 연결할 수 있는 웹 미리보기 기능을 제공합니다. 그러나 Cloud Shell에서 클러스터로의 연결에는 로컬 포트 전달이 사용되므로 클러스터 웹 인터페이스에서 한 포트에 대한 연결만 열립니다(여러 포트에 연결하기 위해서는 여러 명령어가 필요함). 또한 일정 시간(30분) 동안 사용하지 않을 경우 Cloud Shell 세션이 자동으로 종료됩니다.

  • gcloud 명령줄 도구: 동적 포트 전달이 포함된 gcloud compute ssh 명령어를 사용하면 SSH 터널을 설정하고 터널 맨 위에서 SOCKS 프록시 서버를 실행할 수 있습니다. 이 명령어를 실행한 후 SOCKS 프록시를 사용하도록 로컬 브라우저를 구성해야 합니다. 이 연결 방법을 사용하면 클러스터 웹 인터페이스의 여러 포트에 연결할 수 있습니다. 자세한 내용은 SOCKS 프록시 대신 로컬 포트 전달을 사용할 수 있나요? 를 참조하세요.

일반적으로 사용되는 명령어 변수 설정

로컬 머신 또는 Cloud Shell에서 명령줄 예시를 더 쉽게 복사하고 실행하려면 gcloud dataproc 명령어 변수를 설정합니다. 이 페이지에 표시된 일부 명령어 예시에 추가 변수를 설정해야 할 수도 있습니다.

Linux/mac/Shell

export PROJECT=project;export HOSTNAME=hostname;export ZONE=zone

Windows

set PROJECT=project && set HOSTNAME=hostname && set ZONE=zone
  • PROJECT를 Google Cloud 프로젝트 ID로 설정합니다.
  • HOSTNAME을 Dataproc 클러스터의 마스터 노드 이름으로 설정합니다(마스터 이름은 -m 서픽스로 끝남).
  • Dataproc 클러스터의 VM 중 ZONE영역으로 설정합니다(예: 'us-central1-b').

SSH 터널 만들기

gcloud 명령

로컬 머신에서 다음 gcloud 명령어를 실행하여 로컬 머신의 열린 포트에서 클러스터의 마스터 인스턴스로 SSH 터널을 설정하고 포트에서 수신하는 로컬 SOCKS 프록시 서버를 실행합니다.

명령어를 실행하기 전에 로컬 머신에서 다음을 수행하세요.

  1. 일반적으로 사용되는 명령어 변수 설정
  2. PORT 변수를 로컬 머신의 공개 포트로 설정합니다. 포트 1080은 필수는 아니지만 로컬 머신에서 열려 있을 가능성이 높기 때문에 일반적으로 많이 사용됩니다.
    PORT=number
    

Linux/macOS

gcloud compute ssh ${HOSTNAME} \
    --region=region \
    --project=${PROJECT} --zone=${ZONE}  -- \
    -D ${PORT} -N

Windows

gcloud compute ssh %HOSTNAME% ^
    --project=%PROJECT% --zone=%ZONE%  -- ^
    -D %PORT% -N

-- 구분자를 사용하면 다음과 같이 SSH 인수를 gcloud compute ssh 명령어에 추가할 수 있습니다.

  • -D는 애플리케이션 수준의 동적 포트 전달을 지정합니다.
  • -Ngcloud에 원격 셸을 열지 않도록 지시합니다.

gcloud 명령어는 다른 SSH 셸 세션과 독립적으로 작동하는 SSH 터널을 만들고 셸 출력에서 터널 관련 오류를 방지하며 터널이 실수로 닫히지 않도록 합니다.

ssh 명령어가 bind: Cannot assign requested address 오류 메시지와 함께 실패하면 요청된 포트가 사용 중인 것일 수 있습니다. 다른 PORT 변수 값으로 명령어를 실행해 보세요.

위 명령은 포그라운드에서 실행되며 터널을 활성 상태로 유지하기 위해 계속 실행되어야 합니다. 이 명령은 사용자가 클러스터를 삭제할 때 자동으로 종료됩니다.

Cloud Shell

  1. Google Cloud Cloud Shell을 엽니다.
  2. Cloud Shell에서 gcloud 명령어를 실행하여 Cloud Shell 미리보기 포트에서 클러스터의 마스터 노드에 있는 웹 인터페이스 포트로의 SSH 터널을 설정합니다. 명령어를 실행하기 전에 Cloud Shell에서 다음을 수행합니다.

    1. 일반적으로 사용되는 명령어 변수 설정
    2. PORT1 변수를 포트 범위 8080~8084의 Cloud Shell 포트로 설정하고, PORT2 변수를 Cloud Dataproc 클러스터의 마스터 노드에 있는 웹 인터페이스 포트로 설정합니다.
      PORT1=number
      PORT2=number
      
    gcloud compute ssh ${HOSTNAME} \
        --region=region \
        --project=${PROJECT} --zone=${ZONE}  -- \
        -4 -N -L ${PORT1}:${HOSTNAME}:${PORT2}
    

    -- 구분자를 사용하면 다음과 같이 SSH 인수를 gcloud compute ssh 명령어에 추가할 수 있습니다.

    • -4는 IPv4만 사용하도록 ssh에 지시합니다.
    • -Ngcloud에 원격 셸을 열지 않도록 지시합니다.
    • -L ${PORT1}:${HOSTNAME}:${PORT2}는 지정된 Cloud Shell PORT1에서 클러스터 HOSTNAME PORT2로의 로컬 포트 전달을 지정합니다

    gcloud 명령어는 다른 SSH 셸 세션과 독립적으로 작동하는 SSH 터널을 만들고 셸 출력에서 터널 관련 오류를 방지하며 터널이 실수로 닫히지 않도록 합니다.

브라우저 구성

gcloud 명령

SSH 터널은 SOCKS 프로토콜을 사용하여 트래픽 프록시를 지원합니다. 프록시를 사용하도록 브라우저를 구성하려면 프록시 서버 매개변수를 사용하여 새 브라우저 세션을 시작합니다. 다음은 Chrome 브라우저를 사용하는 예입니다. HOSTNAME은 클러스터 마스터 노드의 이름입니다(일반적으로 사용되는 명령어 변수 설정 참조).

Linux

/usr/bin/google-chrome \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

macOS

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --proxy-server="socks5://localhost:${PORT}" \
    --user-data-dir=/tmp/${HOSTNAME}

Windows

"%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" ^
    --proxy-server="socks5://localhost:%PORT%" ^
    --user-data-dir="%Temp%\%HOSTNAME%"

이 명령어는 다음과 같은 Chrome 브라우저 플래그를 사용합니다.

  • -proxy-server="socks5://localhost:1080"은 SOCKS 프로토콜의 버전 5를 사용하여 SOCKS 프록시 서버 localhost:${PORT}를 통해 모든 http://https:// URL 요청을 보내도록 Chrome에 지시합니다. ${PORT}SSH 터널 만들기에서 설정한 포트 변수입니다. URL의 호스트 이름은 Chrome에서 로컬로 확인되지 않고 프록시 서버에서 확인됩니다.
  • --user-data-dir=/tmp/${HOSTNAME}은 Chrome이 기존 Chrome 세션에 연결되지 않은 새 창을 열도록 합니다. 이 플래그를 사용하지 않으면 Chrome에서 사용자의 --proxy-server 설정을 무시하고 기존 Chrome 세션에 연결된 새 창을 열 수 있습니다. --user-data-dir에 설정된 값은 존재하지 않는 모든 경로일 수 있습니다.

Cloud Shell

Cloud Shell을 사용할 때는 로컬 브라우저를 구성할 필요가 없습니다. SSH 터널을 생성한 후 Cloud Shell 웹 미리보기를 사용하여 클러스터 인터페이스에 연결합니다.

클러스터 인터페이스에 연결

gcloud 명령

로컬 브라우저가 프록시를 사용하도록 구성되면 Dataproc 클러스터의 웹 인터페이스 URL로 이동할 수 있습니다(사용 가능한 인터페이스 참조). 브라우저 URL의 형식과 내용은 http://cluster-name-m:port입니다(클러스터 인터페이스 포트).

Cloud Shell

Cloud Shell 웹 미리보기 버튼 web-preview-button을 클릭한 후 다음 중 하나를 수행합니다.

  • '포트 8080에서 미리보기' 또는
  • '포트 변경' 및 대화 상자에 포트 번호 삽입
Cloud Shell에 따라 SSH 터널 만들기gcloud compute ssh 명령어에 전달한 PORT1 번호(포트 8080~8084)

클러스터 마스터 노드의 웹 인터페이스 포트에 연결되는 브라우저 창이 열립니다.

FAQ 및 디버깅 팁

브라우저에 UI가 표시되지 않을 경우에는 어떻게 해야 하나요?

브라우저에 UI가 표시되지 않을 경우 가장 일반적인 이유 두 가지는 다음과 같습니다.

  1. 방화벽으로 인한 네트워크 연결 문제가 있습니다. 로컬 변수를 설정한 후 다음 명령어를 실행하여 SSH를 통해 마스터 인스턴스에 연결할 수 있는지 확인합니다. 명령이 실패하면 연결 문제가 있는 것입니다.

    Linux/macOS

    gcloud compute ssh ${HOSTNAME}-m \
        --project=${PROJECT}
    

    Windows

    gcloud compute ssh %HOSTNAME%-m ^
        --project=%PROJECT%
    

  2. 또 다른 프록시가 SOCKS 프록시를 방해하고 있습니다. 프록시를 확인하려면 다음 curl 명령어를 실행합니다(Linux 및 macOS에서 사용 가능).

    Linux/macOS

    curl -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    

    Windows

    curl.exe -Is --socks5-hostname localhost:1080 http://cluster-name-m:8088
    
    HTTP 응답이 표시되면 프록시가 작동 중이므로, 또 다른 프록시 또는 브라우저 확장 프로그램으로 인해 SOCKS 프록시가 중단되고 있는 것일 수 있습니다.

SOCKS 프록시 대신 로컬 포트 전달을 사용할 수 있나요?

SOCKS 프록시 대신, 마스터 포트를 로컬 포트로 전달하는 SSH 로컬 포트 전달을 사용하여 마스터 인터페이스에서 실행되는 웹 애플리케이션 UI에 액세스할 수 있습니다. 예를 들어 다음 명령어를 사용하면 SOCKS 없이 localhost:1080에 액세스하여 cluster-name-m:8088에 도달할 수 있습니다(일반적으로 사용되는 명령어 변수 설정 참조).

Linux/macOS

gcloud compute ssh ${HOSTNAME}-m \
    --project=${PROJECT} -- \
    -L 1080:${HOSTNAME}-m:8088 -N -n

Windows

gcloud compute ssh %HOSTNAME%-m ^
    --project=%PROJECT% -- ^
    -L 1080:%HOSTNAME%-m:8088 -N -n

로컬 포트 전달보다 SOCKS 프록시 사용이 권장되는 이유는 다음과 같습니다.

  • 각 UI 포트에 대해 포트 전달 터널을 설정하지 않고도 모든 웹 애플리케이션 포트에 액세스할 수 있습니다.
  • Spark 및 Hadoop 웹 UI가 DNS 호스트를 제대로 확인할 수 있습니다.