본문 바로가기

Data Engineering

(13)
이직 5개월 차의 BigQuery 최적화: 파티셔닝과 클러스터링으로 시작하기 들어가며 최근에 읽고 있는 『구글 빅쿼리 완벽 가이드』 7장 성능 및 비용 최적화에는 컴퓨터 과학자 도널드 커누스의 말이 나옵니다.  "효율성은 향상시키려는 노력의 약 97%는 그 효과가 미비하므로 너무 집착해서는 안 된다. 성급한 최적화는 모든 문제의 근원만 될 뿐이다. 하지만 정말 중요한 3%의 최적화까지 포기해서는 안 된다."    빅쿼리를 사용한지도 어언 5개월입니다. 입사 초반에는 빅쿼리 UI에 뜨는 작은 바이트 수 변화 하나에도 집착하던 시기가 있었는데요, 아마 97%의 비효율적인 노력이 아니었나 싶습니다. 돌이켜보면 가장 빠르게 적용할 수 있고, 즉각적인 효과를 볼 수 있었던 3%의 가장 중요한 최적화는 파티셔닝과 클러스터링이었던 것 같아요. 오늘은 저와 같은 빅쿼리 초보자를 위한 파티셔닝과..
[Datahub] 오픈소스 메타 데이터 플랫폼, 데이터 허브에 대해 알아보자 🙋‍♂️ 🙇‍♂️ 들어가며사내 대시보드를 만들 때 모르는 컬럼이 있으면 슬랙에 검색하거나 팀에 문의해야 했습니다. 그 과정에서 헷갈린 사람이 저뿐만이 아니라는 것을 깨달았는데요, 이러한 문제를 해결할 수 있는 데이터 허브에 대해서 알아보겠습니다! DatahubLinkedIn에서 만든 오픈소스 메타 데이터 플랫폼으로 메타 데이터 관리, 데이터 검색 및 데이터 거버넌스를 위해 만들어졌습니다. Airflow, BigQuery, CSV, Mysql 등의 다양한 소스를 사용할 수 있습니다. 1. Data Ingestion가장 먼저 해야할 일은 메타데이터를 입력하는 것입니다. 데이터 허브의 UI를 이용하거나 YAML 형식으로 작성한  recipe를 작성해 메타 정보를 ingestion, 즉 섭취(?)할 수 있게 해줘야 합..
[Spark] Apache Spark의 Hint에 대해서 알아보자 (Partitioning Hint 편) 🙋‍♂️ 1. Spark의 Partition RDD나 Dataset를 구성하고 있는 최소 단위. 각 파티션은 클러스터의 여러 노드에 분산되어 저장될 수 있으며, 익스큐터에 의해 병렬로 처리된다. 너무 작은 파티션은 네트워크 오버헤드를 증가시키고 너무 큰 파티션은 작업 효율성에 문제가 있기 때문에 주의해야한다. Partition Key 란? 데이터를 파티션으로 분할하는 데 사용되는 열. 파티션 키를 지정할 때에는 고객 ID, 번호와 같이 카디널리티가 높은(중복도가 낮은) 값을 사용하지 않는 것이 좋다. 대신 데이터를 균일하게 나눌 수 있거나 필터 및 그룹화, 조인 작업에 주로 사용되는 값을 사용하는 것이 좋다. 2. Spark의 Hint Spark SQL이 특정한 방식으로 실행 계획을 만들도록 사용자가 제안하는 것..
[Spark] Apache Spark에 대해 알아보자 🙋‍♂️ 1. Apache Spark란 무엇인가? 스파크는 인메모리 기반의 통합 컴퓨팅 엔진이며 클러스터 환경에서 데이터를 병렬 처리하는 라이브러리 집합이다. 1) 인메모리 기반이기 때문에 처리 속도가 빠르고 2) 클러스터 환경을 통해 높은 성능, 고가용성, 확장성을 가진다. 3) 프로그래밍 언어로 R, 파이썬, 자바, 스칼라 등을 지원하고 3) 라이브러리인 SPARK SQL, MLIib, GraphX, Streaming 등을 제공한다. 사진에서와 같이 스파크는 통합이라는 관점을 중시하며 기능의 범위를 컴퓨팅 엔진으로 제한한다. 저장소 역할은 HDFS, AWS S3 등을 지원하며 서로 다른 저장소를 유사하게 볼 수 있도록 사용자 API를 제공한다. 2. Spark는 어떻게 등장했을까? 2000년대 초에는 발열, ..
[Linux] 표준 입출력과 리다이렉션(Redirection) 1. 표준 입출력 리눅스에서는 명령어를 실행하면 표준 입출력 채널이 열린다. 표준 입출력 채널에는 세 가지가 있다. stdin: 표준 입력. 텍스트를 입력으로 받는다 (입력 예) 키보드 또는 파일). stdout: 표준 출력. 프로그램의 실행 결과를 출력한다 (출력 예) 디스플레이, 프린터, 파일 등). stderr: 표준 에러 출력. 프로그램 실행 중 발생한 에러 메시지를 출력한다. 2. 리다이렉션(Redirection) 표준 입출력의 방향을 변경하는 것. 키보드가 아닌 파일로 입력을 받거나, 모니터가 아닌 파일로 출력을 받는 등의 작업을 할 수 있다. 2-1. 표준 출력 표준 출력 리다이렉션 기호는 >을 사용한다(이는 1>을 의미한다). 주로 실행 결과를 디스플레이에 출력하는 것이 아닌 파일에 저장하..
[PROJECT] 나만의 작고 소중한 데이터 파이프라인 만들기🌱 | 책방 사장님의 큐레이션을 위한 대시보드 구축기 지난 2월 퇴근 후 조금씩 시간을 내 작은 프로젝트를 진행했다. 회사에서는 이미 만들어진 빅데이터 플랫폼 위에서 운영업무를 하다 보니 파이프 라인을 비슷하게나마 직접 만들어보고 싶다는 마음에서부터였다. 데이터는 한번 사용해봐서 익숙한 도서 데이터를 선택했고, 주제는 책방 사장님의 큐레이션을 위한 도서 데이터 대시보드 구축으로 정했다. 이번 글에서는 프로젝트의 과정을 되돌아보고 회고를 남겨볼까 한다. 🙋‍♂️ 프로젝트 과정 프로젝트는 Docker 환경에서 진행하였고 프로세스를 자동화할 수 있도록 Apache Airflow를 사용했다. 데이터는 온라인 서점 알라딘의 Open API를 활용했다. 개발 환경 및 프로세스는 다음과 같다. 개발 환경 docker 4.7.0 spark 3.3.4 airflow 2.8..
[Docker] 도커 컨테이너에서 포트 포워딩 설정하기 (+ 💁‍♂️Apache Livy를 사용한 예시) 도커에서는 컨테이너를 실행할 때 포트 포워딩을 설정할 수 있다. 하지만 컨테이너에 여러 소프트웨어를 설치하다 보면 포트 설정을 추가해야 할 때가 있다. 나의 경우 다음과 같은 상황이었다. 다른 컨테이너에서 Ubuntu 컨테이너의 Spark Job을 실행시키기 위해 Apache Livy를 설치 이후 Livy Web UI를 확인하기 위해 8998 포트를 추가 설정 필요 처음에는 단순히 새로운 컨테이너를 만들어야 하나 생각했지만 이 경우 자바, 파이썬, 스파크 등 기존에 설치된 많은 프로그램을 재설치해야 한다는 복잡한 일이 생긴다. * 포트 포워딩: 네트워크에서 특정 포트로 들어오는 트래픽을 다른 포트로 전송하는 메커니즘. 내부 서비스에서 외부 서비스에 접속하거나 그 반대의 경우에 사용. ✔ docker co..
[Spark] Ubuntu 컨테이너에서 PySpark로 Amazon S3 데이터 읽어오기 지난 글과 이어집니다 Airflow DAG로 Amazon S3에 파일 업로드하기 (+📚 알라딘 Open API 예제) Airflow DAG를 사용해 파일을 Amazon s3에 업로드해보자. 💁‍♂️ Docker로 Apache Airflow 설치하는 방법은 아래 글 참고 Docker로 Apache Airflow 설치하기 (with 공식 문서🧐)데이터 파이프라인의 자동화를 구 donghae0230.tistory.com Spark v3.3.4 JAR 다운로드 S3A와의 연동을 위한 aws-java-sdk-bundle 및 hadoop-aws JAR 파일 다운로드 wget wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.1026..