본문 바로가기

OpenSource

(32)
[Docker] Apple M1, M2 CPU 도커 빌드 에러 해결 애플이 Intel CPU에서 자체 개발한 m1, m2 CPU를 탑재하게 되면서 발생하는 도커 문제 해결법에 대해 정리해보고자 한다. 문제1: /bin/sh: exec format error 에러 발생시 애플 m1 CPU에서 이미지 빌드후 Intel CPU가 장착된 장비에서 도커를 수행할 때 발생되는 문제이다. docker inspect {도커 이미지} | grep Architecture 검색된 결과를 보면 arm64 로 빌드되어있는것을 확인할 수 있는데, intel CPU에서 동작시키려먼 아키텍쳐가 amd64 이어야 한다. 해결방법: 도커 빌드시 platform을 지정하여 빌드한다. docker build --platform linux/amd64 -t {빌드 태그} . 문제2: ERROR [interna..
[Kubernetes] Statefulset에서 Local Persistent Volume 사용하기 쿠버네티스에 Mysql이나 Mongodb 같은 DB를 설치할때 statefulset을 이용하여 저장소를 구성할수 있다. 이때 Statefulset에서 사용하는 저장소를 NFS같은 네트워크 PV(Persistent Volume)을 설정하여 저장소를 구축할수 있지만, 좀더 나은 성능을 위해 쿠버네티스 노드의 로컬디스크를 이용하여 PV를 구성할 수도 있다. 오늘은 Local Persistent Volume을 구성하는 방법을 정리해보고자 한다. 1. Local Storage Class 생성 노드의 디스크를 Statefulset에서 바로 사용하려면 Local Storage Class를 생성해야 한다. 아래와 같은 yaml을 작성하여 Local Storage Class를 생성할 수 있다. kind: StorageC..
[Spring] Hadoop Kerberos 티켓 갱신 실패 시 해결방법(javax.security.sasl.SaslException: GSS initiate failed) 스프링 프로젝트에서 커버로스 인증을 통한 hdfs에 접근하려면 org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab 을 이용하여 커버로스 티켓을 생성할 수 있다. @Configuration class HadoopConfig { @Bean public org.apache.hadoop.conf.Configuration hadoopConfig() { Configuration conf = new Configuration(); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(kerberosUser, keytabPath); return conf..
[Kafka] 자주사용하는 Kafka 커맨드 1. __consumer_offsets 토픽에서 offset 정보 읽기 $ echo "exclude.internal.topics=false" > /tmp/consumer.config $ kafka-console-consumer \ --consumer.config /tmp/consumer.config \ --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" \ --bootstrap-server localhost:9092 \ --topic __consumer_offsets \ --from-beginning 2. 카프카 데이터 읽기(console-kafka-consumer) : ' --topic: 토픽명 --boo..
[Spark] SparkContext.addFile 과 --files 의 차이점 (Spark on YARN) Spark 에서 외부데이터를 불러와 처리할 때 코드 상에 SparkContext.addFile 메소드를 호출하거나, spark-submit시 --files 파라미터를 이용하여 외부데이터를 읽어와 처리할 수 있다. 이때 두가지 방법이 서로 동작하는 방식이 달라 YARN에 cluster 모드로 실행시 파일을 읽는 방법이 달라지는데, 이에 대해 정리해보고자 한다. SparkContext.addFile 공식 문서에 따르면 local file, HDFS 뿐 아니라 HTTP, HTTPS, FTP까지 지정하여 사용할 수 있다고 한다. //add file SparkSession spark = SparkSession.builder().getOrCreate(); spark.sparkContext().addFile("htt..
[Airflow] Trouble Shooting 1. webserver에서 "Some workers seem to have died and gunicorn did not restart them as expected" 에러 발생하며 웹페이지가 보여지지 않을때 원인: webserver에 메모리 부족으로 인하여 gunicorn worker가 kill 됨 해결책: airflow.cfg 의 [webserver] 섹션에 workers 의 갯수를 줄인다(default 4). 혹은 도커 컨테이너 생성시 environment에 AIRFLOW__WEBSERVER__WORKERS를 지정한다. webserver의 사용 메모리를 키운다. 필자는 docker-compose를 이용하여 airflow 환경을 구성중이다. 이때 mem_limit을 이용하여 메모리를 조절할 수 있다...
[Spark Streaming] Streaming 처리시 Offset을 저장해보자. 이전 포스팅 : [Spark Streaming] Kafka를 이용한 스트리밍 처리 시 메세지 중복되는 이유 오래전 포스팅이긴 하지만 과거에 스트리밍 어플리케이션 재시작시 메세지가 중복 처리되는것에 대해 알아보았다. 이번에는 실제로 어떻게 카프카 Offset을 관리하는지 정리해보고자 한다. 1. 다양한 Offset 저장소를 지원하기 위한 추상 클래스 선언 import org.apache.kafka.common.TopicPartition; import org.apache.spark.streaming.kafka010.OffsetRange; import java.util.Map; public abstract class OffsetManager { public abstract void writeOffset(Off..
[Docker] 이미지 다운로드를 위한 Proxy 설정 $ sudo mkdir -p /etc/systemd/system/docker.service.d $ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf ## PROXY 정보 추가 [Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp" $sudo systemctl daemon-reload $sudo systemctl restart docker