데이터허브를 spark에 연동하면 데이터허브 로그가 추가로 발생하게 되는데 이 로그의 양이 spark로그 보다 많게 느껴지는 경우가 많다.
로깅 레벨에 대해서 데이터허브를 찾아보면
log4j.properties 파일에
log4j.logger.datahub.spark=DEBUG
log4j.logger.datahub.client.rest=DEBUG
를 추가해서 디버깅하는 법이 나와있다.
근데 현재 사용하는 스파크 버전에서는 log4j 가 아니고 log4j2를 사용하고 있어서 뭔가 애매한 상황이었다.
여러가지 시도를 하다가 위 구문을 log4j2 형식에 맞게 변형하면 사용이 가능하고, 그 외에도 원하는 패키지의 로그 레벨을 자유롭게 지정이 가능하다는 걸 알게 됐다.
* log4j2.properties 생성
#Root logger 설정
rootLogger.level = INFO
rootLogger.appenderRefs = Console
rootLogger.appenderRef.console.ref = Console
# Console Appender 설정
appender.console.name = Console
appender.console.type = Console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# DataHub Spark 로깅 설정
logger.datahubSpark.name = datahub.spark
logger.datahubSpark.level = OFF
Root logger는 기본적인 로그 형식에 대한 내용인 것 같고, Console Appender는 로그 패턴을 지정하기 위한 걸로 추정된다.
가장 중요한 건 맨 아래 DataHub Spark 로깅 설정 부분인데
logger.<적당한 변수명>.name = <설정할 패키지명>
logger.<적당한 변수명>.level = OFF/WARNING/INFO/DEBUG 등으로 설정하면 된다.
따라서 위의 방식으로 하면 datahub.spark 패키지 내의 로그가 OFF가 된다.
이런 식으로 제외하거나 조정하고 싶은 패키지 명을 찾아서 지정하면 된다.
k8s 상에서 돌리는 경우 해당 부분은 ConfigMap에 저장하고, mount하면 된다.
1. ConfigMap 생성 (log4j2.yaml)
apiVersion: v1
kind: ConfigMap
metadata:
name: log4j2-config
namespace: de-emr
data:
log4j2.properties: |
# 위 내용 추가
2. kubectl apply -f log4j2.yaml -n namespace
3. spark operator 에서 driver에 configmap mount를 한다.
driver:
configMaps:
name: log4j2-config
path: /opt/spark/conf #적당한 경로
4. extraJavaOptions에 추가한다.
spark.driver.extraJavaOptions: (기존값) -Dlog4j2.configurationFile=file:/opt/spark/conf/log4j2.properties
excutor도 동일하게 하면 되는데 굳이 필요는 없는 듯
'Programming > Tip&Informaion' 카테고리의 다른 글
[Spark] spark history server 띄울 때, iam 권한으로 s3 읽기 (0) | 2024.05.31 |
---|---|
[실수노트] aws에서 여러 eks cluster에서 karpenter 운영 시 실수 (0) | 2024.04.18 |
knative/istio activator 종료 및 재실행 현상 (0) | 2024.02.19 |
[Spark/Scala] NullPointerException 발생 - Some(null) 문제 (1) | 2024.01.25 |
[실수노트] spark sql 에서 concat 함수 null 처리 (0) | 2024.01.17 |