[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

+ Recent posts