From 67f0d9a809bf59572047832a7fd86b51af77d3f3 Mon Sep 17 00:00:00 2001 From: kopardev Date: Thu, 10 Oct 2024 18:08:06 -0400 Subject: [PATCH] feat: parkit how tos with HPCDME --- docs/HPCDME/transfer.md | 282 +++++++++++++++++------------------ docs/HPCDME/verification.png | Bin 0 -> 39155 bytes 2 files changed, 133 insertions(+), 149 deletions(-) create mode 100644 docs/HPCDME/verification.png diff --git a/docs/HPCDME/transfer.md b/docs/HPCDME/transfer.md index 0417f54..f361dad 100644 --- a/docs/HPCDME/transfer.md +++ b/docs/HPCDME/transfer.md @@ -1,199 +1,183 @@ -### Background + -Rawdata or Project folders from Biowulf can be parked at a secure location after the analysis has reached a endpoint. Traditionally, CCBR analysts had access to the GridFTP Globus Archive for doing this. But, this Globus Archive has been running past 95% full lately. +- [1. Background](#1-background) +- [2. parkit](#2-parkit) + - [2.1. `parkit_folder2hpcdme` usage](#21-parkit_folder2hpcdme-usage) + - [2.2. `parkit_folder2hpcdme` testing](#22-parkit_folder2hpcdme-testing) + - [get dummy data](#get-dummy-data) + - [load conda env](#load-conda-env) + - [run `parkit_folder2hpcdme`](#run-parkit_folder2hpcdme) + - [verify transfer](#verify-transfer) + - [cleanup](#cleanup) -This document outlines how a projects folder can be directly parked on HPCDME as a single "tar.gz" ball. It is assumed that HPC DME API CLUs are already setup as per [these](https://ccbr.github.io/HowTos/HPCDME/setup/) instructions. + -Here are the steps: +### 1. Background -#### Create tarball +Rawdata or Project folders from Biowulf can be parked at a secure location after the analysis has reached an endpoint. Traditionally, CCBR analysts have been using GridFTP Globus Archive for doing this. But, this Globus Archive has been running relatively full lately and it is hard to estimate how much space is left there as the volume is shared among multiple groups. -Once you have a list of files that you want to include in the tarball, create the tarball. This may take a while and should be submitted as a slurm job. +### 2. parkit -```bash -% cd /data/CCBR/projects -% du -hs /data/CCBR/projects/ccbr796 -440G /data/CCBR/projects/ccbr796 -% echo "tar czvf ccbr796.tar.gz /data/CCBR/projects/ccbr796" > do_tar_gz -% swarm -f do_tar_gz --partition=ccr,norm --time=24:00:00 -t 2 -g 100 -41985209 -``` +[**parkit**](https://github.com/CCBR/parkit) is designed to assist analysts in archiving project data from the NIH's Biowulf/Helix systems to the HPC-DME storage platform. It provides functionalities to package and store data such as raw FastQ files or processed data from bioinformatics pipelines. Users can automatically: +- create tarballs of their data (including `.filelist` and `.md5sum` files), +- generate metadata, +- create collections on HPC-DME, and +- deposit tar files into the system for long-term storage. +**parkit** also features comprehensive workflows that support both folder-based and tarball-based archiving. These workflows are integrated with the SLURM job scheduler, enabling efficient execution of archival tasks on the Biowulf HPC cluster. This integration ensures that bioinformatics project data is securely archived and well-organized, allowing for seamless long-term storage. -#### Create filelist +> :exclamation: **NOTE**: HPC DME API CLUs should already be setup as per [these](https://ccbr.github.io/HowTos/HPCDME/setup/) instructions in order to use **parkit** -Sometime you just want to know what files are in the tarball. Hence, it is important to upload a filelist along with the tarball. +> :exclamation: **NOTE**: `HPC_DM_UTILS` environment variable should be set to point to the `utils` folder under the `HPC_DME_APIs` repo setup. Please see [these](https://ccbr.github.io/HowTos/HPCDME/setup/#edit-bashrc) instructions. -```bash -% tar tzvf ccbr796.tar.gz > ccbr796.tar.gz.filelist -``` +[`parkit_folder2hpcdme`](https://github.com/CCBR/parkit/blob/master/README.md#parkit_folder2hpcdme) is the preferred **parkit** command to completely archive an entire folder as a tarball on HPCDME using SLURM. -#### Create Project +#### 2.1. `parkit_folder2hpcdme` usage -If the Project collection does not exist in HPCDME (verify using the web interface), then you may need to create it. +```bash +parkit_folder2hpcdme --help +``` +
+ ```bash -% cd /data/kopardevn/SandBox/parkit -% bash create_empty_project_collection.sh /CCBR_Archive/GRIDFTP/Project_CCBR-796 CCBR-796 CCBR-796 -{ - "metadataEntries": [ - { - "attribute": "collection_type", - "value": "Project" - }, - { - "attribute": "project_start_date", - "value": "20220616", - "dateFormat": "yyyyMMdd" - }, - { - "attribute": "access", - "value": "Open Access" - }, - { - "attribute": "method", - "value": "NGS" - }, - { - "attribute": "origin", - "value": "CCBR" - }, - { - "attribute": "project_affiliation", - "value": "CCBR" - }, - { - "attribute": "project_description", - "value": "CCBR-796" - }, - { - "attribute": "project_status", - "value": "Completed" - }, - { - "attribute": "retention_years", - "value": "7" - }, - { - "attribute": "project_title", - "value": "CCBR-796" - }, - { - "attribute": "summary_of_samples", - "value": "Unknown" - }, - { - "attribute": "organism", - "value": "Unknown" - } - ] -} -dm_register_collection /dev/shm/Project_CCBR-796.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-796 +usage: parkit_folder2hpcdme [-h] [--restartfrom RESTARTFROM] [--executor EXECUTOR] [--folder FOLDER] [--dest DEST] + [--projectdesc PROJECTDESC] [--projecttitle PROJECTTITLE] [--rawdata] [--cleanup] [--makereadme] + --hpcdmutilspath HPCDMUTILSPATH [--version] + +End-to-end parkit: Folder 2 HPCDME + +options: + -h, --help show this help message and exit + --restartfrom RESTARTFROM + if restarting then restart from this step. Options are: createemptycollection, createmetadata, deposittar + --executor EXECUTOR slurm or local + --folder FOLDER project folder to archive + --dest DEST vault collection path (Analysis goes under here!) + --projectdesc PROJECTDESC + project description + --projecttitle PROJECTTITLE + project title + --rawdata If tarball is rawdata and needs to go under folder Rawdata + --cleanup post transfer step to delete local files + --makereadme make readme file with destination location on vault + --hpcdmutilspath HPCDMUTILSPATH + what should be the value of env var HPC_DM_UTILS + --version print version ``` -> **Error**: Have encountered this error message: -> ```bash -> Error during registration, HTTP_CODE: 503 -> Cannot find the response message file -> collection-registration-response-message.json.tmp -> ``` -> 503 error means that the API is down! +
-#### Create Analysis +#### 2.2. `parkit_folder2hpcdme` testing -If the Analysis collection does not exist in HPCDME (verify using the web interface) under the Project collection, then you may need to create it. +##### get dummy data ```bash -% cd /data/kopardevn/SandBox/parkit -% bash create_empty_analysis_collection.sh /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis -dm_register_collection /dev/shm/Analysis.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis +# make a tmp folder +mkdir -p /data/$USER/parkit_tmp +# copy dummy project folder into the tmp folder +cp -r /data/CCBR/projects/CCBR-12345 /data/$USER/parkit_tmp/CCBR-12345-$USER +# check if HPC_DM_UTILS has been set +echo $HPC_DM_UTILS ``` -Done! Now you have a location ready for the the tarball to be parked. - -#### Create metadata - -Using `meta` script from [`pyrkit`](https://github.com/CCBR/pyrkit), we can then generate the required `.metadata.json` file for the tarball. Analysis collection `/CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis` should already exist in the HPCDME vault. +##### load conda env ```bash -% echo "/data/kopardevn/SandBox/pyrkit/src/meta combined --input /data/CCBR/projects/ccbr796.tar.gz --output /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis" > do_get_metadata -% swarm -f do_get_metadata --partition=ccr,norm --time=24:00:00 -t 2 -g 100 +# source conda +. "/data/CCBR_Pipeliner/db/PipeDB/Conda/etc/profile.d/conda.sh" +# activate parkit or parkit_dev environment +conda activate parkit +# check version of parkit +parkit --version ``` -If the file is large (100s of GB), then this may take a while as the md5sum of the file is being calculated. Hence, this should be submitted to the slurm. - -Metadata also needs to be created for the filelist file. These files are generally small (few MBs) and the following command can be directly run on an interactive node. +
+ ```bash -% /data/kopardevn/SandBox/pyrkit/src/meta combined --input /data/CCBR/projects/ccbr796.tar.gz.filelist --output /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis +v2.0.2-dev ``` +
-The above command, when run sucessfully, will create `/data/CCBR/projects/ccbr796.tar.gz.filelist.metadata.json` +##### run `parkit_folder2hpcdme` -#### Transfer +```bash +parkit_folder2hpcdme --folder /data/$USER/parkit_tmp/CCBR-12345-$USER --dest /CCBR_Archive/GRIDFTP/Project_CCBR-12345-$USER --projectdesc "some_description" --projecttitle "some_title" --makereadme --hpcdmutilspath $HPC_DM_UTILS --executor local +```` -`dm_register_dataobject` cannot be used for large files (>10GB), but it can be replaced by `dm_register_dataobject_multipart` +
+ ```bash -% dm_register_dataobject_multipart /data/CCBR/projects/ccbr796.tar.gz.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis/ccbr796.tar.gz /data/CCBR/projects/ccbr796.tar.gz -Reading properties from /data/kopardevn/SandBox/HPC_DME_APIs/utils/hpcdme.properties -Registering file: /data/CCBR/projects/ccbr796.tar.gz -Destination archive path: /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis/ccbr796.tar.gz -Cmd process Completed -Jun 16, 2022 10:55:25 AM org.springframework.shell.core.AbstractShell handleExecutionResult -INFO: CLI_SUCCESS +################ Running createtar ############################# +parkit createtar --folder "/data/$USER/parkit_tmp/CCBR-12345-kopardevn" +tar cvf /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar /data/$USER/parkit_tmp/CCBR-12345-kopardevn > /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.filelist +createmetadata: /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar file was created! +createmetadata: /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.filelist file was created! +createmetadata: /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.md5 file was created! +createmetadata: /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.filelist.md5 file was created! +################################################################ +############ Running createemptycollection ###################### +parkit createemptycollection --dest "/CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn" --projectdesc "description" --projecttitle "title" +module load java/11.0.21 && source $HPC_DM_UTILS/functions && dm_register_collection /dev/shm/995b4648-08c2-44b7-a728-470408cb539a.json /CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn +cat /dev/shm/995b4648-08c2-44b7-a728-470408cb539a.json && rm -f /dev/shm/995b4648-08c2-44b7-a728-470408cb539a.json +module load java/11.0.21 && source $HPC_DM_UTILS/functions && dm_register_collection /dev/shm/f2d4badf-b7e6-4e10-8e93-2df9da6cdbbf.json /CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn/Analysis +module load java/11.0.21 && source $HPC_DM_UTILS/functions && dm_register_collection /dev/shm/f2d4badf-b7e6-4e10-8e93-2df9da6cdbbf.json /CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn/Rawdata +cat /dev/shm/f2d4badf-b7e6-4e10-8e93-2df9da6cdbbf.json && rm -f /dev/shm/f2d4badf-b7e6-4e10-8e93-2df9da6cdbbf.json +################################################################ +########### Running createmetadata ############################## +parkit createmetadata --tarball "/data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar" --dest "/CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn" +createmetadata: /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.metadata.json file was created! +createmetadata: /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.filelist.metadata.json file was created! +################################################################ +############# Running deposittar ############################### +parkit deposittar --tarball "/data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar" --dest "/CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn" +module load java/11.0.21 && source $HPC_DM_UTILS/functions && dm_register_dataobject /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.filelist.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn/Analysis/CCBR-12345-kopardevn.tar.filelist /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.filelist +module load java/11.0.21 && source $HPC_DM_UTILS/functions && dm_register_dataobject_multipart /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn/Analysis/CCBR-12345-kopardevn.tar /data/$USER/parkit_tmp/CCBR-12345-kopardevn.tar +################################################################ ``` -Depending on the size of the file, this step can be done in a reasonable amount of time (<1hr) and can be run in an interactive node. +
-Remember, the filelist file also needs to be registered separately like this: +> :exclamation: **NOTE**: change `--executor local` to `--executor slurm` when submitting to SLURM -```bash -% dm_register_dataobject /data/CCBR/projects/ccbr796.tar.gz.filelist.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis/ccbr796.tar.gz.filelist /data/CCBR/projects/ccbr796.tar.gz.filelist -``` +> :exclamation: **NOTE**: add `--rawdata` when folder contains raw fastqs -As filelist files are smaller (few MBs), we can run `dm_register_dataobject` in place of `dm_register_dataobject_multipart`. +##### verify transfer -#### Cleanup +Transfer can be verified by logging into [HPC DME web interface](https://hpcdmeweb.nci.nih.gov/browse?base). -Once the tarball is successfully transferred over the HPCDME, it can be deleted from the local filesystem. +![alt text](verification.png) -```bash -% rm -f /data/CCBR/projects/ccbr796.tar.gz -``` +##### cleanup -The contents of the local analysis folder can also be deleted. +Delete unwanted collection from HPC DME. ```bash -% cd /data/CCBR/projects/ccbr796 && rm -rf * +# load java +module load java +# delete collection recursively +dm_delete_collection -r /CCBR_Archive/GRIDFTP/Project_CCBR-12345-$USER ``` -A note can be added to the recently emptied folder stating where the contents are currently parked. +
+ ```bash -% cd /data/CCBR/projects/ccbr796 -% echo "This folder was converted to a tarball (tar.gz) and pushed to HPCDME. Its new location is \`/CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis/ccbr796.tar.gz\` in HPCDME" > README.md +Reading properties from /data/kopardevn/GitRepos/HPC_DME_APIs/utils/hpcdme.properties +WARNING: You have requested recursive delete of the collection. This will delete all files and sub-collections within it recursively. Are you sure you want to proceed? (Y/N): +Y +Would you like to see the list of files to delete ? +N +The collection /CCBR_Archive/GRIDFTP/Project_CCBR-12345-kopardevn and all files and sub-collections within it will be recursively deleted. Proceed with deletion ? (Y/N): +Y +Executing: https://hpcdmeapi.nci.nih.gov:8080/collection +Wrote results into /data/kopardevn/HPCDMELOG/tmp/getCollections_Records20241010.txt +Cmd process Completed +Oct 10, 2024 4:43:09 PM org.springframework.shell.core.AbstractShell handleExecutionResult +INFO: CLI_SUCCESS ``` -Done! - -> **NOTE FOR LARGE FILES**: It is recommended by HPCDME staff that files to be transferred should not be too large (1TB or smaller). Hence, if the file to be transferred is larger than 1TB, it should be split into 1TB-size chunks and upload those. -> Splitting can be done like this: -> ```bash -> split -b 1T ccbr796.tar.gz "ccbr796.tar.gz.part_" -> ``` -> Metadata needs to be individidually created for each of the parts, namely, `ccbr796.tar.gz.part_aa`, `ccbr796.tar.gz.part_ab`, etc -> ```bash -> % /data/kopardevn/SandBox/pyrkit/src/meta combined --input /data/CCBR/projects/ccbr796.tar.gz.part_aa --output /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis -> % /data/kopardevn/SandBox/pyrkit/src/meta combined --input /data/CCBR/projects/ccbr796.tar.gz.part_ab --output /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis -> ... -> ``` -> Next each 1TB part can be registered like so: -> ```bash -> % dm_register_dataobject_multipart /data/CCBR/projects/ccbr796.tar.gz.part_aa.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis/ccbr796.tar.gz.part_aa /data/CCBR/projects/ccbr796.tar.gz.part_aa -> % dm_register_dataobject_multipart /data/CCBR/projects/ccbr796.tar.gz.part_ab.metadata.json /CCBR_Archive/GRIDFTP/Project_CCBR-796/Analysis/ccbr796.tar.gz.part_ab /data/CCBR/projects/ccbr796.tar.gz.part_ab -> ... -> ``` -> Once these files are downloaded then can be joined together using the `cat` command before ungzipping/untaring. -> ```bash -> % cat ccbr796.tar.gz.part_* > ccbr796.tar.gz -> ``` \ No newline at end of file +
+ +> :warning: Reach out to [Vishal Koparde](mailto:vishal.koparde@nih.gov) in case you run into issues. \ No newline at end of file diff --git a/docs/HPCDME/verification.png b/docs/HPCDME/verification.png new file mode 100644 index 0000000000000000000000000000000000000000..d69133e7cbbf374627c770e92086bc42d3c3adff GIT binary patch literal 39155 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%0DH>|38_##zsdV(hT3MuSOs=iEXDiJiCQ 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 YVmDv$zDmgvyx$=s{mXhqx{e|L0|$j0hX4Qo literal 0 HcmV?d00001