Все данные могут иметь значение существования, только участвуя в вычислении для создания значения. Большие данные не являются исключением. Вычислительные возможности больших структурных данных определяют диапазон практического применения больших данных. В этой статье я хотел бы представить несколько распространенных методов вычисления: 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) | // mergingtaskresult |
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 voidas$$ BEGIN truncate view.updated_record; insert into view.updated_recordselect 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_edwset deptno=y.deptno,sal=y.salfrom view.updated_record y where view.emp_edw.empid=y.empid; insert into emp_edwselect 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 является отсутствие поддержки хранимых процедур. Из-за этого HiveQL сложно проводить сложные вычисления и, следовательно, трудно получить действительно ценный результат. Несколько более сложные вычисления будут основаны на MapReduce. Излишне говорить, что эффективность разработки низкая. Низкую производительность и пороговое время можно рассматривать как проблему, особенно в распределении задач, объединении в несколько таблиц, вычислении между рядами, многоуровневом запросе и упорядоченной группировке, а также в реализации другого алгоритма. Таким образом, HiveQL довольно сложно реализовать приложение Hadoop для больших данных в реальном времени.
Есть также некоторые другие продукты с SQL-подобными языками — например, MongoDB — они все еще хуже, чем Hive.
Доступные в настоящее время методы вычисления больших данных — это не более чем 4 типа API, Script, SQL и SQL-подобные языки. Хотелось бы, чтобы они развивались стабильно, и было бы все больше и больше рентабельных, мощных, практичных и полезных продуктов для вычислений данных.