Nextflow: 기본 개념
Nextflow enables scalable and reproducible scientific workflows using software containers. It allows the adaptation of pipelines written in the most common scripting languages.
Its fluent DSL simplifies the implementation and the deployment of complex parallel and reactive workflows on clouds and clusters.
https://www.nextflow.io/
En el artículo anterior Vimos는 Nextflow를 소개합니다. En este vamos a profundizar un poco más en los conceptos básicos de este lenguaje
관로
Podemos는 파이프라인을 정의하고 Nextflow를 현실화하기 위해 필요한 작업을 수행합니다. Básicamente es asociarlo con el fichero (y sus 포함) a ejecutar
프로세스
El proceso, process, es la unidad básica a ejecutar. Podemos asociarlo con el comando de sistema a ejecutar para completar una tarea. Dicho comando tendrá unos parametros de entrada y generará una salida.
Así mismo los procesos son independientes y no comparten un estado común sino que se comunican entre sí mediante colas(o canales)
채널
Un canal es el mecanismo por el cual los procesos se intercambian datos. Cuando definimos un proceso declaramos su input pero no especificamos de donde leer este input. Es mediante los canales (y sus operatores) donde realizamos esta interconexión o dependsencia
Flujo de trabajo
그는 "atómicas"를 unidades "atómicas"e independientes que lo único que necesitan para su ejecución es disponer de los datos de entrada que definan(y producir unos datos de salida también definidos por el propio proceso)라고 생각합니다.
Así pues, podemos pensar que al inicio de nuestro pipeline todos los procesos se encuentran creados y a la espera de "ser alimentados". Dicha alimentación se realiza a través de los diferentes operatores que ofrece un Channel:
hola.nf
process goodbye {
input:
path name
output:
stdout
"""
cat $name
"""
}
process hi {
input:
val name
output:
path "name.txt"
"""
echo Hi $name > name.txt
"""
}
workflow {
Channel.of( 'Jorge' ) | hi | goodbye | view
}
En este ejemplo podemos ver dos procesos definidos (안녕히 가세요)
path
) y en su contexto lo vamos a referencename.
Su ejecución va a consistir en volcar (
cat`) dicho fichero por la consola, emitiendo la salida val
) y en su contexto la vamos a referenciar como name
(작별인사 없음). Dicho proceso va a concatenar una cadena fija con el parametro de entrada para generar un fichero de trabajo name.txt
y emitirá la ruta de este fichero Por último definimos el flujo de trabajo:
hi
. La salida de este será enviada por el canal al proceso goodbye
y por ultimo la salida de este será volcada por consola( view
) Como podemos intuir, el orden de ejecución de los procesos no viene determinado por su posición en el fichero sino por la composición del flujo de trabajo. De esta manera Nextflow nos permitirá definir (y reutilizar) procesos en diferentes ficheros y componerlos a nuestro antojo
En los siguientes artículos iremos viendo, entre otras cosas, cómo ejecutar procesos en paralelo
집행자
Mientras que el proceso define el comando a ejecutar, el executor es el que define cómo se ejecutará dicho comando.
El executor por defecto es la máquina donde se está ejecutando el pipeline pero, sin modificar este, podemos indicarle a Nextflow qué executor usar como por ejemplo un cluster SLURM, un container de Amazon o de Google, etc
Así por ejemplo, cuando le indicamos a Nextflow que un pipeline lo ejecute, por ejemplo, en AWS él se encargará de aprovisionar la instancia, esperar a que se encuentre lista y ejecutar el script en esta (en realidad usando las APIs del executor en concreto)
프로그램
La idea principal de Nextflow es que con la sintaxis que ofrece se disponga prácticamente de todas las herramientas para definir pipelines complejos, pero aun así permite incluir scripts con toda la complejidad que se desee.
Al estar desarrollado en Groovy es posible incluir scripts en el propio pipeline que nos ayuden a ampliar el lenguaje. Así mismo permite la inclusión de librerías Java (jar) simplemente colocándolas en la carpeta lib
random.nf
`
def cadenaRandom(){
new Random().with {(1..9).collect {(('a'..'z')).join()[nextInt((('a'..'z')).join().length())]}.join()}
}
process hi {
input:
val name
output:
stdout
"""
echo $name is a random string
"""
}
workflow {
Channel.of( cadenaRandom() ) | hi | view
}
nextflow run ./random.nf
N E X T F L O W ~ version 22.04.5
Launching ./dos.nf
[friendly_fourier] DSL2 - 개정판: d0b1349f31
실행자 > 로컬(1)
[65/ee7786] 프로세스 > hi (1) [100%] 1 of 1 ✔
lswwkzafv는 임의의 문자열입니다.
`
결론
En este artículo hemos visto las piezas básicas que componen un flujo de trabajo así como una breve introducción a la definición y ejecución de los procesos
Reference
이 문제에 관하여(Nextflow: 기본 개념), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jagedn/nextflow-conceptos-basicos-52hk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)