ECL (язык программирования, ориентированный на данные) - ECL (data-centric programming language)
Парадигма | декларативный, структурированный, ориентированный на данные |
---|---|
Разработчик | Системы HPCC®, LexisNexis Risk Solutions |
Впервые появился | 2000 |
Печатная дисциплина | статический, сильный, безопасный |
Операционные системы | GNU /Linux |
Интернет сайт | http://hpccsystems.com/ |
Под влиянием | |
Пролог, Паскаль, SQL, Сноболь4, C ++, Clarion |
ECL - это декларативный язык программирования, ориентированный на данные, разработанный в 2000 году, чтобы позволить группе программистов обрабатывать большое количество данных через кластер высокопроизводительных вычислений без участия программиста во многих императивных решениях нижнего уровня.[1][2]
История
ECL был первоначально разработан и разработан в 2000 году Дэвидом Бейлиссом в качестве внутреннего инструмента повышения производительности в рамках Seisint Inc и считалась «секретным оружием», которое позволило Seisint увеличить долю рынка в своем бизнесе данных. У Equifax был процесс на основе SQL для прогнозирования того, кто обанкротится в следующие 30 дней, но для обработки данных потребовалось 26 дней. Первая реализация ECL решила ту же проблему за 6 минут. Технология была названа движущей силой приобретения Seisint компанией LexisNexis а затем снова в качестве основного источника взаимодействия, когда LexisNexis приобрела ChoicePoint Inc.[3]
Языковые конструкции
ECL, по крайней мере в чистом виде, является декларативным языком, ориентированным на данные. Программ в самом строгом смысле слова не существует. Скорее приложение ECL будет указывать количество основных наборов данных (или значений данных), а затем операции, которые должны быть выполнены с этими значениями.
Привет, мир
ECL должен иметь краткие решения проблем и разумные дефолты. Программа «Hello World» характерно короткая:
'Привет, мир'
Возможно, более интересный пример возьмет список строк, отсортирует их по порядку, а затем вернет его в качестве результата.
// Сначала объявляем набор данных с одним столбцом, содержащим список строк// Наборы данных также могут быть двоичными, CSV, XML или внешне определенными структурамиD := НАБОР ДАННЫХ([{'ECL'},{"Декларативный"},{'Данные'},{'Centric'},{'Программирование'},{'Язык'}],{НИТЬ Ценить;});SD := СОРТИРОВАТЬ(D,Ценить);выход(SD)
Заявления, содержащие :=
определены в ECL как определения атрибутов. Они не обозначают действие; скорее определение термина. Таким образом, логически программу ECL можно читать: «снизу вверх»
ВЫХОД (SD)
Что такое SD?
SD := СОРТИРОВАТЬ(D,Ценить);
SD - это буква D, отсортированная по "значению"
Что такое D?
D := НАБОР ДАННЫХ([{'ECL'},{"Декларативный"},{'Данные'},{'Centric'},{'Программирование'},{'Язык'}],{НИТЬ Ценить;});
D - это набор данных с одним столбцом с пометкой «Значение», содержащий следующий список данных.
Примитивы ECL
Примитивы ECL, которые работают с наборами данных, включают SORT, ROLLUP, DEDUP, ITERATE, PROJECT, JOIN, NORMALIZE, DENORMALIZE, PARSE, CHOSEN, ENTH, TOPN, DISTRIBUTE.
ECL инкапсуляция
Хотя ECL краток, и LexisNexis утверждает, что 1 строка ECL примерно эквивалентна 120 строкам C ++, он по-прежнему имеет значительную поддержку для крупномасштабного программирования, включая инкапсуляцию данных и повторное использование кода. Доступные конструкции включают MODULE, FUNCTION, FUNCTIONMACRO, INTERFACE, MACRO, EXPORT, SHARED.
Поддержка параллелизма в ECL
в HPCC реализации, по умолчанию большинство конструкций ECL будут выполняться параллельно на используемом оборудовании. Многие из примитивов также имеют параметр LOCAL, чтобы указать, что операция должна выполняться локально на каждом узле.
Сравнение с Map-Reduce
Парадигма Hadoop Map-Reduce состоит из трех фаз, которые соотносятся с примитивами ECL следующим образом.
Имя / Срок действия Hadoop | Эквивалент ECL | Комментарии |
---|---|---|
MAPing в MAPper | ПРОЕКТ / ПРЕОБРАЗОВАНИЕ | Принимает запись и конвертирует в другой формат; в Hadoop если преобразование происходит в пару "ключ-значение" |
ПЕРЕМЕШИВАНИЕ (Фаза 1) | РАСПРЕДЕЛЕНИЕ (, ХЭШ (Ключевое значение)) | Записи из маппера распределяются в зависимости от значения KEY |
ПЕРЕМЕШИВАНИЕ (Фаза 2) | СОРТИРОВАТЬ (, ЛОКАЛЬНЫЙ) | Записи, поступающие на конкретный редуктор, сортируются в порядке KEY. |
УМЕНЬШАТЬ | ROLLUP (, Ключ, ЛОКАЛЬНЫЙ) | Записи для определенного значения KEY теперь объединены. |
Рекомендации
- ^ Руководство по ECL, Lexis-Nexis.
- ^ «Оценка использования систем потоков данных для анализа больших графов», А. Ю и И. Каплан. Труды 2-го семинара по многозадачным вычислениям в сетях и суперкомпьютерах, MTAGS, 2009 г.
- ^ «Приобретение Seisint». Архивировано из оригинал на 2011-06-21. Получено 2011-03-24.