Все данные могут иметь значение существования, только участвуя в вычислении для создания значения. Большие данные не исключение. Вычислительные возможности больших структурных данных определяют диапазон практического применения больших данных. В этой статье я хотел бы представить несколько распространенных методов вычисления: API, Script, SQL и SQL-подобные языки.
API : «API» здесь относится к автономному методу доступа к API без использования JDBC или ODBC. Давайте возьмем MapReduce в качестве примера. MapReduce предназначен для экономичного выполнения параллельных вычислений с самого нижнего уровня. Таким образом, MapReduce предлагает превосходное горизонтальное масштабирование, горячую замену и экономическую эффективность. MapReduce — это один из компонентов Hadoop с открытым исходным кодом и обильными ресурсами.
Образец кода:
public void reduce(Text key, Iterator<Text> value, OutputCollector<Text, Text> output, Reporter arg3) throws IOException { double avgX=0; double avgY=0; double sumX=0; double sumY=0; int count=0; String [] strValue = null; while(value.hasNext()){ count++; strValue = value.next().toString().split("\t"); sumX = sumX + Integer.parseInt(strValue[1]); sumY = sumY + Integer.parseInt(strValue[1]); } avgX = sumX/count; avgY = sumY/count; tKey.set("K"+key.toString().substring(1,2)); tValue.set(avgX + "\t" + avgY); output.collect(tKey, tValue); }
Поскольку принятый универсальный язык программирования не подходит для специализированных вычислений данных, MapReduce менее способен, чем SQL и другие специализированные языки вычислений в вычислительной технике. Плюс, это неэффективно в разработке. Неудивительно, что программисты вообще жалуются, что это «больно». Кроме того, жесткая структура MapReduce приводит к относительно более низкой производительности.
Есть несколько продуктов, использующих API, и MapReduce является наиболее типичным среди них.
Скрипт : «Скрипт» здесь относится к специализированному скрипту для вычислений. Возьмите esProc в качестве примера. esProc предназначен для улучшения вычислительных возможностей Hadoop. Таким образом, в дополнение к недорогому горизонтальному масштабированию, он также предлагает высокую производительность, большие вычислительные возможности и удобные вычисления между разнородными источниками данных, особенно идеально подходящие для достижения сложной вычислительной цели. Кроме того, это скрипт в виде сетки, характеризующийся высокой эффективностью разработки и полными функциями отладки.
Образец кода:
A |
В |
|
1 |
= Файл ( «HDFS: //192.168.1.200/data/sales.txt») .size () |
//размер файла |
2 |
= 10 |
// количество заданий |
3 |
= К (А2) |
// 1 ~ 10, 10 задач |
4 |
= A3. (~ * INT (A1 / A2)) |
//список параметров для запуска поз |
5 |
= А3. ((~ -1) * INT (A1 / A2) + 1) |
// список параметров для конечного положения |
6 |
= callx («groupSub.dfx», A5, A4; [«192.168.1.107:8281», «192.168.1.108:8281»]) |
// вызов подпрограммы, 10 задач на 2 параллельных узла |
7 |
= A6.merge (EmpId) |
// результат слияния |
8 |
=A7.group@i (EmpId; ~ .sum (totalAmount): orderAmount, ~ .max (макс): maxAmount, ~ .min (мин): MINAMOUNT, ~ .max (макс) /~.sum (количество): avgAmount) |
// Подведение итогов завершено |
Пользователи Java могут вызывать результат из esProc через JDBC, но им разрешено вызывать результат только в виде хранимой процедуры вместо любого оператора SQL. Кроме того, esProc не является открытым исходным кодом. Это два недостатка esProc.
Скрипт широко используется в MongoDB, Redis и многих других решениях для больших данных, но он недостаточно специализирован для вычислений. Для другого примера, операция объединения нескольких таблиц для MongoDB не только неэффективно, но и включает в себя кодирование на порядок сложнее, чем в SQL или esProc.
SQL : «SQL» здесь относится к полному и полному SQL / SP, то есть ANSI 2000 и его расширенному набору. Возьмем в качестве примера Greenplum. Основными преимуществами Greenplum SQL являются мощные вычисления, высокоэффективная разработка и высокая производительность. Другие преимущества включают в себя широкое использование его языка, низкую стоимость обучения, простое обслуживание и возможность миграции — не говоря уже о его козыре: поддержка хранимых процедур для обработки сложных вычислений. Таким образом, бизнес-ценность может быть удобно использована из больших данных.
Образец кода:
CREATE OR REPLACE function view.merge_emp() returns void as $$ BEGIN truncate view.updated_record; insert into view.updated_record select y.* from view.emp_edw x right outer join emp_src y on x.empid=y.empid where x.empid is not null; update view.emp_edw set deptno=y.deptno,sal=y.sal from view.updated_record y where view.emp_edw.empid=y.empid; insert into emp_edw select y.* from emp_edw x right outer join emp_src y on x.empid=y.empid where x.empid is null; end; $$ language 'plpgsql';
Другие базы данных с аналогичной структурой MPP включают в себя Teradata, Vertical, Oracle и IBM. Их синтаксические характеристики в основном одинаковы. Недостатки аналогичны. Стоимость приобретения и текущие расходы на техническое обслуживание чрезвычайно высоки. Заряжая своих пользователей масштабом данных, так называемый недорогой Greenplum на самом деле вовсе не выгоден — это больше похоже на зарабатывание больших денег под прикрытием больших данных. Другие недостатки включают неудобную отладку, несовместимый синтаксис, длительное время простоя при расширении и неудобные вычисления с несколькими источниками данных.
SQL-подобный язык : относится к выходным интерфейсам, таким как JDBC / ODBC, и ограничивается только теми языками сценариев, которые являются подмножеством стандартного SQL. Возьмите Hive QL в качестве примера. Самым большим преимуществом Hive QL является его способность экономически эффективно масштабироваться, оставаясь при этом удобным инструментом для разработки пользователями. Функция синтаксиса SQL хранится в Hive QL, поэтому затраты на обучение низкие, эффективность разработки и простота обслуживания. Кроме того, Hive является компонентом Hadoop. Открытый исходный код является еще одним преимуществом.
Образец кода:
SELECT e.* FROM ( SELECT name, salary, deductions["Federal Taxes"] as ded, salary * (1 – deductions["Federal Taxes"]) as salary_minus_fed_taxes FROM employees ) e WHERE round(e.salary_minus_fed_taxes) > 70000;
Слабым местом Hive QL является отсутствие поддержки хранимых процедур. Из-за этого Hive QL сложно проводить сложные вычисления и, следовательно, трудно получить действительно ценный результат. Несколько более сложные вычисления будут основаны на MapReduce. Излишне говорить, что эффективность разработки низкая. Низкая производительность и пороговое время могут рассматриваться как проблема, особенно в распределении задач, объединении в несколько таблиц, вычислении между рядами, многоуровневом запросе и упорядоченной группировке, а также в реализации других алгоритмов. Таким образом, Hive QL довольно сложно реализовать приложение Hadoop для больших данных в реальном времени.
Есть также некоторые другие продукты с SQL-подобными языками — например, MongoDB — они все еще хуже, чем Hive.
Доступные в настоящее время методы вычисления больших данных — это не более чем 4 типа API, Script, SQL и SQL-подобные языки. Жаль, что они неуклонно развиваются и появятся все более и более рентабельные, мощные, практичные и полезные продукты для вычислений данных.