El lenguaje de programación procedimental en Greenplum (2)

Tabla de contenido

1. Introducción a PL / R

En segundo lugar, instale el paquete R

2.1 Instalar la colección de paquetes R de cálculo de datos de Greenplum

Tres, PL / Contenedor

3.1 Proceso de ejecución del programa PL / Container

3.2 Ventajas de PL / Container

Cuatro, apéndice


1. Introducción a PL / R

R es otro lenguaje ampliamente utilizado en el campo de la ciencia de datos (como el aprendizaje automático). Los ingenieros de datos con experiencia en lenguaje R pueden usar PL / R para escribir código y luego ejecutarlo en paralelo en todos los nodos de Greenplum. Como PL / Python, PL / R es un lenguaje de programación procedimental que no es de confianza. Antes de crear PL / R, primero debe instalar el paquete de instalación de R y el paquete de instalación de PL / R. Debido a la relación de autorización de licencia de software (R y PL / R son acuerdos GPL y Greenplum no lo es), Greenplum PL / R y el código base principal de Greenplum no están juntos, sino que se encuentran en la siguiente dirección: https: // github .com / greenplum- El código base db / plr contiene código de integración continua para generar archivos binarios R y PL / R. Los lectores pueden implementar CI y luego generar un paquete de formato gppkg que contenga R y PL / R. Por supuesto, también puede descargar el paquete de instalación de gppkg binario compilado desde el sitio web oficial de Pivotal. Tenga en cuenta que la versión de R en Greenplum 5.X es 3.3.3, y esta versión ha sido probada.

Utilice gppkg para instalar paquetes R y PL / R en todos los nodos de Greenplum:

Como PL / Python, antes de usar PL / R, necesitamos llamar a createlang para instalar PL / R en la base de datos de postgres:

 bin]$ createlang plr -d postgres
createlang: language installation failed: ERROR:  could not open extension control file "/usr/local/greenplum-db-6.2.1/share/postgresql/extension/plr.control": No such file or directory

Ejemplo simple de PL / R 

Ejemplo de llamada a la función PL / R para generar una tabla de distribución exponencial:

PL / R proporciona algunas funciones auxiliares, que no están instaladas de forma predeterminada, porque no todas las funciones PL / R necesitan estas funciones. Si el usuario lo necesita, puede instalarlo y cargarlo usted mismo. Los comandos para instalar estas funciones auxiliares son los siguientes:

Instale las funciones auxiliares necesarias en una sesión. Por ejemplo, la siguiente función nos permite hacer referencia a algunos TYPENAMEOID internos, como INT4OID, en la función PL / R.

Debido a las limitaciones de espacio, este capítulo no presenta en detalle las funciones admitidas por PL / R. Los lectores interesados ​​pueden consultar los siguientes recursos:

  • https://gpdb.docs.pivotal.io/5180/ref_guide/extensions/pl_r.html
  • http://www.joeconway.com/doc/index.html

Si ya no usa PL / R, puede llamar al siguiente comando para eliminarlo en la base de datos de postgres.

Si necesita eliminar por completo el paquete PL / R del paquete Greenplum, primero debe llamar a la herramienta gppkg para eliminar los paquetes PL / R y R gppkg y luego reiniciar el clúster.

En segundo lugar, instale el paquete R

2.1 Instalar la colección de paquetes R de cálculo de datos de Greenplum

Para comodidad de los usuarios, como PL / Python, la versión Greenplum de Pivotal también proporciona un paquete de lenguaje R que contiene bibliotecas relacionadas con la ciencia de datos de uso común. El método de instalación y desinstalación es similar al paquete de Python, por lo que no lo repetiré aquí. La función PL / R en Greenplum es básicamente la misma que la función PL / R en PostgreSQL. Similar a PL / Python, la conversión de tipos debe proporcionarse al entrar y salir de la función. También es compatible con la función para almacenar datos compartidos . tal como:

Solo la función install_rcmd () no se admite temporalmente en Greenplum 5.X, pero Greenplum 6 planea admitir esta función (esta función depende de una nueva tabla de funciones replicada en Greenplum 6, y esta función está actualmente implementada en el código Greenplum 6)

Tres, PL / Contenedor

PL / Container es un lenguaje de programación procedimental que ejecuta múltiples UDF de lenguaje de programación en contenedores Docker. El usuario establece el nombre de la configuración en el código UDF. El nombre de la configuración corresponde a la imagen en ejecución del contenedor Docker, el programa de análisis (R, Python) que se ejecuta después de que se inicia el contenedor y la configuración del tiempo de ejecución del contenedor. Los lenguajes de programación analítica admitidos actualmente son Python y R. Funcionalmente, los programas Python y R en PL / Container son compatibles con muchas funciones internas de PL / Python y PL / R. El número de versión actual de PL / Container es 1.2.0. PL / Container fue desarrollado y de código abierto por Pivotal, y ahora es compatible con CentOS 6, CentOS 7, RedHat Enterprise Linux 6 o Red Hat Enterprise Linux 7. El punto de partida para implementar PL / Container es resolver el problema de que PL / Python y PL / R no son un lenguaje de programación procedimental confiable. Dado que no es fácil crear una caja de arena para ejecutar código R o Python, consideramos usar la tecnología de contenedores para construir una caja de arena a nivel del sistema. Además, PL / Container tiene algunas otras ventajas, que presentaremos más adelante. PL / Container actualmente es compatible con Greenplum y PostgreSQL.

3.1 Proceso de ejecución del programa PL / Container

Como puede verse en la figura, diferentes idiomas corresponden a diferentes procedimientos de procesamiento. En la etapa inicial, el ejecutor extrae los elementos de configuración del entorno operativo analizando el código UDF y luego inicia el contenedor correspondiente a través de la API de Docker. Después de que se inicia el contenedor, el ejecutor y el programa en el contenedor pasan el protocolo de enlace PING / PONG, luego establecen una conexión a través de IPC o la red, y luego se comunican usando un protocolo privado. Para el código relacionado con el lenguaje (Python o R), el programa back-end llama al intérprete del lenguaje correspondiente para que lo interprete y ejecute, y finalmente devuelve el resultado al ejecutor. Si es necesario (por ejemplo, para llamadas SPI, el programa de back-end no puede manejarlo en este momento), el programa de back-end enviará la solicitud al ejecutor para su ejecución, y luego enviará el resultado al back-end. programa de procesamiento. Preste atención al ciclo de vida de todo el contenedor. El contenedor se inicia cuando la UDF de PL / Container se ejecuta por primera vez, y luego se reutiliza después de establecer una conexión con el ejecutor, hasta que la sesión sale (el proceso ejecutor sale) o la UDF sale activamente (el código de salida es llamado activamente en la función de usuario). Esto mejorará enormemente el rendimiento, porque arrancar y detener un contenedor requiere un precio determinado. En otras palabras, los pasos 8 a 10 de la figura se repetirán hasta que finalice la sesión.

3.2 Ventajas de PL / Container

1) PL / Container es un lenguaje de programación de procedimientos seguro: debido a que el código Python o R se ejecuta en un contenedor Docker, los usuarios no pueden acceder ni crear archivos en el host Greenplum, ni pueden acceder directamente a la base de datos Greenplum., Los usuarios ordinarios de la base de datos pueden crear y ejecutar funciones basadas en R o Python.

2) Los errores de código de usuario pueden estar bien aislados: cuando se ejecutan UDF en estos lenguajes de programación de procedimientos, el programa puede fallar debido a errores de código de usuario o porque algunas bibliotecas son inestables. El clúster de base de datos de Greenplum a veces debe reiniciarse para evitar la corrupción de datos. Si colocamos el código Python o R del usuario en un contenedor separado para que se ejecute, incluso si el programa que ejecuta el código Python o R falla, la consulta SQL solo informará la falla sin afectar el clúster y otras sesiones en el clúster.

3) Compatibilidad con múltiples versiones de Python / R: No es conveniente que PL / Python y PL / R implementen múltiples versiones diferentes en una máquina al mismo tiempo. Pero para PL / Container, podemos crear diferentes imágenes para diferentes versiones para completar fácilmente el soporte de múltiples versiones.

4) Control de recursos: Greenplum admite la función de grupo de recursos para realizar el control de recursos (memoria y CPU), pero el código del lenguaje de programación procedimental en sí no se puede tocar para la granularidad del control de la memoria. Debido a que el control de la memoria en Greenplum se realiza a través de la función de asignación de memoria incorporada (incluidas las estadísticas), y la gestión de la memoria en el lenguaje de programación procedimental generalmente se realiza mediante el lenguaje mismo, que no es percibido por el kernel de Greenplum. PL / Container desacopla la parte del ejecutor de la base de datos y la parte del código de interpretación del lenguaje de programación procedimental Podemos controlar fácilmente el uso de recursos por el lenguaje de programación procedimental a través del control de recursos de Docker.

5) Fácil de extender: una extensión es a nivel de idioma. Greenplum ha intentado extraer los códigos comunes de diferentes idiomas. En este momento, si agregamos soporte para un idioma, podemos enfocarnos más en el código relevante del propio idioma. . Otra extensión es el nivel de back-end. Aunque el código PL / Container actualmente solo admite contenedores Docker, su implementación abstrae la API de back-end, lo que facilita que PL / Container admita diferentes interfaces. Por ejemplo, puede escribir un back-end que no requiera un contenedor, pero que solo necesite un proceso separado para interpretar las funciones del lenguaje de programación procedimental (esto pierde seguridad pero puede aislar errores de código de usuario); o implementar un sistema operativo en la nube basado en contenedores En el back-end, el control de la gestión de recursos será otra situación en este momento.

Cuatro, apéndice

Otras lecturas

  • ❏https: //gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_python.html
  • ❏https: //gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_r.html
  • ❏http: //www.joeconway.com/plr.html
  • ❏https: //gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_container.html

 

Supongo que te gusta

Origin blog.csdn.net/MyySophia/article/details/113835841
Recomendado
Clasificación