Cloud Storage 커넥터

Cloud Storage 커넥터 오픈소스 Java 라이브러리를 사용하면 Cloud Storage의 데이터에서 직접 Apache Hadoop 또는 Apache Spark 작업을 실행할 수 있습니다.

Cloud Storage 커넥터의 이점

  • 직접 데이터 액세스: Cloud Storage에 데이터를 저장하고 직접 액세스합니다. 데이터를 HDFS로 먼저 전송할 필요가 없습니다.
  • HDFS 호환성: hdfs:// 대신 gs:// 프리픽스를 사용하여 Cloud Storage의 데이터에 액세스할 수 있습니다.
  • 상호 운용성: Cloud Storage에 데이터를 저장하면 Spark, Hadoop, Google 서비스 간에 원활한 상호 운용이 가능합니다.
  • 데이터 접근성: HDFS와 달리 Hadoop 클러스터를 종료하면 Cloud Storage의 데이터에 계속 액세스할 수 있습니다.
  • 높은 데이터 가용성: Cloud Storage에 저장된 데이터는 가용성이 높고 성능 저하 없이 글로벌 단위로 복제됩니다.
  • 스토리지 관리 오버헤드 없음: HDFS와 달리 Cloud Storage는 파일 시스템 확인, 파일 시스템 업그레이드, 이전 버전의 파일 시스템으로 롤백 등과 같은 일상적인 유지보수가 필요하지 않습니다.
  • 빠른 시작: HDFS에서는 NameNode가 안전 모드에서 벗어나야 맵리듀스 작업을 시작할 수 있으며, 이 프로세스는 데이터 규모와 상태에 따라 몇 초에서 몇 분이 소요될 수 있습니다. 그러나 Cloud Storage에서는 작업 노드가 시작되면 바로 작업을 시작할 수 있으므로 시간 경과에 따라 상당한 비용 절감 효과를 볼 수 있습니다.

Dataproc 클러스터의 커넥터 설정

Cloud Storage 커넥터는 기본적으로 /usr/local/share/google/dataproc/lib/ 디렉터리의 모든 Dataproc 클러스터 노드에 설치됩니다. 다음 하위 섹션에서는 Dataproc 클러스터에서 커넥터 설정을 완료하기 위해 취할 수 있는 단계를 설명합니다.

VM 서비스 계정

Dataproc 클러스터 노드 및 기타 Compute Engine VM에서 커넥터를 실행할 때 google.cloud.auth.service.account.enable 속성은 기본적으로 false로 설정되어 있습니다. 즉, 커넥터에 대한 VM 서비스 계정 사용자 인증 정보를 구성할 필요가 없습니다. VM 서비스 계정 사용자 인증 정보는 VM 메타데이터 서버에서 제공합니다.

Dataproc VM 서비스 계정에 Cloud Storage 버킷에 액세스할 수 있는 권한이 있어야 합니다.

사용자가 선택한 커넥터 버전

Dataproc 클러스터에 설치된 최신 이미지에 사용되는 기본 Cloud Storage 커넥터 버전은 이미지 버전 페이지에 나열됩니다. 애플리케이션이 클러스터에 배포된 기본이 아닌 커넥터 버전에 따라 달라지는 경우 다음 작업 중 하나를 실행하여 선택한 커넥터 버전을 사용할 수 있습니다.

  • 클러스터에서 실행되는 애플리케이션에서 사용하는 커넥터를 지정된 커넥터 버전으로 업데이트하는 --metadata=GCS_CONNECTOR_VERSION=x.y.z 플래그로 클러스터를 만듭니다.
  • 배포된 커넥터 버전과 Dataproc 클러스터에 설치된 기본 커넥터 버전 간의 충돌을 방지하려면 사용 중인 버전의 커넥터 클래스와 커넥터 종속 항목을 애플리케이션의 jar.cRelocation에 포함시키고 재배치해야 합니다. Maven 종속 항목 재배치 예시도 참조하세요.

Dataproc 이외의 클러스터에서 커넥터 설정

다음 단계에 따라 온프레미스 HDFS 데이터를 Cloud Storage로 이동하는 데 사용하는 Apache Hadoop 또는 Spark 클러스터와 같은 Dataproc 이외의 클러스터에 Cloud Storage 커넥터를 설정할 수 있습니다.

  1. 커넥터를 다운로드합니다.

  2. 커넥터를 설치합니다.

    GitHub 안내에 따라 Cloud Storage 커넥터를 설치, 구성, 테스트합니다.

커넥터 사용량

커넥터를 사용하여 다음과 같은 방법으로 Cloud Storage 데이터에 액세스할 수 있습니다.

Java 사용

Cloud Storage 커넥터는 Java 8이 필요합니다.

다음은 Cloud Storage 커넥터의 샘플 Maven POM 종속 항목 관리 섹션입니다. 자세한 내용은 종속 항목 관리를 참조하세요.

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
</dependency>

음영 처리된 버전의 경우:

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
    <classifier>shaded</classifier>
</dependency>

커넥터 지원

Cloud Storage 커넥터는 Google Cloud 제품 및 사용 사례에 사용할 수 있도록 Google Cloud에서 지원됩니다. Dataproc과 함께 사용하면 Dataproc과 동일한 수준에서 지원됩니다. 자세한 내용은 지원 받기를 참조하세요.

gRPC를 사용하여 Cloud Storage에 연결

기본적으로 Dataproc의 Cloud Storage 커넥터는 Cloud Storage JSON API를 사용합니다. 이 섹션에서는 Cloud Storage 커넥터가 gRPC를 사용하도록 사용 설정하는 방법을 보여줍니다.

사용 고려사항

gRPC와 함께 Cloud Storage 커넥터를 사용하면 다음과 같은 고려사항이 있습니다.

  • 리전별 버킷 위치: Compute Engine VM과 Cloud Storage 버킷이 동일한 Compute Engine 리전에 있는 경우에만 gRPC가 읽기 지연 시간을 개선할 수 있습니다.
  • 읽기 집약적인 작업: gRPC는 장기 실행 읽기에 대해 향상된 읽기 지연 시간을 제공하고 읽기 집약적인 워크로드에 도움이 될 수 있습니다. gRPC 채널을 만들고 짧은 계산을 실행한 다음 채널을 닫는 애플리케이션은 권장하지 않습니다.
  • 인증되지 않은 요청: gRPC는 인증되지 않은 요청을 지원하지 않습니다.

요구사항

Cloud Storage 커넥터와 함께 gRPC를 사용할 때는 다음 요구사항이 적용됩니다.

  • Dataproc 클러스터 VPC 네트워크직접 연결을 지원해야 합니다. 즉, 네트워크의 경로방화벽 규칙에서 이그레스 트래픽이 34.126.0.0/182001:4860:8040::/42에 도달하도록 허용해야 합니다.

  • Dataproc 클러스터를 만들 때 이미지 버전 2.1.56+의 경우 Cloud Storage 커넥터 버전 2.2.23 이상을 사용하거나 이미지 버전 2.2.0 이상에서는 Cloud Storage 커넥터 버전 v3.0.0 이상을 사용해야 합니다. 각 Dataproc 이미지 버전에 설치된 Cloud Storage 커넥터 버전은 Dataproc 이미지 버전 페이지에 나와 있습니다.

    • gRPC Cloud Storage 요청에 GKE 기반 Dataproc 가상 클러스터를 만들고 사용하는 경우 gke-metadata-server 0.4.285가 포함된 GKE 버전 1.28.5-gke.1199000를 사용하는 것이 좋습니다. 이 조합은 직접 연결을 지원합니다.
  • 사용자 또는 조직 관리자가 Cloud Storage 커넥터를 설정하고 gRPC 요청을 실행하는 데 필요한 권한이 포함된 Identity and Access Management 역할을 부여해야 합니다. 이러한 역할에는 다음이 포함될 수 있습니다.

    • 사용자 역할: 클러스터를 만들고 작업을 제출할 수 있도록 사용자에게 부여된 Dataproc 편집자 역할
    • 서비스 계정 역할: 클러스터 VM에서 실행되는 애플리케이션이 Cloud Storage 객체를 보고, 읽고, 만들고, 쓸 수 있도록 Dataproc VM 서비스 계정에 부여된 스토리지 객체 사용자 역할

Cloud Storage 커넥터에서 gRPC 사용 설정

클러스터 또는 작업 수준에서 Cloud Storage 커넥터에 gRPC를 사용 설정할 수 있습니다. 클러스터에서 사용 설정되면 Cloud Storage 커넥터 읽기 요청은 gRPC를 사용합니다. 클러스터 수준이 아닌 작업에서 사용 설정된 경우 Cloud Storage 커넥터 읽기 요청은 작업에 대해서만 gRPC를 사용합니다.

클러스터 사용 설정

클러스터 수준에서 Cloud Storage 커넥터에 gRPC를 사용 설정하려면 Dataproc 클러스터를 만들 때 core:fs.gs.client.type=STORAGE_CLIENT 속성을 설정합니다. 클러스터 수준에서 gRPC가 사용 설정되면 Cloud Storage 커넥터는 클러스터에서 실행되는 작업에 의해 생성된 읽기 요청에서 gRPC를 사용합니다.

gcloud CLI 예시:

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --properties=core:fs.gs.client.type=STORAGE_CLIENT

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름을 지정합니다.
  • PROJECT_NAME: 클러스터가 있는 프로젝트의 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드프로젝트 정보 섹션에 나열됩니다.
  • REGION: 클러스터가 위치할 Compute Engine 리전을 지정합니다.

작업 사용 설정

특정 작업의 Cloud Storage 커넥터에서 gRPC를 사용 설정하려면 작업을 제출할 때 --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT를 포함합니다.

예: gRPC를 사용하여 Cloud Storage에서 읽는 기존 클러스터에서 작업을 실행합니다.

  1. gRPC를 사용하여 Cloud Storage 텍스트 파일을 읽고 파일의 줄 수를 출력하는 로컬 /tmp/line-count.py PySpark 스크립트를 만듭니다.

    cat <<EOF >"/tmp/line-count.py"
    #!/usr/bin/python
    import sys
    from pyspark.sql import SparkSession
    path = sys.argv[1]
    spark = SparkSession.builder.getOrCreate()
    rdd = spark.read.text(path)
    lines_counter = rdd.count()
    print("There are {} lines in file: {}".format(lines_counter,path))
    EOF
    
  2. 로컬 /tmp/line-count-sample.txt 텍스트 파일을 만듭니다.

    cat <<EOF >"/tmp/line-count-sample.txt"
    Line 1
    Line 2
    line 3
    EOF
    
  3. 로컬 /tmp/line-count.py/tmp/line-count-sample.txt를 Cloud Storage의 버킷에 업로드합니다.

    gcloud storage cp /tmp/line-count* gs://BUCKET
    
  4. 클러스터에서 line-count.py 작업을 실행합니다. Cloud Storage 커넥터 읽기 요청에 gRPC를 사용 설정하려면 --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT로 설정합니다.

    gcloud dataproc jobs submit pyspark gs://BUCKET/line-count.py \
    --cluster=CLUSTER_NAME \
    --project=PROJECT_ID  \
    --region=REGION \
    --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT \
    -- gs://BUCKET/line-count-sample.txt
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 기존 클러스터의 이름입니다.
    • PROJECT_NAME: 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드프로젝트 정보 섹션에 나열됩니다.
    • REGION: 클러스터가 있는 Compute Engine 리전입니다.
    • BUCKET: Cloud Storage 버킷입니다.

gRPC 클라이언트 측 측정항목 생성

Cloud Monitoring에서 gRPC 관련 측정항목을 생성하도록 Cloud Storage 커넥터를 구성할 수 있습니다. gRPC 관련 측정항목을 사용하면 다음을 수행할 수 있습니다.

  • Cloud Storage에 대한 gRPC 요청의 성능 모니터링 및 최적화
  • 문제 해결 및 디버깅
  • 애플리케이션 사용 및 동작에 대한 유용한 정보 얻기

Cloud Storage 커넥터를 구성하여 gRPC 관련 측정항목을 생성하는 방법에 관한 자세한 내용은 gRPC 클라이언트 측 측정항목 사용을 참조하세요.

리소스