ECL (Enterprise Control Language) es un lenguaje de programación declarativo centrado en datos diseñado en 2000 para permitir que un equipo de programadores procese big data en un clúster de computación de alto rendimiento sin que el programador esté involucrado en muchas de las decisiones imperativas de nivel inferior. [1] [2]
Paradigma | declarativo , estructurado , centrado en datos |
---|---|
Desarrollador | HPCC Systems® , LexisNexis Risk Solutions |
Apareció por primera vez | 2000 |
Disciplina de mecanografía | estático , fuerte , seguro |
SO | Linux |
Sitio web | http://hpccsystems.com/ |
Influenciado por | |
Prólogo , Pascal , SQL , Snobol4 , C ++ , Clarion |
Historia
ECL fue inicialmente diseñado y desarrollado en 2000 por David Bayliss como una herramienta de productividad interna dentro de Seisint Inc y se consideró como un "arma secreta" que permitió a Seisint ganar cuota de mercado en su negocio de datos. Equifax tenía un proceso basado en SQL para predecir quién iría a la quiebra en los próximos 30 días, pero la ejecución de los datos tardó 26 días. La primera implementación de ECL resolvió el mismo problema en 6 minutos. La tecnología fue citada como una fuerza impulsora detrás de la adquisición de Seisint por LexisNexis y luego nuevamente como una fuente importante de sinergias cuando LexisNexis adquirió ChoicePoint Inc. [3]
Construcciones del lenguaje
ECL, al menos en su forma más pura, es un lenguaje declarativo centrado en datos. Los programas, en el sentido más estricto, no existen. Más bien, una aplicación ECL especificará una serie de conjuntos de datos básicos (o valores de datos) y luego las operaciones que se realizarán en esos valores.
Hola Mundo
ECL debe tener soluciones sucintas a los problemas y a los incumplimientos razonables. El programa "Hello World" es característicamente corto:
'Hola Mundo'
Quizás un ejemplo más sabroso tomaría una lista de cadenas, las ordenaría y luego devolvería eso como resultado.
// Primero declare un conjunto de datos con una columna que contiene una lista de cadenas // Los conjuntos de datos también pueden ser binarios, CSV, XML o estructuras definidas externamenteD : = DATASET ([{ 'ECL' }, { 'Declarative' }, { 'Data' }, { 'Centric' }, { 'Programming' }, { 'Language' }], { STRING Value ;}); DE : = CLASIFICAR ( D , Valor ); salida ( SD )
Las declaraciones que contienen a :=
se definen en ECL como definiciones de atributo. No denotan una acción; más bien una definición de un término. Así, lógicamente, un programa ECL puede leerse: "de abajo hacia arriba"
SALIDA (SD)
¿Qué es una SD?
DE : = CLASIFICAR ( D , Valor );
SD es una D que ha sido ordenada por 'Valor'
¿Qué es una D?
D : = DATASET ([{ 'ECL' }, { 'Declarative' }, { 'Data' }, { 'Centric' }, { 'Programming' }, { 'Language' }], { STRING Value ;});
D es un conjunto de datos con una columna etiquetada como 'Valor' y que contiene la siguiente lista de datos.
Primitivas ECL
Las primitivas ECL que actúan sobre conjuntos de datos incluyen SORT, ROLLUP, DEDUP, ITERATE, PROJECT, JOIN, NORMALIZE, DENORMALIZE, PARSE, CHOSEN, ENTH, TOPN, DISTRIBUTE
Encapsulación ECL
Si bien ECL es conciso y LexisNexis afirma que 1 línea de ECL es aproximadamente equivalente a 120 líneas de C ++, todavía tiene un soporte significativo para la programación a gran escala, incluida la encapsulación de datos y la reutilización de código. Las construcciones disponibles incluyen MODULE, FUNCTION, FUNCTIONMACRO, INTERFACE, MACRO, EXPORT, SHARED
Soporte para paralelismo en ECL
En la implementación de HPCC , de forma predeterminada, la mayoría de las construcciones ECL se ejecutarán en paralelo en todo el hardware que se utilice. Muchas de las primitivas también tienen una opción LOCAL para especificar que la operación ocurrirá localmente en cada nodo.
Comparación con Map-Reduce
El paradigma Hadoop Map-Reduce consta de tres fases que se correlacionan con las primitivas ECL de la siguiente manera.
Nombre / término de Hadoop | Equivalente ECL | Comentarios |
---|---|---|
Mapeo dentro del MAPper | PROYECTO / TRANSFORMAR | Toma un registro y lo convierte a un formato diferente; en el caso de Hadoop , la conversión se realiza en un par clave-valor |
ALEATORIA (Fase 1) | DISTRIBUIR (, HASH (KeyValue)) | Los registros del asignador se distribuyen según el valor de CLAVE |
ALEATORIA (Fase 2) | CLASIFICAR (, LOCAL) | Los registros que llegan a un reductor en particular se clasifican en orden CLAVE |
REDUCIR | ROLLUP (, clave, LOCAL) | Los registros para un valor de CLAVE particular ahora se combinan |
Referencias
- ^ Una guía de ECL , Lexis-Nexis .
- ^ "Evaluación del uso de sistemas de flujo de datos para análisis de gráficos grandes", por A. Yoo e I. Kaplan. Actas del segundo taller sobre computación de múltiples tareas en redes y supercomputadoras, MTAGS, 2009
- ^ "Adquisición de Seisint" . Archivado desde el original el 21 de junio de 2011 . Consultado el 24 de marzo de 2011 .