Статьи

4 метода для структурированных вычислений больших данных

Все данные могут иметь значение существования, только участвуя в вычислении для создания значения. Большие данные   не исключение. Вычислительные возможности больших структурных данных определяют диапазон практического применения больших данных. В этой статье я хотел бы представить несколько распространенных методов вычисления: 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-подобные языки. Жаль, что они неуклонно развиваются и появятся все более и более рентабельные, мощные, практичные и полезные продукты для вычислений данных.