[Pachyderm] Splitting Data for Distributed Processing (분산처리) Start.
BioinformaticsAndMe
Splitting Data for Distributed Processing (분산처리)
Pachyderm을 사용하면 보유한 데이터를 여러 개의 'datums' 로 나누어 병렬 처리를 할 수 있다.
단일 파일로 Pachyderm에 commit해야하는 데이터 세트인 경우,
Pachyderm은 분산 컴퓨팅을 위한 데이터 세트를 자동으로 분리하는 방법을 제공한다.
유저 정보로 이루어진 데이터 셋을 예로 들어보자.
CSV format의 단일 파일로 한 줄당 하나의 record가 담겨 있다.
user_data.csv
$ head user_data.csv 1,cyukhtin0@stumbleupon.com,144.155.176.12 2,csisneros1@over-blog.com,26.119.26.5 3,jeye2@instagram.com,13.165.230.106 4,rnollet3@hexun.com,58.52.147.83 5,bposkitt4@irs.gov,51.247.120.167 6,vvenmore5@hubpages.com,161.189.245.212 7,lcoyte6@ask.com,56.13.147.134 8,atuke7@psu.edu,78.178.247.163 9,nmorrell8@howstuffworks.com,28.172.10.170 10,afynn9@google.com.au,166.14.112.65
위 파일을 Pachyderm에 하나의 파일로 저장하면, 유저 record 각각을 별도의 "데이텀"으로 병렬 처리 할 수 없다.
물론, 이러한 유저 record를 commit하기 전에 수동으로 개별 파일로 분리 할 수 있지만, Pachyderm은 훨씬 쉬운 방법을 갖고 있다.
put-file API에는 파일을 별도의 데이텀으로 자동 분할하는 옵션이 있다. put-file의 --split 옵션을 사용해보자.
예를 들어, 아래는 user_data.csv 파일을 각 행의 개별 데이텀으로 자동 분할하는 command이다.
$ pachctl put-file users master -c -f user_data.csv --split line --target-file-datums 1
--split line : Pachyderm이 파일을 line에 따라 분리하도록 지정
--target-file-datums : 각 결과 파일이 최대 하나의 'datum'(one line)을 포함하도록 지정.
참고로, Pachyderm은 repo에서 user_data.csv를 여전히 하나의 entity로 표시한다.
$ pachctl list-file users master NAME TYPE SIZE user_data.csv dir 5.346 KiB
그러나 위 entity는 현재 모든 분할 record를 포함하는 디렉토리다.
$ pachctl list-file users master user_data.csv NAME TYPE SIZE user_data.csv/0000000000000000 file 43 B user_data.csv/0000000000000001 file 39 B user_data.csv/0000000000000002 file 37 B user_data.csv/0000000000000003 file 34 B user_data.csv/0000000000000004 file 35 B user_data.csv/0000000000000005 file 41 B user_data.csv/0000000000000006 file 32 B etc...
/user_data.csv/*의 glob 패턴을 사용하여 repo 유저를 입력으로 사용하는 파이프 라인을 통해,
각 유저 record (즉, CSV의 각 행)를 병렬로 처리할 수 있다.
현재 Pachyderm은 라인이나 JSON blob에서 이러한 유형의 분할을 지원한다.
# Split a json file on json blobs, putting # each json blob into it's own file. $ pachctl put-file users master -c -f user_data.json --split json --target-file-datums 1 # Split a json file on json blobs, putting # 3 json blobs into each split file. $ pachctl put-file users master -c -f user_data.json --split json --target-file-datums 3 # Split a file on lines, putting each 100 # bytes chunk into the split files. $ pachctl put-file users master -c -f user_data.txt --split line --target-file-bytes 100
#Reference
https://medium.com/pachyderm-data/bioinformatics-with-pachyderm-shell-scripts-at-scale-ae1cce672b83
[Pachyderm] Splitting Data for Distributed Processing (분산처리) End.
BioinformaticsAndMe
'Program' 카테고리의 다른 글
Jupyter notebook (주피터 노트북) (0) | 2019.11.14 |
---|---|
[Kubernetes] 쿠버네티스 소개 (0) | 2019.10.18 |
API 기초 학습 (0) | 2019.09.26 |
Docker 설치 (0) | 2018.09.03 |
Docker 시작하기 (1) | 2018.07.17 |