목록으로
GitHub - deepseek-ai/smallpond: A lightweight data processing framework built on DuckDB and 3FS.
Service2025.03.08

GitHub - deepseek-ai/smallpond: A lightweight data processing framework built on DuckDB and 3FS.

요약

smallpond는 DuckDB와 3FS를 기반으로 구축된 경량 데이터 처리 프레임워크입니다.
이 프레임워크는 DuckDB를 활용한 고성능 처리, PB-scale 데이터셋 처리 능력, 그리고 장기 실행 서비스가 없는 쉬운 운영을 특징으로 합니다.
smallpond는 3FS 기반의 GraySort 벤치마크에서 110.5TiB 데이터를 30분 14초 만에 정렬하여 평균 3.66TiB/min의 처리량을 달성했습니다.

상세 내용

smallpond는 DuckDB와 3FS를 기반으로 구축된 경량 데이터 처리 프레임워크입니다. 이 프레임워크는 고성능 데이터 처리, 페타바이트(PB) 규모의 데이터셋 처리 가능성을 위한 확장성, 그리고 장시간 실행되는 서비스가 필요 없는 손쉬운 운영을 특징으로 합니다.

핵심 방법론은 DuckDB의 강력한 인-프로세스(in-process) OLAP(Online Analytical Processing) 역량과 3FS(File System)의 분산 스토리지 기능을 결합하는 것입니다. DuckDB는 컬럼 기반의 벡터화된(vectorized) 실행 엔진을 통해 높은 쿼리 성능을 제공하며, smallpond는 이러한 DuckDB 인스턴스를 활용하여 데이터를 처리합니다. 특히, 페타바이트 규모의 데이터셋을 처리할 수 있는 확장성은 3FS를 통한 분산 파일 시스템 접근을 통해 달성됩니다. 3FS는 DuckDB가 대규모 데이터를 효율적으로 읽고 쓸 수 있도록 지원하며, 이는 분산 컴퓨팅 환경에서 데이터를 효과적으로 관리하는 데 필수적입니다.

smallpond는 데이터 처리 파이프라인을 간소화하기 위한 API를 제공합니다. 예를 들어, sp.read_parquet("path/to/data.parquet")는 DuckDB를 사용하여 Parquet 파일을 효율적으로 읽어 DataFrame 객체로 로드합니다. 데이터 분할(partitioning)은 df.repartition(numpartitions,hashby="columnname")df.repartition(num_partitions, hash_by="column_name")과 같은 메서드를 통해 지원됩니다. 이는 지정된 컬럼을 기준으로 데이터를 해시(hash)하여 여러 파티션으로 분산시키는 과정으로, 분산 처리의 핵심 단계입니다. SQL 쿼리 실행을 위해 sp.partial_sql("SELECT ... FROM {0} GROUP BY ...", df)와 같은 함수를 제공하여, DuckDB의 SQL 엔진을 활용해 로드된 DataFrame에 대한 복잡한 분석 쿼리를 수행할 수 있습니다. 여기서 {0}은 입력 DataFrame을 나타내는 플레이스홀더입니다. 처리된 결과는 df.write_parquet("output_path/")를 통해 분산된 Parquet 파일로 저장될 수 있습니다. 이러한 작업들은 백그라운드에서 DuckDB와 3FS의 연동을 통해 고성능으로 수행되며, "no long-running services"라는 특성 덕분에 리소스 사용이 필요할 때만 활성화되는 온디맨드(on-demand) 방식으로 작동하여 운영 복잡성을 줄입니다.

성능 측면에서, smallpond는 50개의 컴퓨트 노드와 25개의 스토리지 노드로 구성된 클러스터에서 3FS를 사용하여 GraySort 벤치마크를 수행한 결과, 110.5TiB의 데이터를 30분 14초 만에 정렬하여 평균 3.66TiB/분의 처리량을 달성했습니다. 이는 대규모 데이터셋에 대한 smallpond의 효율적인 분산 처리 능력을 입증합니다.

smallpond는 Python 3.8부터 3.12 버전을 지원하며, pip install smallpond 명령어를 통해 쉽게 설치할 수 있습니다. 개발을 위해서는 pip install .[dev]를 통해 개발 종속성을 설치하고, pytest -v tests/*.py로 단위 테스트를 실행할 수 있습니다. 프로젝트는 MIT 라이선스에 따라 배포됩니다.

원본 보기
GitHub
Shared by Anonymous