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/
Nextflow es un proyecto OpenSource muy usado sobre todo por la comunidad bioinformática (debido a que sus creadores trabajaban en esta área,) pero que puede ser usado en otros ámbitos y que básicamente permite definir procesos que puedan ser ejecutados de forma paralela tanto en local como en cloud sin tener que cambiarlos.
Para ello se ha creado un DSL(un lenguaje específico) en donde define los procesos, con sus entradas, salidas, etc, y el flujo de llamadas entre los mismos. Este "pipeline"es ejecutado por Nextflow en el entorno que le digas y él se encarga de aprovisionar los recursos necesarios para ejecutarlo y vigilar su ejecución.
El DSL es agnóstico a lo que tú quieras ejecutar. Es decir, puedes definir un proceso que recibe la ruta de un fichero como parametro de entrada y tú 결정 qué hacer con él: que Python lo ejecute, volcarlo a la salida con un
cat
, ejecutar un programa de procesado de imágenes, … Lo único que "necesita"Nextflow es que el exitStatus
del programa le diga si ha ido bien o no para poder continuar con el resto de tareasVamos a verlo con un
hello-world
메인.nf
process sayHello {
input:
val x
output:
stdout
script:
"""
echo '$x world!'
"""
}
workflow {
sayHello('hola') | view
}
En este pipeline creamos un process
sayHello
que recibe un String
, su retorno va a ser un volcado de la ejecución, y que lo que va a ejecutar es un comando de bash echo
Por otra parte, se define el workflow del proceso, el qué ejecutar y en qué orden. En este ejemplo simplemente vamos a ejecutar el proceso anterior y vamos a volcar su salida por pantalla
nextflow run ./hola.nf
N E X T F L O W ~ version 22.04.5
Launching `./hola.nf` [jolly_shaw] DSL2 - revision: 3df369f295
executor > local (1)
[9a/eed166] process > sayHello [100%] 1 of 1 ✔
hola world!
Podríamos ejecutar el mismo proceso via Docker:
nextflow run ./hola.nf -with-docker -process.container=ubuntu
N E X T F L O W ~ version 22.04.5
Launching `./hola.nf` [fervent_wescoff] DSL2 - revision: 3df369f295
executor > local (1)
[bf/f66b2d] process > sayHello [100%] 1 of 1 ✔
hola world!
Obviamente al ser un simple echo no hay diferencia, pero la idea es que podrías ejecutar el comando usando la imagen que te venga bien sin tener que instalar nada en tu equipo (más que Docker)
Además de Docker, puedes ejecutar el proceso contra numerosos servicios de cloud como AWS, Google, Azure, Kubernetes, …
설치
Nextflow requiere tener instalada una version de Java moderna, aunque también corre con la version 11.
간단한 설치를 위한 설치:
curl -s https://get.nextflow.io | bash
(para más detalle Consultar la página official https://www.nextflow.io/ )
Si todo ha ido bien y creas el fichero anterior deberías poder ejecutar el comando tal como se muestra en el apartado anterior.
카날레스
Nextflow는 다양한 프로세스를 정의하고 프로세스를 정의하고 프로세스를 종료할 때까지 프로세스를 종료해야 합니다(병렬, 종속 항목).
Para ello usa el concepto de
Channel
Y operators
. Un channel podemos verlo como el main
de un flujo de procesos y donde "concatenamos"la ejecución de los mismosVamos a modificar el ejemplo anterior:
process sayHello {
input:
val x
output:
stdout
script:
"""
echo '$x world!'
"""
}
workflow {
Channel.of('Bonjour', 'Ciao', 'Hello', 'Hola') | sayHello | view
}
Channel.of
recibe una lista de objetos y por cada uno de ellos invoca al proceso sayHello
모스트란도 라 살리다 데 카다 우노N E X T F L O W ~ version 22.04.5
Launching `./hola.nf` [golden_panini] DSL2 - revision: 68e7da3913
executor > local (4)
[ea/bb9b4b] process > sayHello (2) [100%] 4 of 4 ✔
Bonjour world!
Hola world!
Hello world!
Ciao world!
of
es sólo uno de los muchos operatores que ofrece Channel
(con el añadido de que puedes crear los tuyos si echas en falta alguno). Hay operatores para filtrar, transformar, combinar, paralelizar 등Channel
.from( 'a', 'b', 'aa', 'bc', 3, 4.5 )
.filter( Number )
.view()
Channel
.from( 1, 2, 3, 4, 5 )
.filter { it % 2 == 1 }
.view()
Channel
.from(1,2,3,40,50)
.branch {
small: it < 10
large: it > 10
}
.set { result }
결론
En próximos post espero poder ir explicando más funcionalidades y casos de uso. Por ahora basta deecir que … está implementado en Groovy y que formo parte del equipment de desarrollo
Reference
이 문제에 관하여(Nextflow 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jagedn/introduccion-a-nextflow-2jc5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)