Database

SAS y Hadoop: Cómo mantener el poder del procesamiento paralelo

Simon 23/09/2021 3 vues

Una idea errónea persiste entre los usuarios históricos de SAS© que se enfrentan al Big Data: "Para analizar mis datos de Hadoop con SAS©, primero debo extraerlos de HDFS, convertirlos en tablas SAS© locales y luego ejecutar mi PROC SQL."

Este enfoque (ETL clásico) no solo es ineficaz, sino que anula la principal ventaja de Hadoop: el procesamiento paralelo distribuido. Si mueve petabytes de datos a un único servidor SAS© (Compute Server), crea un cuello de botella masivo.

La respuesta moderna (desde SAS© 9.4) se basa en el principio del "Procesamiento en Base de Datos": mover el código a los datos, y no al revés. Aquí están las tres tecnologías clave para integrar SAS© y Hadoop sin perder la paralelización.

1. PROC FEDSQL: La Nueva Generación de SQL

Si está acostumbrado a PROC SQL, sabe que tiene limitaciones en un entorno distribuido. A menudo tiende a traer los datos para realizar uniones u ordenamientos localmente (en el servidor SAS©).

La solución: PROC FEDSQL Introducida con SAS© 9.4, FedSQL es una implementación propietaria del estándar ANSI SQL:1999, diseñada específicamente para el procesamiento "Escalable".

  • Funcionamiento: FedSQL actúa como un traductor inteligente. Cuando apunta a Hadoop (a través de Hive o Impala), intenta traducir su consulta a un dialecto nativo (HiveQL o Impala SQL) y ejecutarla directamente en el clúster.

  • Ventaja: Las uniones, filtros y agregaciones son ejecutadas por los nodos de Hadoop en paralelo. Solo el resultado final (a menudo pequeño) se devuelve a SAS©.

  • Conectividad: Soporta Hive, HAWQ e Impala.

1/* Exemple FedSQL exécuté DANS Hadoop */
2PROC FEDSQL sessref=myHadoopSession;
3 select region, sum(sales)
4 from HadoopLib.LargeSales
5 group BY region;
6QUIT;

2. El Lenguaje DS2 y el "Code Accelerator"

El DATA Step clásico de SAS© es secuencial y monohilo (procesa una línea tras otra en un solo procesador). Por lo tanto, es incompatible con la naturaleza distribuida de Hadoop.

La solución: El lenguaje DS2 DS2 es el sucesor multihilo del Data Step. Incluye conceptos de programación orientada a objetos y tipado fuerte, pero sobre todo, está diseñado para la ejecución paralela.

  • SAS© In-Database Code Accelerator: Es el componente mágico. Permite tomar un programa DS2 escrito en su interfaz SAS© y enviarlo ("push") para que se ejecute dentro de los nodos de datos de Hadoop (en forma de tareas MapReduce o a través de Spark según las versiones).

  • Data Program & Thread Program: El programa de datos y los hilos de procesamiento se ejecutan en paralelo en cada nodo del clúster, explotando toda la potencia de la CPU disponible en su infraestructura de Big Data.

3. SAS© SPD Engine (SPDE) sobre HDFS

A veces, necesita la estructura física de una tabla SAS© (indexación, compresión, metadatos precisos) pero desea almacenar esos datos en el sistema de archivos distribuido (HDFS) para la fiabilidad y la velocidad de E/S.

La solución: Scalable Performance Data Engine (SPDE) El motor SPDE permite almacenar tablas en formato SAS© directamente en HDFS.

  • Particiona los datos (archivos de datos .dpf, archivos de índice .hbx, metadatos .mdf).

  • Esto permite a SAS© leer y escribir en paralelo desde varios nodos, ofreciendo velocidades de E/S muy superiores a un almacenamiento en disco clásico, manteniendo los datos "accesibles" como si fueran locales.

NecesidadTecnología RecomendadaLugar de Ejecución
Consultas SQL (Uniones, Agregaciones)PROC FEDSQLDistribuido en Hadoop (vía Hive/Impala)
Transformaciones complejas, Calidad de DatosLenguaje DS2 (+ Code Accelerator)Distribuido en Hadoop (Nodos de cálculo)
Almacenamiento de alto rendimiento en formato SAS©SPD EngineDistribuido sobre HDFS
Lectura de archivos de texto sin formatoSAS©/ACCESS a Hadoop (Hive)Hadoop (vía capa Hive)

No realice ETL masivo hacia SAS©. Utilice FedSQL y DS2 para empujar la lógica de procesamiento hacia el clúster. Así conservará la ventaja del paralelismo de Hadoop mientras codifica desde su entorno SAS© familiar.