융무의 기술블로그
article thumbnail

Spark Streaming 관련해서 에러가 발생하였습니다. 

에러는 아래 포스팅과 관련 있습니다.

https://mjs1995.tistory.com/275

 

[Spark Streaming] py4j.protocol.Py4JJavaError: An error occurred while calling o121.start.: java.lang.IllegalStateException: Rpc

spark-submit 명령어를 실행시켰을 때 아래와 같은 에러가 발생했 습니다. py4j.protocol.Py4JJavaError: An error occurred while calling o121.start. : java.lang.IllegalStateException: RpcEnv has been stopped 이 에러는 Spark Streaming

mjs1995.tistory.com


spark-submit을 했을 때 아래와 같이 에러가 발생하여 Spark Job이 시작 못하였습니다.

TaskSchedulerImpl 경고 메시지는 초기 작업이 어떤 리소스도 받지 못했다는 것을 나타냅니다.

이는 일반적으로 클러스터가 충분한 자원을 가지고 있지 않거나, 현재 클러스터에서 사용 가능한 자원이 부족하여 발생합니다. 이 경우 클러스터 상태를 확인하고 필요에 따라 클러스터 리소스를 추가해야 할 수 있습니다.

WARN TaskSchedulerImpl:Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

다른 해결 방법

동적 할당 비활성화

에러 해결 방법중 하나는 dynamic resource allocation 비활성화해줍니다.

충분한 노드, 코어 및 메모리 리소스가 YARN에 사용 가능하다면, Spark는 스파크 워커를 생성하기 위해 동적 할당을 사용하며, 기본적으로 이 동적 할당이 활성화되어 있습니다.

제한된 리소스를 가진 작은 클러스터의 경우, 이 옵션을 비활성화하고 필요에 따라 리소스를 할당합니다.

spark-submit --conf spark.dynamicAllocation.enabled=false

혹은 코드에서 설정 가능 합니다.

conf = SparkConf().setAppName("SparkByExamples.com")
        .set("spark.shuffle.service.enabled", "false")
        .set("spark.dynamicAllocation.enabled", "false")

리소스를 명시적으로 할당

Python (PySpark)에서 최소한의 구성으로 사용하는 spark-submit 명령입니다.

spark-submit --deploy-mode cluster --master yarn \
        --driver-memory 3g --executor-memory 3g \
        --num-executors 2 --executor-cores 2 \
        --conf spark.dynamicAllocation.enabled=false \
        readcsv.py

scalar에서 최소한의 구성으로 사용하는 spark-submit 명령입니다.

spark-submit --deploy-mode cluster --master yarn \
        --driver-memory 3g --executor-memory 3g \
        --num-executors 2 --executor-cores 2 \
        --conf spark.dynamicAllocation.enabled=false \
        --jar application.jar \
        --class com.example.ReadCSV

해결 방법

워커노드 추가

spark 마스터노드에서 워커노드 할당입니다.

워커 노드는 2개가 있으며 각각 1 코어와 4 GiB입니다.

여기서 Spark Worker를 실행시켜 주는 명령어를 입력합니다.

spark-class 명령어는 spark/bin 경로에 위치한 Spark 스크립트의 클래스를 실행하는 데 사용됩니다.

org.apache.spark.deploy.worker.Worker 는 Spark worker를 시작하기 위한 클래스 이름이, spark://localhost:7077는 Spark master의 URL 주소입니다.

아래 명령어를 통해서 Spark worker가 로컬 머신에서 시작되고, Spark master에 등록됩니다.

spark-class org.apache.spark.deploy.worker.Worker spark://localhost:7077

8 코어와 15 GiB 메모리의 워커노드를 추가하였습니다.

기존의 TaskSchedulerImpl 났던 spark-submit 명령을 제출합니다.


Reference

https://sparkbyexamples.com/spark/spark-initial-job-has-not-accepted-any-resources-check-your-cluster-ui/

profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!