소개
실리콘 밸리에서 13년 이상 소프트웨어 엔지니어를 하고 있습니다.
현재는 실리콘 밸리 대기업 본사에서 빅데이터와 DevOps 관련일을 하는 엔지니어입니다.
강의
전체15수강평
게시글
질문&답변
2024.05.08
extracted2 파일 생성이 안됩니다
안녕하세요 ithannag님, 혹시 make_archive 는 성공이 되었나요? 혹시 unpack할 파일이 존재하는 지 확인하시고, 파이썬이 디렉토리를 만들 퍼미션이 있는지 한번 확인해 보시길 바랍니다. 제가 에러 메시지가 없어서, 뭐가 잘 못 되었는지, 가늠하기가 힘드네요.
- 0
- 1
- 14
질문&답변
2024.05.08
Spark Structured Streaming Gracefully shutdown 질문
안녕하세요 장원용님, 강의에서 알려주신 것처럼 아래와 같이 사용하면 동일하게 Structured Streaming도 Gracefully하게 종료할 수 있다고 이해하면 될까요? => 제가 알기로는 spark.streaming.stopGracefullyOnShutdown 는 RDD based-streaming에만 적용되는 걸로 알고 있고 어플리케이션에서 따로 처리해줘야 하는 걸로 알고 있습니다. 예를들면 아래와 같이 시그날을 받아서 query.stop() 사용해주시면 될 듯 합니다. import signal import sys from pyspark.sql import SparkSession # Initialize Spark Session spark = SparkSession.builder.appName("StructuredStreamingApp").getOrCreate() # Define a function to handle graceful shutdown def graceful_shutdown(signum, frame): print("Graceful shutdown initiated") if 'query' in globals(): query.stop() spark.stop() sys.exit(0) # Register the signal handler for termination signals signal.signal(signal.SIGTERM, graceful_shutdown) signal.signal(signal.SIGINT, graceful_shutdown) # Define the streaming DataFrame streaming_df = spark.readStream.format("socket").option("host", "localhost").option("port", 9999).load() # Process the DataFrame processed_df = streaming_df.selectExpr("CAST(value AS STRING) as message") # Define the query query = processed_df.writeStream.format("console").outputMode("append").start() # Await termination of the query try: query.awaitTermination() except Exception as e: print("Exception in streaming query:", e) finally: # Ensure the query is stopped when exiting query.stop() Gracefully 스트리밍을 종료 한다라는 의미가 현재 처리 중인 마이크로 배치까지는 모두 다 처리 및 체크포인트 작성까지 한 후 스트리밍 종료로 이해하면 될까요? => 네, 맞습니다. 마지막으로, DR 같이 스트리밍 종료가 아닌 클러스터가 모두 비정상적으로 종료되었을 경우 Gracefully 옵션이 적용되지 않는 케이스를 경험 했는데, 이런한 케이스는 현업에서 주로 어떻게 대처하고 있을까요? (예를 들어 체크 포인트 등이 불일치하게 스트리밍이 종료) => 일단 .option("checkpointLocation", "/path/to/checkpoint/dir") 적용해서 체크포인트 적용해주시고, 이게 잘 작동하지 않을 것을 대비해 Kafka나 Kinesis에서 오프셋을 항상 추적하고 한시간 전 정도 Rewind시켜서 다시 시작하시면 될 듯 합니다. 그리고 Lambda 아키텍쳐를 사용하셔서 항상 Day가 끝나면 배치로 다시 돌려서 다시 잡아주는 것도 좋은 방법인 듯합니다.
- 1
- 1
- 19
질문&답변
2024.05.07
수업자료 한번에 다운 받을 수 없을까요?
안녕하세요 노희석님, 불편하게 해드려서 죄송합니다. "PDF 자료 모음"이라고 커리큘럼에 추가해 놨으니 한번에 다운 받으세요 ㅎㅎ.
- 1
- 1
- 26
질문&답변
2024.05.02
Task Routing 부분 보니까요
안녕하세요 김태규님, 한개의 큐에 여러개의 Celery를 묶어서 사용가능합니다. 실전에서는 다 그렇게 사용합니다. 그리고 대부분의 경우 큐를 여러개로 로드밸런스 하는 경우는 극히 드문 경우인데, 그럴 경우에는 몇개의 프로젝트나 서비스 별로 큐와 Celery를 나누어서 쓰시면 됩니다.
- 1
- 1
- 61
질문&답변
2024.04.23
dictionary comprehension
안녕하세요 ithannag님, 질문을 잘 이해를 못하겠네요. 혹시 else를 넣고 싶으신건가요? 그렇다면 if 를 앞으로 뺄 수도 있습니다. incorrect_score_dict = {'Tom': 75, 'Lisa': 75, 'Sarah': 90} correct_score_dict = {name: score + 5 if score
- 0
- 1
- 46