# Programación con datos masivos en R

La programación con datos masivos en R (pbdR, a partir del inglés Programming with Big Data in R) es una serie de paquetes R y un entorno para el cálculo estadístico con grandes volúmenes de datos mediante el uso de la programación de alto rendimiento estadístico. La pbdR utiliza el mismo lenguaje de programación que R con clases y métodos S3/S4 los cuales son usados entre los estadísticos y la minería de datos para el desarrollo de software estadístico. La diferencia significativa entre pbdR y el código R es que pbdR se centra principalmente en la memoria distribuida de los sistemas, donde los datos son distribuidos a través de varios procesadores y analizados en un modo por lotes, mientras que las comunicaciones entre procesadores se basan en MPI que se utiliza con gran facilidad en sistemas de computación de alto rendimiento (HPC). El sistema R se centra principalmente en máquinas simples multi-núcleo para el análisis de datos a través de un modo interactivo, tal como la interfaz gráfica de usuario.
Las dos implementaciones principales en R utilizando MPI son Rmpi y pbdMPI de la pbdR.
* La pbdR construida sobre pbdMPI utiliza paralelismo SPMD donde cada procesador se considera como esclavo y posee partes de los datos. El paralelismo SPMD introducido a mediados de 1980 es particularmente eficaz en entornos de cómputo homogéneos para datos de gran tamaño, por ejemplo, realizar la descomposición de valores singulares en una matriz grande, o realizar el análisis de clustering en grandes cantidades de datos de alta dimensión. Por otro lado, no hay ninguna restricción para utilizar paralelismo maestro/esclavo en entornos de paralelismo SPMD
* El Rmpi utiliza paralelismo maestro/esclavo donde un procesador principal (maestro) sirve como el control de los otros procesadores (esclavos). El paralelismo maestro/esclavo introducido a principios del 2000 es particularmente eficaz para tareas grandes en clusters pequeños, por ejemplo, el método bootstrap y la simulación Monte Carlo en estadística aplicada desde probabilidades i.i.d. es generalmente más utilizada en análisis estadístico. En particular, el paralelismo de extracción de tareas tiene mejor rendimiento para Rmpi en entornos de cómputo heterogéneos.
La idea del paralelismo PMD es para dejar que cada procesador haga la misma cantidad de trabajo, pero en partes diferentes de un conjunto grande de datos. Por ejemplo, un moderno GPU es una colección grande de coprocesadores más lento que pueden simplemente aplicar el mismo cálculo en partes diferentes sobre datos relativamente más pequeños, pero el paralelismo SPMD acaba con una manera eficaz de obtener soluciones finales (es decir, cronometrar que la solución sea más corta). Es claro que pbdR no es solo propio para clusters pequeños, sino también más estable para analizar grandes volúmenes de datos y más escalable para supercomputadoras. En resumen, pbdR
* No le gusta el RMPI, ni paquetes paralelos en R,
* No se centra en programación interactiva ni maestros/esclavos,
* Pero es capaz de utilizar ambos paralelismos SPMD y de tarea.

## Diseño de paquetes

La pbdR requiere el uso de varios paquetes desarrollados por el equipo núcleo pbdR. Los paquetes desarrollados son los siguientes.
| General | I/O | Computación | Aplicación | Personalización | Cliente/Servidor |
| pbdDEMO | pbdNCDF4 | pbdDMAT | pmclust | pbdPROF | pbdZMQ |
| pbdMPI | pbdADIOS | pbdBASE | pbdML | pbdPAPI | remoter |
| | | pbdSLAP | | hpcvis | pbdCS |
Entre estos paquetes, pbdMPI proporciona capas de funciones para una biblioteca MPI, y también produce una biblioteca compartida y un archivo de configuración para entornos MPI. Todos los demás paquetes confían en esta configuración para la instalación y carga de la biblioteca que evita dificultades de la biblioteca de enlaces y compilación. Todos los demás paquetes pueden utilizar fácil y directamente funciones MPI.
* pbdMPI - Una interfaz eficaz para cualquier MPI OpenMPI o MPICH2 con énfasis en programas simples/datos múltiples (SPMD) estilo de programación paralela.
* pbdSLAP - Incluye bibliotecas de álgebra lineal densa y escalable de doble precisión para R, basado en ScaLAPACK versión 2.0.2 el cual incluye varios paquetes de álgebra lineal escalables (denominados BLACS, PBLAS, y ScaLAPACK).
* pbdNCDF4 - interfaz para unidatos paralelos NetCDF4 formato de archivos de datos
* pbdBASE - Bajo nivel de códigos y capas ScaLAPACK
* pbdDMAT - Clases matriciales distribuidas y métodos de programación, con enfoque en álgebra lineal y estadística.
* pbdDEMO - Conjunto de paquetes de demostraciones y ejemplos, y esta viñeta unificada.
* pmclust - Modelo paralelo basado en clustering utilizando pbdR
* pbdPROF - Paquete de perfiles para códigos MPI y la visualización del análisis estadístico
* pbdZMQ - Interfaz para ØMQ
Entre aquellos paquetes, el paquete pbdDEMO es una colección de 20 o más paquetes demos, los cuales ofrecen ejemplos de uso de varios paquetes pbdR, y contiene una viñeta que ofrece explicaciones detalladas para los demos y ayuda a comprender mejor la matemática o estadística.

## Ejemplos
### Ejemplo 1

Hola Mundo! Guarde el siguiente código en un archivo llamado "demo.r"
y utiliza la orden
para ejecutar el código en el que Rscript es un programa ejecutable de línea de comandos.

### Ejemplo 2

El siguiente ejemplo modificado desde pbdMPI ilustra la sintaxis básica del lenguaje de pbdR. Ya que pbdR está diseñado en SPMD, todo los scripts de R están almacenados en archivos y ejecutados desde la línea de comandos a través de mpiexec, mpirun, etc. Guardar el siguiente código en un archivo llamado "demo.r"
y utiliza la orden
para ejecutar el código en el que Rscript es un programa ejecutable de línea de comandos.

### Ejemplo 3

El siguiente ejemplo modificado de la pbdDEMO ilustra el cálculo de la matriz básica de pbdR el cual realiza la descomposición de valores singulares en una matriz dada. Guardar el siguiente código en un archivo llamado "demo.r"
y utiliza la orden
para ejecutar el código en el que Rscript es un programa ejecutable de línea de comandos.

## Lecturas recomendadas

* Raim, A.M. (2013). Introduction to distributed computing with pbdR at the UMBC High Performance Computing Facility (PDF) (Technical report). UMBC High Performance Computing Facility, University of Maryland, Baltimore County. HPCF-2013-2.
* Bachmann, M.G., Dyas, A.D., Kilmer, S.C. and Sass, J. (2013). Block Cyclic Distribution of Data in pbdR and its Effects on Computational Efficiency (PDF) (Technical report). UMBC High Performance Computing Facility, University of Maryland, Baltimore County. HPCF-2013-11.
* Bailey, W.J., Chambless, C.A., Cho, B.M. and Smith, J.D. (2013). Identifying Nonlinear Correlations in High Dimensional Data with Application to Protein Molecular Dynamics Simulations (PDF) (Technical report). UMBC High Performance Computing Facility, University of Maryland, Baltimore County. HPCF-2013-12.
* Dirk Eddelbuettel. "High-Performance and Parallel Computing with R".
* "R at 12,000 Cores". Este artículo fue leído 22,584 veces en 2012 desde su publicación el 16 de octubre de 2012 y clasificado número 3
* Google Summer of Code - R 2013. https://archive.today/20130629095333/http://rwiki.sciviews.org/doku.php?id=developers:projects:gsoc2013:mpiprofiler.
* Wush Wu (2014). "在雲端運算環境使用R和MPI".
* Wush Wu (2013). "快速在AWS建立R和pbdMPI的使用環境".