서버리스 인스턴스 작성 및 CLI를 사용한 애플리케이션 제출 알아보기
IBM Analytics Engine CLI를 사용하여 서버리스 인스턴스를 작성 및 관리하고 Spark 애플리케이션을 제출 및 모니터링하는 데 필요한 서비스를 작성하는 방법을 알아봅니다.
IBM Analytics Engine Standard 서버리스 플랜을 선택하여 서버리스 인스턴스를 작성합니다. 서버리스 인스턴스가 프로비저닝되면 선택한 라이브러리 패키지로 사용자 정의할 수 있는 Apache Spark 클러스터가 작성되고 여기에서 Spark 애플리케이션을 실행합니다.
목표
CLI를 사용하는 데 필요한 다음 서비스와 구성요소를 설치 및 설정하는 방법을 알아봅니다.
- IBM Analytics Engine 인스턴스가 사용자 정의 애플리케이션 라이브러리 및 Spark 히스토리 이벤트를 저장하는 IBM Cloud Object Storage 인스턴스.
- 애플리케이션 파일 및 데이터 파일의 Object Storage 버킷.
- IBM Analytics Engine 서버리스 인스턴스. Spark 워크로드가 배치될 때마다 요청 시 이 인스턴스에 컴퓨팅과 메모리 리소스가 할당됩니다. 애플리케이션이 실행 중 상태가 아닌 경우 컴퓨팅 자원이 인스턴스에 할당되지 않습니다. 가격은 인스턴스에서 소비한 실제 리소스 양을 기반으로 하고 초 단위로 청구됩니다.
- IBM Analytics Engine 인스턴스 및 제출된 애플리케이션에서 발생할 수 있는 문제를 해결하고 애플리케이션에서 생성된 출력을 확인할 수 있는 로깅 서비스. 로깅이 사용 가능한 상태에서 애플리케이션을 실행하면 로그가 인덱싱되는 IBM Log Analysis 서비스로 전달되어 생성된 모든 메시지에서 전체 텍스트 검색을 사용하고 특정 필드를 기반으로 손쉽게 조회할 수 있습니다.
시작하기 전에
Analytics Engine V3 CLI를 사용하려면 다음이 필요합니다.
- IBM Cloud® 계정
- IBM Cloud CLI를 설치합니다. CLI 다운로드 및 설치에 대한 지시사항은 IBM Cloud CLI 시작하기를 참조하십시오.
이제 Analytics Engine V3 CLI를 사용할 수 있습니다. 3단계로 시작하여 Spark 애플리케이션을 업로드 및 제출하기 전에 필요한 서비스를 설치하기 위해 1단계와 2단계의 지시사항을 따라야 합니다. 4단계는 로깅 인스턴스를 작성하고 로깅을 사용으로 설정하는 방법을 보여줍니다. 5단계는 Analytics Engine 인스턴스를 삭제하는 방법을 보여주며 이 단계는 선택사항입니다.
Cloud Object Storage 인스턴스 작성 및 인증 정보 검색
Analytics Engine 서버리스 CLI를 사용하여 IBM Cloud Object Storage 인스턴스를 작성하고 Cloud Object Storage 인증 정보(서비스 키)를 검색하십시오.
작성하는 Cloud Object Storage 인스턴스는 IBM Analytics Engine 인스턴스에서 Spark 히스토리 이벤트를 위한 인스턴스 홈 스토리지 및 애플리케이션에서 사용할 사용자 정의 라이브러리 또는 패키지로 필요합니다. 인스턴스 홈을 참조하십시오.
Cloud Object Storage에 저장되고 애플리케이션에서 참조되는 사용자 정의 패키지가 있는 라이브러리 세트를 작성하는 방법에 대한 자세한 정보는 라이브러리 세트 사용을 참조하십시오.
-
IBM Cloud® 계정을 사용하여 IBM Cloud®에 로그인하십시오.
- 조치
- 입력:
ibmcloud api <URL> ibmcloud login- 예
- 입력:
ibmcloud api https://cloud.ibm.com ibmcloud login -
리소스 그룹을 선택하십시오. 계정에 대한 리소스 그룹 목록을 가져오고 IBM Analytics Engine 서버리스 인스턴스를 작성할 항목을 선택하십시오.
- 조치
- 입력:
ibmcloud target -g RESOURCE_GROUP_NAME매개변수 값:
- RESOURCE_GROUP_NAME: 서버리스 인스턴스가 상주하는 리소스 그룹의 이름
- 예
- 입력:
ibmcloud resource groups ibmcloud target -g default -
IBM Cloud Object Storage 서비스를 설치한 후 Analytics Engine V3 CLI를 설치하십시오.
- 조치
- 입력:
ibmcloud plugin install cloud-object-storage- 조치
- 입력:
ibmcloud plugin install analytics-engine-v3 -
Cloud Object Storage 인스턴스를 작성하십시오.
- 조치
- 입력:
ibmcloud resource service-instance-create INSTANCE_NAME cloud-object-storage PLAN global매개변수 값:
- INSTANCE_NAME: 선택한 이름
- PLAN: 인스턴스를 작성할 때 사용할 Cloud Object Storage 플랜
- 예
- 입력:
ibmcloud resource service-instance-create test-cos-object cloud-object-storage standard global- 응답
- 예제는 다음을 리턴합니다.
Service instance test-cos-object was created. Name: test-cos-object ID: crn:v1:bluemix:public:cloud-object-storage:global:a/867d444f64594fd68c7ebf4baf8f6c90:ebad3176-8a1a-41f2-a803-217621bf6309:: GUID: ebad3176-8a1a-41f2-a803-217621bf6309 Location: global State: active Type: service_instance Sub Type: Allow Cleanup: false Locked: false Created at: 2021-12-27T07:57:56Z Updated at: 2021-12-27T07:57:58Z Last Operation: Status create succeeded Message Completed create instance operation -
이전 단계에서 만든 Cloud Object Storage 작성 호출의 응답에서 ID 값을 복사하여 CRN을 구성하십시오.
- 조치
- 입력:
ibmcloud cos config crn Resource Instance ID CRN: ID매개변수 값:
- ID: Cloud Object Storage 작성 호출의 응답에 있는 ID 값
- 예
- 입력:
ibmcloud cos config crn Resource Instance ID CRN: crn:v1:bluemix:public:cloud-object-storage:global:a/867d444f64594fd68c7ebf4baf8f6c90:ebad3176-8a1a-41f2-a803-217621bf6309:: -
Cloud Object Storage 버킷을 작성하십시오.
- 조치
- 입력:
ibmcloud cos bucket-create --bucket BUCKET_NAME [--class CLASS_NAME] [--ibm-service-instance-id ID] [--region REGION] [--output FORMAT]매개변수 값:
- BUCKET_NAME: 원하는 이름
- ID: Cloud Object Storage 작성 호출의 응답에 있는 GUID 값
- REGION: Cloud Object Storage 인스턴스가 작성된 IBM Cloud 지역
- FORMAT: 출력 형식은 JSON 또는 텍스트일 수 있습니다.
- 예
- 입력:
ibmcloud cos bucket-create --bucket test-cos-storage-bucket --region us-south --ibm-service-instance-id ebad3176-8a1a-41f2-a803-217621bf6309 --output json -
Cloud Object Storage 서비스 키를 작성하십시오.
- 조치
- 입력:
ibmcloud resource service-key-create NAME [ROLE_NAME] ( --instance-id SERVICE_INSTANCE_ID | --instance-name SERVICE_INSTANCE_NAME | --alias-id SERVICE_ALIAS_ID | --alias-name SERVICE_ALIAS_NAME) [--service-id SERVICE_ID] [-p, --parameters @JSON_FILE|JSON_TEXT] [-g RESOURCE_GROUP] [--service-endpoint SERVICE_ENDPOINT_TYPE] [--output FORMAT] [-f, --force] [-q, --quiet]Parameter values: - NAME: Any name of your choice - [ROLE_NAME]: This parameter is optional. The access role, for example, `Writer` or `Reader` - SERVICE_INSTANCE_ID: The value of GUID from the response the of Cloud Object Storage creation call - SERVICE_INSTANCE_NAME: The value of NAME from the response the of Cloud Object Storage creation call - JSON_TEXT: The authentication to access Cloud Object Storage. Currently only HMAC keys are supported.- 예
- 입력:
ibmcloud resource service-key-create test-service-key-cos-bucket Writer --instance-name test-cos-object --parameters '{"HMAC":true}'- 응답
- 예제는 다음을 리턴합니다.
Creating service key of service instance test-cos-object under account Test OK Service key crn:v1:bluemix:public:cloud-object-storage:global:a/183**93b485e:9ee135f9-4667-4797-8478-b20**ce-key:21a310e1-bbd6-**bf1f4 was created. Name: test-service-key-cos-bucket ID: crn:v1:bluemix:public:cloud-object-** Created At: Mon Dec 27 12:52:49 UTC 2021 State: active Credentials: apikey: 3a4Ncm**o-WJGFaEzwfY cos_hmac_keys: access_key_id: 21a31**f1f4 secret_access_key: c5a23**b6792d3e0a6c endpoints: https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints iam_apikey_description: Auto-generated for key crn:v1:bluemix:public:cloud-object-storage:global:a/1836f778**c93b485e:9ee**8478-b2019a4b4e20:resource-key:21a3**05a9bf1f4 iam_apikey_name: test-service-key-cos-bucket iam_role_crn: crn:v1:bluemix:public:iam::::serviceRole:Writer iam_serviceid_crn: crn:v1:bluemix:public:iam-identity::a/1836f77885e521c5ab2523aac93b485e::serviceid:ServiceId-702ca222-3615-464c-92d3-1849c03170cc resource_instance_id: crn:v1:bluemix:public:cloud-object-storage:global:a/1836f7**3b485e:9ee135f9-4667-479**4e20::
Analytics Engine 서버리스 인스턴스 작성
CLI를 사용하여 서버리스 Analytics Engine 인스턴스를 작성하십시오.
-
Analytics Engine 서비스 인스턴스를 작성하십시오.
- 조치
- 입력:
ibmcloud resource service-instance-create INSTANCE_NAME ibmanalyticsengine standard-serverless-spark us-south -p @provision.json매개변수 값:
- INSTANCE_NAME: 선택한 이름
- @provision.json: JSON 파일을 다음 예제와 같이 구성합니다. Cloud Object Storage 서비스 키 작성 호출의 응답에서 액세스 및 시크릿 키를 사용하십시오.
- provision.json 파일의 예제
- 샘플 JSON 파일:
{ "default_runtime": { "spark_version": "3.4" }, "instance_home": { "region": "us-south", "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "hmac_access_key": "<your-hmac-access-key>", "hmac_secret_key": "<your-hmac-secret-key>"} }- 예
- 입력:
ibmcloud resource service-instance-create test-ae-service ibmanalyticsengine standard-serverless-spark us-south -p @ae_provision.json- 응답
-
예제는 다음을 리턴합니다.
텍스트 자원 그룹에서 서비스 인스턴스 test-ae-service 작성 중계정 -> ... OK
Service instance test-ae-service was created. Name: test-ae-service ID: crn:v1:bluemix:public:ibmanalyticsengine:us-south:a/183aac93b485e:181eabe1-709781b:: GUID: 181ea9ee01b Location: us-south State: provisioning Type: service_instance Sub Type: Service Endpoints: public Allow Cleanup: false Locked: false Created at: 2022-01-03T08:40:25Z Updated at: 2022-01-03T08:40:26Z Last Operation: Status create in progress Message Started create instance operation
-
Analytics Engine 서비스의 상태를 확인하십시오.
- 조치
- 입력:
ibmcloud ae-v3 instance show –id INSTANCE_ID매개변수 값:
- INSTANCE_ID: Analytics Engine 인스턴스 작성 호출의 응답에 있는 GUID 값
- 예
- 입력:
ibmcloud ae-v3 instance show –id 181ea**9ee01b- 응답
- 예제는 다음을 리턴합니다.
{ "default_runtime": { "spark_version": "3.4" }, "id": "181ea**9ee01b ", "instance_home": { "bucket": "do-not-delete-ae-bucket-e96**5d-b7**a82", "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "hmac_access_key": "**", "hmac_secret_key": "**", "provider": "ibm-cos", "region": "us-south", "type": "objectstore" }, "state": "active", "state_change_time": "**" }Analytics Engine 서비스가 활성 상태인 경우에만 Spark 애플리케이션을 제출하십시오.
Spark 애플리케이션 업로드 및 제출
애플리케이션 파일을 Cloud Object Storage에 업로드하고 Spark 애플리케이션을 제출하십시오.
이 학습서에서는 Analytics Engine 인스턴스에서 인스턴스 홈으로 사용되는 Cloud Object Storage 인스턴스 버킷에 Spark 애플리케이션을 추가하는 방법을 설명합니다. 애플리케이션을 실행하는 데 사용하는 파일(예: 애플리케이션 파일 자체, 데이터 파일, 분석 결과)에서 인스턴스 관련 파일을 분리하려는 경우 동일한 Cloud Object Storage 인스턴스에서 다른 버켓을 사용하거나 다른 Cloud Object Storage 인스턴스를 사용합니다.
-
Spark 애플리케이션 파일을 업로드하십시오.
- 조치
- 입력:
ibmcloud cos upload --bucket BUCKET_NAME --key KEY --file PATH [--concurrency VALUE] [--max-upload-parts PARTS] [--part-size SIZE] [--leave-parts-on-errors] [--cache-control CACHING_DIRECTIVES] [--content-disposition DIRECTIVES] [--content-encoding CONTENT_ENCODING] [--content-language LANGUAGE] [--content-length SIZE] [--content-md5 MD5] [--content-type MIME] [--metadata STRUCTURE] [--region REGION] [--output FORMAT] [--json]매개변수 값:
- BUCKET_NAME: 버켓이 작성될 때 사용되는 버켓의 이름
- KEY: 애플리케이션 파일 이름
- PATH: Spark 애플리케이션 파일의 파일 이름 및 경로
- 예
- 입력:
ibmcloud cos upload --bucket test-cos-storage-bucket --key test-math.py --file test-math.py- 샘플 애플리케이션 파일
test-math.py샘플:from pyspark.sql import SparkSession import time import random import cmath
def init_spark (): spark = SparkSession.builder.appName("test-math").getOrCreate() sc = spark.sparkContext 반환 스파크,sc
def transformFunc(x): cmath.sqrt(x)+cmath.log(x)+cmath.log10(x) 을 리턴합니다.
def main(): spark, sc = init_spark () (0, 2) 범위의 i에 대해 partitions=[10,5] : 데이터 = 범위 (1,20000000) v0 = sc.parallelize(데이터, [파티션i]) v1 = v0.map(transformFunc) print(fv1.count is {v1.count()}. Done") time.sleep(60)
if name =='main': main()
{: codeblock} -
Analytics Engine 서비스의 상태를 확인하십시오.
- 조치
- 입력:
ibmcloud ae-v3 instance show –id INSTANCE ID매개변수 값:
- INSTANCE_ID: Analytics Engine 인스턴스 작성 호출의 응답에 있는 GUID 값
- 예
- 입력:
ibmcloud ae-v3 instance show –id 181ea**9ee01b- 응답
- 예제는 다음을 리턴합니다.
{ "default_runtime": { "spark_version": "3.4" }, "id": "181ea**9ee01b ", "instance_home": { "bucket": "do-not-delete-ae-bucket-e96**5d-b7**a82", "endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "hmac_access_key": "**", "hmac_secret_key": "**", "provider": "ibm-cos", "region": "us-south", "type": "objectstore" }, "state": "active", "state_change_time": "**" }Analytics Engine 서비스가 활성 상태인 경우에만 Spark 애플리케이션을 제출하십시오.
-
Spark 애플리케이션 제출:
- 조치
- 입력:
ibmcloud ae-v3 spark-app submit --instance-id INSTANCE_ID -–app APPLICATION_PATH매개변수 값:
- INSTANCE_ID: Analytics Engine 인스턴스 작성 호출의 응답에 있는 GUID 값
- APPLICATION_PATH: Spark 애플리케이션 파일의 파일 이름 및 경로
- IOS및 Linux 의 예
- 입력:
ibmcloud ae-v3 spark-app submit --instance-id 181ea**9ee01b --app "cos://test-cos-storage-bucket.mycos/test-math.py" --conf '{"spark.hadoop.fs.cos.mycos.endpoint": "https://s3.direct.us-south.cloud-object-storage.appdomain.cloud", "spark.hadoop.fs.cos.mycos.access.key": "21**bf1f4", "spark.hadoop.fs.cos.mycos.secret.key": "c5a**d3e0a6c"}'- Windows의 예 (Powershell이 아님). Windows에서는 따옴표를 이스케이프해야 합니다.
- 입력:
ibmcloud ae-v3 spark-app submit --instance-id myinstanceid --app "cos://matrix.mycos/test-math.py" --conf "{\"spark.hadoop.fs.cos.mycos.endpoint\": \"https://s3.direct.us-south.cloud-object-storage.appdomain.cloud\", \"spark.hadoop.fs.cos.mycos.access.key\": \"mykey\", \"spark.hadoop.fs.cos.mycos.secret.key\": \"mysecret\"}"- 응답
- 예제는 다음을 리턴합니다.
id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b state accepted -
제출한 애플리케이션의 세부사항 또는 상태를 확인하십시오.
- 조치
- 입력:
ibmcloud ae-v3 spark-app show --instance-id INSTANCE_ID --app-id APPLICATION_ID매개변수 값:
- INSTANCE_ID: Analytics Engine 작성 호출의 응답에 있는 GUID 값
- APPLICATION_ID: spark-app 제출 호출의 응답에 있는 id 값
- 예
- 입력:
ibmcloud ae-v3 spark-app show --instance-id 181ea**9ee01b --app-id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b- 응답
- 예제는 다음을 리턴합니다.
application_details <Nested Object> id 7f7096d2-5c44-4d9a-ac01-b904c7611b7b state finished start_time 2022-03-01T12:58:54.000Z finish_time 2022-03-01T13:09:14.000Z애플리케이션을 완료하는 데 2-5분이 소요될 수 있습니다.
로깅 서비스를 작성하여 로그 보기
Analytics Engine CLI를 사용하여 IBM Analytics Engine 문제 해결에 도움이 되도록 로깅을 사용으로 설정할 수 있습니다. 로깅을 사용으로 설정하기 전에 로그가 전달되는 IBM Log Analysis 서비스 인스턴스를 작성해야 합니다.
-
로깅 인스턴스를 작성하십시오.
- 조치
- 입력:
ibmcloud resource service-instance-create NAME logdna SERVICE_PLAN_NAME LOCATION매개변수 값:
- NAME: IBM Log Analysis 서비스 인스턴스에 대해 선택한 이름
- SERVICE_PLAN_NAME: 서비스 플랜의 이름. 올바른 값은 서비스 플랜을 참조하십시오.
- LOCATION: 로그를 IBM Log Analysis로 전송하기 위해 Analytics Engine이 사용으로 설정된 위치. 올바른 위치는 컴퓨팅 서버리스 서비스를 참조하십시오.
- 예
- 입력:
ibmcloud resource service-instance-create my-log-instance logdna 7-day us-south{: codeblock}로깅 서비스가 작성되면 {{site.data.keyword.Bluemix_short}}에 로그인하고 로깅 서비스 인스턴스를 검색한 후 모니터링 대시보드를 클릭할 수 있습니다. 드라이버 및 실행 프로그램 로그뿐만 아니라 Spark 애플리케이션의 모든 애플리케이션 로그도 볼 수 있습니다.
application_id또는instance_id을(를) 사용하여 검색하십시오. -
플랫폼 로깅 사용:
{{site.data.keyword.iae_full_notm}} 플랫폼 로그를 보려면 {{site.data.keyword.cloud_notm}}에서 관찰 가능성 대시보드를 사용하여 플랫폼 로깅을 구성해야 합니다. 관찰 가능성 대시보드를 통한 로깅을 사용으로 설정하기 위해 수행해야 하는 단계는 관찰 가능성 대시보드를 통해 플랫폼 로그 구성을 참조하십시오.
-
Analytics Engine에 대한 로깅을 사용으로 설정하십시오.
- 조치
- 입력:
ibmcloud analytics-engine-v3 log-config COMMAND [arguments...] [command options]매개변수 값:
analytics-engine-v3:ae-v3을(를) 사용하여 v3 CLI 명령을 사용합니다.- COMMAND:
update명령을 사용하여 로깅을 사용으로 설정합니다.
- 예
- 입력:
ibmcloud ae-v3 log-config update --instance-id 181ea**9ee01b --enable --output json
Analytics Engine 인스턴스 삭제
예를 들어, 더 많은 워크로드를 처리하기 위해 완전히 다른 구성의 인스턴스가 필요한 경우에는 CLI를 사용하여 인스턴스를 삭제할 수 있습니다.
원하는 만큼 Analytics Engine 인스턴스를 유지하고 필요에 따라 동일한 인스턴스에 대해 Spark 애플리케이션을 제출할 수 있습니다.
Analytics Engine 인스턴스를 삭제하려는 경우:
- 조치
- 입력:
ibmcloud resource service-instance-delete NAME|ID [-g RESOURCE_GROUP] -f
매개변수 값:
- NAME | ID: Analytics Engine 인스턴스 작성 호출의 응답에 있는 이름 또는 GUID의 값
- RESOURCE_GROUP: 선택적 매개변수. 서버리스 인스턴스가 있는 리소스 그룹의 이름
- 예
- 입력:
ibmcloud resource service-instance-delete MyServiceInstance -g default -f
자세한 정보
IBM Analytics Engine 서버리스 CLI 참조를 확인하십시오.