빅데이터에 Cloud Storage 사용

Cloud Storage는 Google Cloud에서 빅데이터를 저장하고 작업하는 데 중요한 역할을 합니다. 예를 들어 Cloud Storage를 사용하여 BigQuery에 데이터를 로드하고, Dataflow 파이프라인의 스테이징 파일 및 임시 데이터를 보관하고, Dataproc에 통합할 수 있으므로 Cloud Storage의 데이터에서 직접 Apache Hadoop 또는 Apache Spark 작업을 실행할 수 있습니다.

이 페이지에서는 gcloud 명령줄 도구를 사용하여 대용량 파일을 복사하거나 여러 파일을 병렬로 복사하는 등의 빅데이터 작업을 수행하는 방법을 설명합니다. gcloud 대한 소개는 gcloud 빠른 시작을 참조하세요.

시작하기 전에

이 페이지에 표시된 예시를 최대한 활용하려면 다음을 완료해야 합니다(아직 완료하지 않은 경우).

버킷에 많은 파일 복사하기

cp 명령어는 필요에 따라 병렬(다중 스레드/다중 처리) 복사를 자동으로 수행하여 대량의 파일을 효율적으로 업로드합니다. 하위 디렉터리를 재귀적으로 복사하려면 명령어의 --recursive 플래그를 사용합니다. 예를 들어 하위 디렉터리를 포함한 파일을 top-level-dir이라는 로컬 디렉터리에서 버킷으로 복사하려면 다음을 사용하세요.

gcloud storage cp top-level-dir gs://example-bucket --recursive

와일드 카드를 사용하여 작업에 대한 특정 이름 세트를 일치시킬 수 있습니다. 예를 들어 image로 시작하는 파일만 복사하려면 다음을 사용하세요.

gcloud storage cp top-level-dir/subdir/image* gs://example-bucket --recursive

동일한 와일드 카드를 사용하여 파일을 삭제할 수 있습니다.

gcloud storage rm gs://example-bucket/top-level-dir/subdir/image*

로컬과 클라우드 간 파일 복사 외에도 클라우드 안에서 파일을 복사할 수 있습니다. 예를 들면 다음과 같습니다.

gcloud storage cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2

여러 파일을 이동 중임을 gcloud storage가 자동으로 감지하여 subdir2라는 새 디렉터리에 파일을 만듭니다.

로컬 디렉터리 동기화하기

로컬 디렉터리와 버킷을 동기화하려면 gcloud storage rsync 명령어를 사용하면 됩니다. 예를 들어 gs://example-bucket을 로컬 디렉터리 local-dir의 콘텐츠와 일치시키려면 다음을 사용하세요.

gcloud storage rsync local-dir gs://example-bucket --recursive

--delete-unmatched-destination-objects 플래그를 사용하면 소스(local-dir)에 없는 대상(위 명령의 gs://example-bucket)에서 파일을 삭제하라는 명령어에 신호를 보냅니다. 두 버킷 간에 동기화할 수도 있습니다.

버킷에 큰 파일 복사하기

일반적으로 빅데이터 작업 시 클라우드의 데이터는 클라우드에 유지되어야 합니다. Google Cloud에 데이터가 있으면 Compute Engine과 같이 동일한 위치의 다른 서비스로 빠르게 데이터를 전송할 수 있습니다.

큰 로컬 파일을 버킷에 복사하려면 다음을 사용하세요.

gcloud storage cp local-file gs://example-bucket

기존 버킷에서 대량 파일을 복사하려면 다음을 사용하세요.

gcloud storage cp gs://example-source-bucket/file  gs://example-destination-bucket

gcloud storage는 Cloud Storage의 재개 가능한 업로드 및 다운로드 기능을 활용합니다. 큰 파일의 경우 이는 전송 중인 데이터 크기에 따라 ISP의 네트워크 오류 발생 가능성이 증가하기 때문에 특히 중요합니다. gcloud storage은 서버가 실제로 수신한 바이트 수를 기준으로 업로드를 재개하므로 불필요한 바이트 재전송이 사라지고 최종적인 업로드 완료가 보장됩니다. 다운로드에도 로컬 파일의 크기를 기준으로 동일한 로직이 적용됩니다.

버킷 구성

버킷을 구성해야 하는 일반적인 빅데이터 작업에는 다른 스토리지 클래스로 데이터 이동, 객체 버전 관리 구성, 수명 주기 규칙 설정 등이 있습니다.

buckets describe로 버킷의 구성 세부정보를 나열할 수 있습니다.

gcloud storage buckets describe gs://example-bucket

출력에서 버킷 구성 정보를 확인합니다. 대부분의 정보는 gcloud storage을 통해 구성할 수도 있습니다.

  • CORS: 버킷의 Cross-Origin-Resource-Sharing 설정을 제어합니다.
  • Website: 버킷의 객체를 웹페이지 또는 웹사이트의 정적 애셋으로 사용할 수 있습니다.
  • Versioning: 버킷의 객체를 삭제하면 이전 버전이 생성되게 합니다.
  • Storage Class: 버킷 생성 중 스토리지 클래스를 설정할 수 있습니다.
  • Lifecycle: 버킷에서 주기적으로 작업을 실행할 수 있습니다. 가장 일반적인 작업은 비활성 객체를 삭제하는 것입니다.

예를 들어, 특정 버킷의 파일을 약 하루만 보관하려는 경우 다음을 사용하여 버킷에 대한 수명 주기 규칙을 설정할 수 있습니다.

echo '{ "rule": [{ "action": {"type": "Delete"}, "condition": {"age": 1}}]}' > lifecycle_config.json
gcloud storage buckets update gs://example-bucket --lifecycle-file=lifecycle_config.json

이제 버킷에서 하루가 지난 모든 객체가 자동으로 삭제됩니다. buckets describe 명령어로 방금 설정한 구성을 확인할 수 있습니다. 다른 구성 명령어도 비슷한 방식으로 작동합니다.

gcloud storage buckets describe gs://example-bucket

버킷의 데이터 공유하기

빅데이터 작업 시 공동으로 파일 작업을 해야 할 수 있으며 특정 사용자나 그룹에 대한 액세스 권한을 부여할 수 있어야 합니다. Identity and Access Management 정책은 파일에 액세스할 수 있는 사용자와 사용자가 수행할 수 있는 작업을 정의합니다. buckets get-iam-policy 명령어를 사용하여 버킷의 IAM 정책을 볼 수 있습니다.

gcloud storage buckets get-iam-policy gs://example-bucket

명령어에 대한 응답은 버킷에 액세스할 수 있는 계정인 주 구성원과 주 구성원에 부여된 권한 그룹인 역할을 보여줍니다.

일반적인 3가지 데이터 공유 시나리오는 공개적으로 공유, 그룹과 공유, 한 사용자와 공유입니다.

  • 공개적으로 공유: 인터넷의 모든 사용자가 콘텐츠를 나열하고 읽을 수 있는 버킷의 경우 'AllUsers' 지정을 사용하여 IAM 정책을 구성할 수 있습니다.

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=allUsers --role=roles/storage.objectViewer

  • 그룹과 공유: 다른 Google Cloud 리소스에 액세스할 수 없는 공동작업자의 경우 Google 그룹을 만든 후 Google 그룹을 버킷에 추가하는 것이 좋습니다. 예를 들어 my-group Google 그룹에 대한 액세스 권한을 부여하려면 다음 IAM 정책을 구성하면 됩니다.

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=group:my-group@googlegroups.com --role=roles/storage.objectViewer

    자세한 내용은 그룹을 사용하여 객체에 대한 액세스 제어하기를 참조하세요.

  • 한 사용자와 공유: 공동작업자가 많은 경우 그룹을 사용하여 액세스 권한을 일괄 부여합니다. 사용자가 한 명인 경우 다음과 같이 읽기 액세스 권한을 부여할 수 있습니다.

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=user:liz@gmail.com --role=roles/storage.objectViewer

버킷 정리하기

다음 명령어를 사용하여 버킷을 빠르게 정리할 수 있습니다.

gcloud storage rm gs://example-bucket/ --recursive

체크섬 작업

gcloud storage cpgcloud storage rsync 명령어는 복사를 수행할 때 소스 파일의 체크섬이 대상 파일의 체크섬과 일치하는지 확인합니다. 드물지만 체크섬이 일치하지 않는 경우 gcloud storage는 잘못된 사본을 삭제하고 경고 메시지를 출력합니다. 자세한 내용은 명령줄 체크섬 검증을 참조하세요.

gcloud storage를 사용하여 버킷에 있는 파일의 체크섬을 구하거나 로컬 객체의 체크섬을 계산할 수도 있습니다. 예를 들어 다음을 사용하여 Cloud Life Sciences 공용 데이터 파일을 작업 버킷에 복사한다고 가정해 보겠습니다.

gcloud storage cp gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf gs://example-bucket

이제 파일의 공개 버킷 버전과 버킷에 있는 파일 버전의 체크섬을 확인하여 둘이 일치하는지 확인할 수 있습니다.

gcloud storage objects describe gs://example-bucket/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf
gcloud storage objects describe gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf

이제 데이터가 로컬 데이터 센터의 파일에 있고 이를 Cloud Storage에 복사했다고 가정합니다. gcloud storage hash를 사용하여 로컬 파일의 체크섬을 구하고 버킷에 복사한 파일의 체크섬과 비교할 수 있습니다. 로컬 파일의 체크섬을 구하려면 다음을 사용하세요.

gcloud storage hash local-file

MD5 값

비복합 객체의 경우 버킷의 객체에 대해 gcloud storage objects describe를 실행하면 다음과 같은 출력이 반환됩니다.

bucket: example-bucket
contentType: text/plain
crc32c: FTiauw==
customTime: '1970-01-01T00:00:00+00:00'
etag: CPjo7ILqxsQCEAE=
generation: '1629833823159214'
id: example-bucket/100MBfile.txt/1629833823159214
kind: storage#object
md5Hash: daHmCObxxQdY9P7lp9jj0A==
...

로컬 파일에 대해 gcloud storage hash를 실행하면 다음과 같은 출력이 반환됩니다.

---
crc32c_hash: IJfuvg==
digest_format: base64
md5_hash: +bqpwgYMTRn0kWmp5HXRMw==
url: file.txt

두 출력 모두 CRC32c 및 MD5 값이 있습니다. 동시 복합 업로드에서 생성된 객체와 같은 복합 객체에는 MD5 값이 없습니다.

다음 단계