분류 전체보기 34

[Spark] serializer 를 통한 성능개선

Spark를 최적화 할 수 있는 방법 중에는 직렬화 속성을 명시하면서 7% 성능을 높일 수 있었고, 더 많은 데이터를 처리하게 되면 이상의 성능을 높일 수 있을 것 같습니다. 직렬화는 분산 애플리케이션의 성능에 중요한 역활을 합니다. 객체를 직렬화하는데 시간이 오래 걸리거나 많은 바이트를 소비하는 방식은 퍼포먼스를 늦추게 됩니다. 직렬화는 객체를 바이트 스트림으로 변환하는 과정이며, 역직렬화는 바이트 스트림을 다시 객체로 변환하는 방법입니다. 위에 빨간색으로 강조한 부분이 Spark에서 RDD를 다른 분산 환경으로 네트워크를 통해 셔플링 될 때, 직렬화 된 데이터를 노드에게 전달합니다. 전달받은 노드에서는 직렬화된 데이터를 역직렬화하여 Object로써 활용하게 됩니다. 위에서 설명한 흐름을 이해하였다면,..

오픈소스 2024.03.29

[Airflow] Driud에 적재하는 task 작성하기

Druid에 데이터를 적재하기 이전에 S3를 medallion structure 활용하여 작업하였다. 그리고 그 중에 골드데이터를 기준으로 드루이드에 데이터를 적재하는 과정을 진행해봤다. 아래는 대략적으로 정리해보면 medallion structure 이다. 나의 경우 Druid는 local 버전으로 진행했음을 먼저 선언하고 간다 Druid에서 S3를 연결이 되는지를 확인한다. 우선 연결이 정상적으로 이뤄진다면 드루이드와 S3의 연결에는 문제가 없음을 확인했다. 그리고 연결하면서 S3 데이터에 대한 Spec JSON 를 추출할 수 있다. 해당 JSON 같은 경우에는 아래의 과정을 진행하면 된다. 위와 같이 처음부터 S3에 대한 스펙을 작성하기 보단, 위와 같은 방법으로 스켈레톤 JSON를 활용하면 더 빠..

오픈소스 2024.01.06

[Spark] DockerCompose Airflow, PySpark DAG 실행하기

내가 하고자 했던 것 => Docker Compose로 Airflow 구성 후에 Spark DAG를 생성하여 실행시키기 였고, 그 과정 속에서 상당히 많은 부분들을 추가하고 삽질이 필요하였다. 해당 과정 속에서 발생했던 트러블 중에 Airflow에서 Spark-submit이 정상적으로 전달이 되었지만 TaskSetManager 에서 무한대기 상태로 빠져버린다는 것이였다. 그 외에도 Airflow에 java 추가하기, Spark master, Worker 컨테이너 DockerFile 만드는 과정 등 여러 문제점들을 겪게 되었고, 해결하게 되는 과정들을 쭉 적어보려고 한다. 1. Connection https://github.com/apache/airflow/blob/89aa437ef98bba97ba1424..

오픈소스 2023.12.25

[네이버 클라우드] Local에서 pyspark로 S3 읽고 저장하기

Local에서 pyspark로 CSV를 읽고, 해당 CSV를 parquet으로 쪼개서 저장해야하는 작업을 진행했다. S3는 AWS가 아닌 Naver Cloud에서 제공해주는 Object Storage 를 활용하였다. ( 참고로 작업환경은 Mac M1 ) 우선 Naver Cloud에서는 AWS형태의 모듈들을 전체적으로 지원이 되어서, 기존에 사용하던 AWS에 대한 권한 설정 혹은 세팅들을 전부 지원이 되어서 해당 모듈들을 활용하여 Naver Cloud의 S3를 직접적으로 읽고 쓸 수 있는 편리함을 가지고 있다 Spark로 S3 관련 모듈로 통해 AWS S3를 읽고 쓰는 코드들을 대체로 활용하면 Naver Cloud의 S3도 동일한 작업들을 할 수 있었는데, 구글링에 pyspark aws s3 로 검색되는 ..

카테고리 없음 2023.12.18

M1으로 docker 로 설치하다 실패해 local로 설치하는 과정

드루이드를 설치하면서 겪었던 경험 M1으로 설치하기엔 너무 많은 어려움이 있었다. 우선 나의 경우, docker로 druid를 설치하여 사용하길 원하였고 그래서 해당 부분을 위해 druid 공식 Git에서 Docker 파일을 찾았고 어떻게 진행해야 하는지에 대한 ReadMe가 적혀있었고, 가이드라인대로 진행하였다. https://github.com/apache/druid/tree/master/distribution/docker 공식문서에서 명시되어 있기론 maven를 빌드를 진행한 후에, 빌드된 파일을 기준으로 docker image를 진행하라고 나와있다. 우선 문제. mvn clean package -DskipTests -Pdist 위 명령어를 실행하면 에러가 발생한다. 발생하는 문제는 bigdecim..

오픈소스 2023.12.15

Eventsim으로 생성한 로그데이터로 SuperSet으로 시각화하기(4)

이전 게시물에서 SuperSet를 활용해 시각화 할 수 있는 데이터들을 MySQL로 마이그레이션하는 작업을 진행하였다. 그 데이터들을 기준으로 Superset를 활용해 차트를 만들고, 해당 차트들을 대쉬보드에 붙여넣어서 최종적으로 보기 좋은 대쉬보드를 구성하는 것이 중요한 목표인 것 같다. 하지만 나같은 경우 데이터를 시각화하는 방법에 대해 정확한 인사이트가 없어서 제공해주는 Superset의 UI를 유추만으로 만들어서 굉장히 조약하게 만들 수밖에 없었다.. 이렇게 구성해보았는데, 월별 무료/유료 사용자 추세를 차트라인으로 만들었고, 도시별 사용자 통계는 도시별로 그룹바이를 하여, 총 사용자들을 카운트하여, 해당 미국 도시별 제공해주는 유니코드? 도시코드? 컬럼을 활용해 각각의 지역들을 맵핑해줄 수 있었..

오픈소스 2023.12.07

Eventsim으로 생성한 로그데이터로 SuperSet으로 시각화하기(3)

https://park-dev-diary.tistory.com/26 Eventsim으로 생성한 로그데이터로 SuperSet으로 시각화하기(2) https://park-dev-diary.tistory.com/25 Eventsim으로 생성한 로그데이터로 SuperSet으로 시각화하기(1) https://park-dev-diary.tistory.com/21 Eventsim 빌드 및 실행하기 이 모든 과정은 MacOS 기준을 작성되었습니다! 1. JAVA park-dev-diary.tistory.com 그 이전에 Pandas로 진행하다가 안되었던 이유는 간단했다. df = pd.read_json(file_path, lines=True) 를 주석처리하지 않고 그대로 작업을 해서 결국엔 chunk, ijson 둘다..

오픈소스 2023.12.03

[정글 PintOS] 1주차

현재 상황: thread_create() 함수를 사용하여 쓰레드를 생성하고, 실행할 함수로 timer_sleep() 또는 이의 래퍼(wrapper) 함수를 전달한다. 생성된 쓰레드가 실행되면서 설정한 시간이 경과했는지 확인한다. 설정한 시간에 도달하지 않았다면, 해당 쓰레드를 ready_list에 추가한다. ready_list의 첫 번째 쓰레드를 실행한다. 여러 쓰레드를 생성한 후에 2-3-4 과정을 반복하면서 각 쓰레드가 설정한 시간에 도달했는지 확인하고, 도달하면 해당 쓰레드를 종료한다. Test Case 결과에 나타나는 'kernel ticks', 'idle ticks', 'user ticks'는 다음과 같은 의미를 가진다: kernel ticks: 커널 쓰레드가 실행되는 데 걸리는 시간 idle ..

일상/정글 2023.11.27