Big Data(32)
-
[Spark] history server 장애
새벽에 갑자기 namenode가 내려갔다는 장애 알림 메시지를 받게 됨!!! 일단 일어나서 부랴부랴 네임노드를 다시 재 시작해주고.. (다행히 ha 설정이 되어 있어서 서비스 상에서는 문제가 없었음) 자세히 왜 내려 갔는지 문제점을 파악하기 시작!! 일단 문제가 발생한 원인은 아래의 그래프에서 찾을 수 있었다. 바로바로 과도한 cpu 사용으로 인한 namenode shutdown 저렇게 과도하게 cpu를 먹고 있는게 과연 무엇을까 서버 접속해서 top를 쳐본 결과 spark history server에서 2000% 넘게 cpu를 사용하고 있는 걸 확인했다. 왜 history server가 2000%를 먹고 있는지 확인해 보기 위해 hdfs에 있는 history log list를 확인하려고 접근하려는 순..
2025.04.14 -
airflow hdfs provider 설치하기
airflow에서 hdfs를 깔끔하게 접근하는 방법이 없을까 고민하다가 airflow provider란 걸 발견했다.airflow provider는 aws나 azure, google cloud 등을 airflow에서 좀 더 쉽게 연결해 줄 수 있도록 제공해주는 plugin이라고 생각하면 쉬울 것 같다. 일단 내가 설치한 airflow 환경에서 hdfs provider가 있는지 여부부터 살펴 보자.airflow UI에서 admin 클릭하면 현재 airflow에서 제공되는 provider의 목록들이 나타난다. 불행하게도 hdfs 관련된 provider는 보이지 않는다.그럼 이제 hdfs provider를 직접 설치해 보도록 하자. 설치를 하기 위해서는 airflow Docker 이미지의 customize..
2024.08.21 -
spark 모르는 옵션 정리
spark.task.maxFailurestask의 실패 최대 횟수 (default 4)spark.stage.maxConsecutiveAttempts노드 scale 조정, 트리거로 인한 노드 종료 등의 이유로 stage가 실패하게 되면 설정된 count 만큼 허용한다.예를 들어 작업 중 어떤 한 노드를 강제 종료하게 되면 task 실패 횟수에 1이 추가되는게 아니라 maxCounsecutiveAttempts에 1이 추가가 된다. 설정된 값만큼의 실패 예외를 허용해 준다.spark.shuffle.file.buffershuffle 시 파일 출력 스트림 버퍼 크기 spark.sql.files.maxPartitionBytesinput partition의 크기를 설정한다. (default 128mb (1342177..
2024.06.21 -
tensorflow serving memory leak??
아래의 docker hub를 통해 tensorflow serving 이미지를 다운 받는다. https://hub.docker.com/layers/tensorflow/serving/2.14.1-gpu/images/sha256-cdae1c60c07d1ffc94ebc086e0f1a4d7f1ecc52f3fec558f1f7b506dfd4edce2?context=explore Docker hub.docker.com $> docker pull tensorflow/serving:2.14.1-gpu model은 dockerhub git에 있는 예제 프로그램 대로 실행해본다. 1. 우선은 git 받기 $> git clone https://github.com/tensorflow/serving 2. 환경 변수 정의하기 $> ..
2024.04.02 -
pod evicted 난 pod 일괄 삭제하기
evicted가 된 pod의 경우 계속 pod에 남아 있어서 k8s 화면에 빨간색으로 떠 있게 된다.. (이게 너무 싫음) 그래서 evicted된 pod를 모두 일괄 삭제하기로 했다. 우선 evicted된 원인 확인을 위해 evicted 된 pod의 describe를 log에 저장한다. kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl describe pods {} > evicted.log 해당 log 저장이 완료되었으면 이제 해당 pod들을 삭제해주자. k get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pods {}
2024.02.06 -
rdd mapPartitions와 foreachPartition 비교
쓰면서 늘 헷갈리는게 foreachPartition인 것 같다. 이게 무슨 용도로 있는 함수인가... 그래서 이번 기회에 mapPartitions와 foreachPartition을 비교해 보기로 했다. 아래와 같이 코드를 작성한다. num_rdd = sc.parallelize(range(100000), 10) num_rdd.getNumPartitions() getNumPartitions를 찍어보면 10개가 찍히는 걸 확인할 수 있다. 이제 map으로 돌릴 함수를 선언하자 def square(num_list): for num in num_list: yield num * num mapPartitions의 경우 yield 값을 넘겨주어야 iterate 동작을 할 수가 있다. 이제 이 함수를 mapPartiti..
2024.02.05