

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 지속적으로 스트리밍되는 데이터를 처리하기 위한 스트리밍 작업
<a name="jobs-streaming"></a>

EMR Serverless의 스트리밍 작업은 스트리밍 데이터를 거의 실시간으로 분석 및 처리할 수 있는 작업 모드입니다. 이러한 장기 실행 작업은 스트리밍 데이터를 폴링하고 데이터가 도착하면 지속적으로 결과를 처리합니다. 스트리밍 작업은 실시간에 가까운 분석, 사기 탐지 및 추천 엔진과 같이 실시간 데이터 처리가 필요한 태스크에 가장 적합합니다. EMR Serverless 스트리밍 작업은 기본 제공 작업 복원력, 실시간 모니터링, 향상된 로그 관리, 스트리밍 커넥터와의 통합과 같은 최적화를 제공합니다.

다음은 스트리밍 작업의 몇 가지 사용 사례입니다.
+ **실시간에 가까운 분석** - Amazon EMR Serverless에서 스트리밍 작업을 사용하면 스트리밍 데이터를 거의 실시간으로 처리할 수 있으므로, 로그 데이터, 센서 데이터 또는 클릭스트림 데이터와 같은 연속 데이터 스트림에 대한 실시간 분석을 수행하여 인사이트를 도출하고 최신 정보를 기반으로 시기 적절한 결정을 내릴 수 있습니다.
+ **사기 탐지** - 데이터 스트림을 분석하고 의심스러운 패턴 또는 이상이 발생할 때 이를 식별하는 경우 스트리밍 작업을 사용하여 금융 거래, 신용카드 작업 또는 온라인 활동에서 실시간에 가까운 사기 탐지를 실행할 수 있습니다.
+ **추천 엔진** - 스트리밍 작업에서는 사용자 활동 데이터를 처리하고 추천 모델을 업데이트할 수 있습니다. 이를 통해 행동과 선호도에 따라 개인화된 실시간 추천이 제공됩니다.
+ **소셜 미디어 분석** - 스트리밍 작업에서 트윗, 게시물, 댓글 등의 소셜 미디어 데이터를 처리할 수 있으므로, 조직은 추세를 모니터링하고, 감정을 분석하며, 브랜드 평판을 실시간에 가깝게 관리할 수 있습니다.
+ **사물 인터넷(IoT) 분석** - 스트리밍 작업에서 IoT 디바이스, 센서 및 연결된 기계의 고속 데이터 스트림을 처리하고 분석할 수 있으므로 이상 탐지, 예측 유지 보수 및 기타 IoT 분석 사용 사례를 실행할 수 있습니다.
+ **클릭스트림 분석** - 스트리밍 작업은 웹 사이트 또는 모바일 애플리케이션의 클릭스트림 데이터를 처리 및 분석할 수 있습니다. 이러한 데이터를 사용하는 비즈니스는 분석을 실행하여 사용자 행동에 대해 자세히 알아보고, 사용자 경험을 개인화하며, 마케팅 캠페인을 최적화할 수 있습니다.
+ **로그 모니터링 및 분석** - 스트리밍 작업은 서버, 애플리케이션 또는 네트워크 디바이스의 로그 데이터를 처리할 수도 있습니다. 이를 통해 이상 탐지, 문제 해결, 시스템 상태 및 성능이 제공됩니다.

**주요 이점**

EMR Serverless에서 스트리밍 작업은 다음 요소를 조합한 *작업 복원력*을 자동으로 제공합니다.
+ **자동 재시도** - EMR Serverless는 사용자의 수동 입력 없이 실패한 모든 작업을 자동으로 재시도합니다.
+ **가용 영역(AZ) 복원력** - 원래 AZ에 문제가 발생하는 경우 EMR Serverless는 스트리밍 작업을 정상 AZ로 자동 전환합니다.
+ **로그 관리:**
  + **로그 교체** - 보다 효율적인 디스크 스토리지 관리를 위해 EMR Serverless는 장기 스트리밍 작업에 대한 로그를 정기적으로 교체합니다. 이렇게 하면 모든 디스크 공간을 소비할 수 있는 로그 누적을 방지합니다.
  + **로그 압축** - 관리형 지속성으로 로그 파일을 효율적으로 관리하고 최적화할 수 있습니다. 또한 압축을 통해 관리형 Spark 기록 서버를 사용하는 경우 디버그 환경을 개선합니다.

**지원되는 데이터 소스 및 데이터 싱크**

EMR Serverless는 다양한 입력 데이터 소스 및 출력 데이터 싱크와 함께 작동합니다.
+ 지원되는 입력 데이터 소스 – Amazon Kinesis Data Streams, Amazon Managed Streaming for Apache Kafka, 자체 관리형 Apache Kafka 클러스터. 기본적으로 Amazon EMR 릴리스 7.1.0 이상에는 [Amazon Kinesis Data Streams 커넥터](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-structured-streaming-kinesis.html)가 포함되어 있으므로 추가 패키지를 빌드하거나 다운로드하지 않아도 됩니다.
+ 지원되는 출력 데이터 싱크 - AWS Glue Data Catalog 테이블, Amazon S3, Amazon Redshift, MySQL, PostgreSQL Oracle, Oracle, Microsoft SQL, Apache Iceberg, Delta Lake 및 Apache Hudi.

## 고려 사항 및 제한 사항
<a name="jobs-spark-streaming-considerations"></a>

스트리밍 작업을 사용하는 경우 다음 고려 사항 및 제한 사항에 유의합니다.
+ 스트리밍 작업은 [Amazon EMR 릴리스 7.1.0 이상](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-710-release.html)에서 지원됩니다.
+ EMR Serverless에서는 스트리밍 작업이 장기간 실행될 것으로 예상하므로, 작업의 런타임을 제한하도록 실행 제한 시간을 설정할 수 없습니다.
+ 스트리밍 작업은 [구조화된 스트리밍 프레임워크](https://spark.apache.org/streaming/)에 빌드된 Spark 엔진과만 호환됩니다.
+ EMR Serverless는 스트리밍 작업을 무기한 재시도하며, 사용자는 최대 시도 횟수를 사용자 지정할 수 없습니다. 실패한 시도 횟수가 시간당 기간에 설정된 임계치를 초과하면 작업 재시도를 중지하기 위해 스래시 방지가 자동으로 포함됩니다. 기본 임계치는 1시간 동안 실패한 시도 5회입니다. 이 임계치를 1\$110회 시도로 구성할 수 있습니다. 자세한 내용은 [작업 복원력](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/SECTION-jobs-resiliency.xml.html)을 참조하세요.
+ 스트리밍 작업에는 런타임 상태 및 진행 상황을 저장하는 체크포인트가 있으므로, EMR Serverless는 최신 체크포인트에서 스트리밍 작업을 재개할 수 있습니다. 자세한 내용은 Apache Spark 설명서의 [Recovering from failures with Checkpointing](https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#recovering-from-failures-with-checkpointing)을 참조하세요.

# 스트리밍 작업 시작하기
<a name="jobs-spark-streaming-getting-started"></a>

스트리밍 작업을 시작하는 방법을 알아보려면 다음 지침을 참조하세요.

1. [Amazon EMR Serverless 시작하기](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/getting-started.html)를 수행하여 애플리케이션을 생성합니다. 애플리케이션이 [Amazon EMR 릴리스 7.1.0](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-710-release.html) 이상을 실행해야 합니다.

1. 애플리케이션이 준비되면 다음 AWS CLI 예제와 마찬가지로 `mode` 파라미터를 로 설정`STREAMING`하여 스트리밍 작업을 제출합니다.

   ```
   aws emr-serverless start-job-run \
   --application-id <APPPLICATION_ID> \
   --execution-role-arn <JOB_EXECUTION_ROLE> \
   --mode 'STREAMING' \
   --job-driver '{
       "sparkSubmit": {
           "entryPoint": "s3://<streaming script>",
           "entryPointArguments": ["s3://<DOC-EXAMPLE-BUCKET-OUTPUT>/output"],
           "sparkSubmitParameters": "--conf spark.executor.cores=4
               --conf spark.executor.memory=16g 
               --conf spark.driver.cores=4
               --conf spark.driver.memory=16g 
               --conf spark.executor.instances=3"
       }
   }'
   ```

# 지원되는 스트리밍 커넥터
<a name="jobs-spark-streaming-connectors"></a>

스트리밍 커넥터는 스트리밍 소스에서 데이터를 쉽게 읽을 수 있고 스트리밍 싱크에 데이터를 쓸 수도 있습니다.

다음은 지원되는 스트리밍 커넥터입니다.

**Amazon Kinesis Data Streams 커넥터**

Apache Spark용 [Amazon Kinesis Data Streams 커넥터](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-structured-streaming-kinesis.html)를 사용하면 Amazon Kinesis Data Streams에서 데이터를 소비하고 쓰는 스트리밍 애플리케이션 및 파이프라인을 빌드할 수 있습니다. 커넥터는 샤드당 최대 2MB/초의 전용 읽기 처리량 속도로 향상된 팬아웃 소비를 지원합니다. 기본적으로 Amazon EMR Serverless 7.1.0 이상에는 커넥터가 포함되어 있으므로, 추가 패키지를 빌드하거나 다운로드하지 않아도 됩니다. 커넥터에 대한 자세한 내용은 GitHub의 [spark-sql-kinesis-connector](https://github.com/awslabs/spark-sql-kinesis-connector/) 페이지를 참조하세요.

다음은 Kinesis Data Streams 커넥터 종속성을 사용하여 작업 실행을 시작하는 방법에 대한 예제입니다.

```
aws emr-serverless start-job-run \
--application-id <APPLICATION_ID> \
--execution-role-arn <JOB_EXECUTION_ROLE> \
--mode 'STREAMING' \
--job-driver '{
    "sparkSubmit": {
        "entryPoint": "s3://<Kinesis-streaming-script>",
        "entryPointArguments": ["s3://<DOC-EXAMPLE-BUCKET-OUTPUT>/output"],
        "sparkSubmitParameters": "--conf spark.executor.cores=4
                --conf spark.executor.memory=16g 
                --conf spark.driver.cores=4
                --conf spark.driver.memory=16g 
                --conf spark.executor.instances=3
                --jars /usr/share/aws/kinesis/spark-sql-kinesis/lib/spark-streaming-sql-kinesis-connector.jar"
    }
}'
```

Kinesis Data Streams에 연결하려면 VPC 액세스로 EMR Serverless 애플리케이션을 구성하고 VPC 엔드포인트를 사용하여 프라이빗 액세스를 허용하거나 NAT 게이트웨이를 사용하여 퍼블릭 액세스를 얻어야 합니다. 자세한 내용은 [VPC 액세스 구성](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/vpc-access.html)을 참조하세요. 또한 필요한 데이터 스트림에 액세스하는 데 필요한 읽기 및 쓰기 권한이 작업 런타임 역할에 있는지 확인해야 합니다. 작업 런타임 역할을 구성하는 방법에 대해 자세히 알아보려면 [Amazon EMR Serverless에 대한 작업 런타임 역할](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)을 참조하세요. 필요한 모든 권한의 전체 목록은 GitHub의 [spark-sql-kinesis-connector](https://github.com/awslabs/spark-sql-kinesis-connector/?tab=readme-ov-file#how-to-use-it) 페이지를 참조하세요.

**Apache Kafka 커넥터**

Spark의 구조화된 스트리밍에 대한 Apache Kafka 커넥터는 Spark 커뮤니티의 오픈 소스 커넥터이며, Maven 리포지토리에서 사용할 수 있습니다. 이 커넥터를 사용하면 Spark의 구조화된 스트리밍 애플리케이션이 자체 관리형 Apache Kafka 및 Amazon Managed Streaming for Apache Kafka에서 데이터를 읽고 쓸 수 있습니다. 커넥터에 대한 자세한 내용은 Apache Spark 설명서의 [Structured Streaming \$1 Kafka Integration Guide](https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html)를 참조하세요.

다음 예제에서는 작업 실행 요청에 Kafka 커넥터를 포함하는 방법을 보여줍니다.

```
aws emr-serverless start-job-run \
--application-id <APPLICATION_ID> \
--execution-role-arn <JOB_EXECUTION_ROLE> \
--mode 'STREAMING' \
--job-driver '{
    "sparkSubmit": {
        "entryPoint": "s3://<Kafka-streaming-script>",
        "entryPointArguments": ["s3://<DOC-EXAMPLE-BUCKET-OUTPUT>/output"],
        "sparkSubmitParameters": "--conf spark.executor.cores=4
                --conf spark.executor.memory=16g 
                --conf spark.driver.cores=4
                --conf spark.driver.memory=16g 
                --conf spark.executor.instances=3
                --packages org.apache.spark:spark-sql-kafka-0-10_2.12:<KAFKA_CONNECTOR_VERSION>"
    }
}'
```

Apache Kafka 커넥터 버전은 EMR Serverless 릴리스 버전 및 해당 Spark 버전에 따라 달라집니다. 올바른 Kafka 버전을 찾으려면 [Structured Streaming \$1 Kafka Integration Guide](https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html)를 참조하세요.

Amazon Managed Streaming for Apache Kafka를 IAM 인증과 함께 사용하려면 Kafka 커넥터가 IAM을 사용하여 Amazon MSK에 연결되도록 다른 종속 항목을 포함합니다. 자세한 내용은 GitHub의 [aws-msk-iam-auth repository](https://github.com/aws/aws-msk-iam-auth)를 참조하세요. 또한 작업 런타임 역할에 필요한 IAM 권한이 있는지 확인해야 합니다. 다음 예제에서는 IAM 인증과 함께 커넥터를 사용하는 방법을 보여줍니다.

```
aws emr-serverless start-job-run \
--application-id <APPLICATION_ID> \
--execution-role-arn <JOB_EXECUTION_ROLE> \
--mode 'STREAMING' \
--job-driver '{
    "sparkSubmit": {
        "entryPoint": "s3://<Kafka-streaming-script>",
        "entryPointArguments": ["s3://<DOC-EXAMPLE-BUCKET-OUTPUT>/output"],
        "sparkSubmitParameters": "--conf spark.executor.cores=4
                --conf spark.executor.memory=16g 
                --conf spark.driver.cores=4
                --conf spark.driver.memory=16g 
                --conf spark.executor.instances=3
                --packages org.apache.spark:spark-sql-kafka-0-10_2.12:<KAFKA_CONNECTOR_VERSION>,software.amazon.msk:aws-msk-iam-auth:<MSK_IAM_LIB_VERSION>"
    }
}'
```

Amazon MSK의 Kafka 커넥터 및 IAM 인증 라이브러리를 사용하려면 VPC 액세스를 통해 EMR Serverless 애플리케이션을 구성합니다. 서브넷에는 인터넷 액세스 권한이 있어야 하며, NAT Gateway를 사용하여 Maven 종속 항목에 액세스해야 합니다. 자세한 내용은 [VPC 액세스 구성](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/vpc-access.html)을 참조하세요. Kafka 클러스터에 액세스하려면 서브넷에 네트워크 연결이 있어야 합니다. 이는 Kafka 클러스터가 자체 관리형인지 여부에 상관없이 Amazon Managed Streaming for Apache Kafka를 사용하는 경우에도 적용됩니다.

# 스트리밍 작업 로그 관리
<a name="jobs-spark-streaming-log-management"></a>

스트리밍 작업은 Spark 애플리케이션 로그 및 이벤트 로그의 로그 교체와 Spark 이벤트 로그의 로그 압축을 지원합니다. 이 경우 리소스를 효과적으로 관리하는 데 도움이 됩니다.

**로그 교체**

스트리밍 작업은 Spark 애플리케이션 로그 및 이벤트 로그에 대한 로그 교체를 지원합니다. 로그 교체는 장기 스트리밍 작업에서 사용 가능한 모든 디스크 공간을 차지할 수 있는 대형 로그 파일 생성을 방지합니다. 로그 교체를 사용하면 디스크 스토리지를 저장하고 디스크 공간 부족으로 인한 작업 실패를 방지할 수 있습니다. 자세한 정보를 알아보려면 [로그 교체](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/rotating-logs.html)를 참조하세요.

**로그 압축**

스트리밍 작업은 관리형 로깅이 사용 가능한 경우 항상 Spark 이벤트 로그에 대한 로그 압축도 지원합니다. 관리형 로깅에 대한 자세한 내용은 [관리형 스토리지를 사용하는 로깅](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/logging.html#jobs-log-storage-managed-storage)을 참조하세요. 스트리밍 작업은 장기간 실행될 수 있으며, 이벤트 데이터의 양은 시간이 지남에 따라 누적되어 로그 파일 크기가 크게 증가할 수 있습니다. Spark 기록 서버는 이러한 이벤트를 읽고 Spark 애플리케이션 UI의 메모리에 로드합니다. 이 프로세스는 특히 Amazon S3에 저장된 이벤트 로그가 매우 큰 경우 지연 시간과 비용을 높일 수 있습니다.

로그 압축은 이벤트 로그 크기를 줄이므로, Spark 기록 서버는 언제든지 1GB를 초과하는 이벤트 로그를 로드하지 않아도 됩니다. 자세한 내용은 Apache Spark 설명서의 [Monitoring and Instrumentation](https://spark.apache.org/docs/latest/monitoring.html)을 참조하세요.