본문 바로가기

Tech. Insight/AI · Data Science

[GCP] Apache Spark용 서버리스를 사용하여 BigQuery 로드하기

반응형

 

작업 1. 환경 구성 작업 완료

먼저 Apache Spark용 서버리스 워크로드 실행을 지원하도록 몇 가지 환경 구성 작업을 수행하겠습니다.

  • Cloud Shell에서 다음 명령어를 실행하여 비공개 IP 액세스를 사용 설정합니다.
gcloud compute networks subnets update default --region=REGION --enable-private-ip-google-access

 

  • 다음 명령어를 사용하여 스테이징 위치 역할을 할 새 Cloud Storage 버킷을 만듭니다.
gsutil mb -p  PROJECT_ID gs://PROJECT_ID

 
  • 다음 명령어를 사용하여 BigQuery에서 테이블을 만들고 로드하는 동안 임시 위치 역할을 할 새 Cloud Storage 버킷을 만듭니다.
gsutil mb -p  PROJECT_ID gs://PROJECT_ID-bqtemp

 
  • 데이터를 저장할 BQ 데이터 세트를 만듭니다.
bq mk -d  loadavro

 

작업 2. 실습 Asset 다운로드

다음으로 실습 완료에 필요한 애셋 몇 가지를 실습용으로 제공된 Compute Engine VM에 다운로드하겠습니다. 남은 실습 단계는 Compute Engine VM에서 수행합니다.

  1. 탐색 메뉴에서 Compute Engine을 클릭합니다. 여기에 프로비저닝된 Linux VM이 표시됩니다. lab-vm 인스턴스 옆에 있는 SSH 버튼을 클릭합니다.

  • VM 터미널 프롬프트에서 Avro 파일을 다운로드합니다. 이 파일은 BigQuery에 저장할 수 있도록 처리됩니다.
wget https://storage.googleapis.com/cloud-training/dataengineering/lab_assets/idegc/campaigns.avro
 
  • 그런 다음, Avro 파일을 앞서 만든 스테이징 Cloud Storage 버킷으로 이전합니다.
gcloud storage cp campaigns.avro gs://PROJECT_ID
 
  • 서버리스 환경에 대해 실행할 Spark 코드가 포함되어 있는 보관 파일을 다운로드합니다.
wget https://storage.googleapis.com/cloud-training/dataengineering/lab_assets/idegc/dataproc-templates.zip

 
  • 보관 파일을 압축 해제합니다.
unzip dataproc-templates.zip

 

  • Python 디렉터리로 변경합니다.
cd dataproc-templates/python

 

 

작업 3. Spark 코드 구성 및 실행

다음으로 VM 인스턴스 터미널에 몇 가지 환경 변수를 설정하고, Spark 템플릿을 실행하여 BigQuery에 데이터를 로드하겠습니다.

  • Apache Spark용 서버리스 환경에 대해 다음 환경 변수를 설정합니다.
export GCP_PROJECT=PROJECT_ID
export REGION=REGION
export GCS_STAGING_LOCATION=gs://PROJECT_ID
export JARS=gs://cloud-training/dataengineering/lab_assets/idegc/spark-bigquery_2.12-20221021-2134.jar
 
  • 다음 코드를 실행해 Spark Cloud Storage to BigQuery 템플릿을 실행하여 Avro 파일을 BigQuery에 로드합니다.
./bin/start.sh \
-- --template=GCSTOBIGQUERY \
    --gcs.bigquery.input.format="avro" \
    --gcs.bigquery.input.location="gs://PROJECT_ID" \
    --gcs.bigquery.input.inferschema="true" \
    --gcs.bigquery.output.dataset="loadavro" \
    --gcs.bigquery.output.table="campaigns" \
    --gcs.bigquery.output.mode=overwrite\
    --gcs.bigquery.temp.bucket.name="PROJECT_ID-bqtemp"
 

참고: 다음과 같은 경고는 무시해도 됩니다. FileStreamSink 경고: 메타데이터 디렉터리가 없다고 가정합니다. 경로에서 메타데이터 디렉터리를 찾는 중 오류가 발생했습니다. 소규모 테스트이므로 메타데이터 디렉터리가 필요하지 않습니다.참고: 일괄 작업에 실패했다는 오류 메시지가 표시되면 기다린 후 작업이 완료될 때까지 명령어를 다시 실행하세요.

 

작업 4. 데이터가 BigQuery에 로드되었는지 확인

Spark 템플릿을 성공적으로 실행했으니 이제 BigQuery에서 결과를 검토할 차례입니다.

  • BigQuery에서 새 테이블의 데이터를 확인합니다.
bq query \
 --use_legacy_sql=false \
 'SELECT * FROM `loadavro.campaigns`;'
출력 예시:
+------------+--------+---------------------+--------+---------------------+----------+-----+
| created_at | period |    campaign_name    | amount | advertising_channel | bid_type | id  |
+------------+--------+---------------------+--------+---------------------+----------+-----+
| 2020-09-17 |     90 | NA - Video - Other  |     41 | Video               | CPC      |  81 |
| 2021-01-19 |     30 | NA - Video - Promo  |    325 | Video               | CPC      | 137 |
| 2021-06-28 |     30 | NA - Video - Promo  |     78 | Video               | CPC      | 214 |
| 2021-03-15 |     30 | EU - Search - Brand |    465 | Search              | CPC      | 170 |
| 2022-01-01 |     30 | EU - Search - Brand |     83 | Search              | CPC      | 276 |
| 2020-02-18 |     30 | EU - Search - Brand |     30 | Search              | CPC      |  25 |
| 2021-06-08 |     30 | EU - Search - Brand |    172 | Search              | CPC      | 201 |
| 2020-11-29 |     60 | EU - Search - Other |     83 | Search              | CPC      | 115 |
| 2021-09-11 |     30 | EU - Search - Other |     86 | Search              | CPC      | 237 |
| 2022-02-17 |     30 | EU - Search - Other |     64 | Search              | CPC      | 296 |
+------------+--------+---------------------+--------+---------------------+----------+-----+
 

 

반응형