Обработка больших данных. Часть 2

advertisement





Hbase/BigTable
SQL on Hadoop/Impala
Некоторые типичные задачи больших
данных
Spark/Shark
Проблемы больших данных
1



HBase – распределенная система хранения
данных ориентированная на доступ к данным
как к столбцам таблицы (поверх HDFS)
HBase - Apache проект с открытым кодом, цель
которого – предоставление удобного доступа к
данным для вычислений в среде Hadoop
Данные логически объединены в таблицы,
строки и столбцы
2
HBase построена
на основе HDFS
HBase
файлы
хранятся в
HDFS
3


Обе являются распределенными системами,
которые легко расширяются до тысяч узлов
HDFS is хороша для пакетной обработки (полное
чтение больших файлов)

Не удобна для поиска конкретной записи

Не удобна для добавления небольших объемов данных

Не поддерживает обновления
4

HBase разработана для разрешения указанных
неудобств




Быстрый поиск конкретной записи
Поддержка вставки записей
Поддержка обновлений (удаление/вставка, не замещение
на том же месте)
Hbase обновления выполняются путем создания
новой версии записи
5



HBase поcтроена на основе модели Bigtable (от
Google) – пара <ключ>: <значение>
Таблицы отсортированы по строкам (ключам)
Схема таблицы определяет семейства столбцов.






Каждое семейство состоит из произвольного количества
столбцов
Каждый столбец может иметь произвольное количество
«версий»
Хранятся только реальные значения столбцов, NULL не
хранятся.
Столбцы семейства отсортированы и хранятся вместе
Значение представляет из себя массив байтов, byte[]
(Строка,Семейство:Cтолбец, Версия)  <Значение>
6
7
• Различные множества столбцов могут иметь
различные свойства и тип доступа
• Для каждого семейства можно конфигурировать
• Тип компресии (нет, gzip, LZO)
• Стратегию сохранения версий
• Кэш-приоритет
• Семейства столбцов хранятся отдельно на диске:
доступ к одному семейству не требует ввода-вывода
других
• Каждое семейство столбцов HTable разделяется
(горизонтально) на регионы по значениям ключа. В
определенном смысле регионы являются аналогом
HDFS блоков
8
Таблица “people” создается с 3 семействами
столбцов: “personal”, “contactinfo”, “creditcard”
Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);
HTableDescriptor tableDescriptor
= newHTableDescriptor(TableName.valueOf("people"));
tableDescriptor.addFamily(new HColumnDescriptor("personal"));
tableDescriptor.addFamily(new HColumnDescriptor("contactinfo"));
tableDescriptor.addFamily(new HColumnDescriptor("creditcard"));
admin.createTable(tableDescriptor);
9
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, "people");
Put put = new Put(Bytes.toBytes("doe-john-m-12345"));
put.add(Bytes.toBytes("personal"), Bytes.toBytes("givenName"),
Bytes.toBytes("John"));
put.add(Bytes.toBytes("personal"), Bytes.toBytes("mi"),
Bytes.toBytes("M"));
put.add(Bytes.toBytes("personal"), Bytes.toBytes("surname"),
Bytes.toBytes("Doe"));
put.add(Bytes.toBytes("contactinfo"), Bytes.toBytes("email"),
Bytes.toBytes("john.m.doe@gmail.com"));
table.put(put);
table.flushCommits();
table.close();
10
Get get = new Get(Bytes.toBytes("doe-john-m-12345"));
get.addFamily(Bytes.toBytes("personal"));
get.setMaxVersions(3);
результат результат = table.get(get);
Scan scan = new Scan(Bytes.toBytes("smith-"));
scan.addColumn(Bytes.toBytes("personal"),
Bytes.toBytes("givenName"));
scan.addColumn(Bytes.toBytes("contactinfo"), Bytes.toBytes("email"));
scan.setFilter(new PageFilter(25));
ResultScanner scanner = table.getScanner(scan);
for (результат результат : scanner) {
// ...
}
11

Мастер





Контролирует серверы регионов
Балансирует загрузку для регионов
Направляет клиента на нужный сервер региона
Может иметь резервную копию
Сервера регионов - роботы



Обслуживают запросы клиентов
(чтение/запись/сканирование)
Посылают сигналы готовности (HeartBeat) Мастеру
Обеспечивают масштабируемость регионов
12
13


HBase зависит от
ZooKeeper – ПО для
конфигурации и управления
кластером
По умолчанию HBase
управляет ZooKeeper


т.е. стартует и
останавливает ZooKeeper
HMaster и HRegionServers
регистрируются в сервисах
ZooKeeper
14




Apache ZooKeeper это программный проект Apache Software Foundation ,
обеспечивая открытым исходным кодом распределенной службы настройки,
службы синхронизации и именования реестра для крупных распределенных
систем . ZooKeeper был суб проект Hadoop , но теперь проект верхнего уровня в
своем собственном праве.
Архитектура зоопарка поддерживает высокую доступность через избыточных
услуг. Таким образом, клиенты могут задать еще один мастер зоопарка, если
первый не отвечает. Боец узлы хранят свои данные в иерархическом пространстве
имен, так же, как в файловой системе или TRIE DataStructure. Клиенты могут читать
и писать из / в узлах и таким образом, имеют общую службу
конфигурации. Обновления вполне упорядочено .
Apache ZooKeeper is a software project of the Apache Software Foundation, providing
an open source distributed configuration service, synchronization service, and naming
registry for large distributed systems. ZooKeeper was a sub project of Hadoop but is now
a top-level project in its own right.
ZooKeeper's architecture supports high availability through redundant services. The
clients can thus ask another ZooKeeper master if the first fails to answer. ZooKeeper
nodes store their data in a hierarchical name space, much like a file system or
a trie datastructure. Clients can чтение and запись from/to the nodes and in this way
have a shared configuration service. Updates are totally ordered.
15


HBase не поддерживает
соединения(joins)
Необходимо программировать на уровне
приложения
16
HDFS/MapReduce
HBASE
Запись
Только добавление
Выборочная запись,
массовое добавление
Чтение
Полное сканирование,
сканирование раздела
Выборочное чтение,
чтение интервала,
полное сканирование
Hive/SQL
эффективность
Высокая
4-5 раз медленнее
Максимальный
размер данных
30+ PB
1 PB
17



Необходим произвольный доступ для чтения
и/или записи
Требуется большое количество (простых)
операций в секунду над записями больших
файлов ( порядка TB)
Тип доступа простой и заранее определен
(поиск по ключу, вставка/удаление/обновление
отдельной записи, чтение записей с ключом в
заданном интервале)
18



Cloudera - американская компания, разработчик ПО,
выпускающая коммерческую версию программной
среды Apache Hadoop
Компания была основана в октябре 2008 года в
Бёрлингейме (штат Калифорния) со стартовым капиталом
$5 млн, основной целью бизнеса выбрана
коммерциализация проекта Hadoop
К середине 2013 года за пять раундов инвестиций компания
получила в общей сумме $141 млн, а в очередном раунде в
марте 2014 года компания привлекла ещё $900 млн., в том
числе $740 млн от Intel, при оценке бизнеса Cloudera
приблизительно в $4 млрд., при этом компания Intel
отказалась от развития созданного годом ранее
собственного дистрибутива Hadoop в пользу продвижения
решений от Cloudera
19


Современный инструмент обработки SQL
запросов (с открытым кодом).
Заменяет MapReduce, который




Ориентирован на пакетную обработку
Требует много времени, потому что записывает
промежуточные результаты на диск
Рассчитан больше на разработчиков, чем на рядовых
пользователей
Как насчет Hive?


Также ориентирован на пакетную обработку
Не рассчитан на работу в реальном времени, на
параллельное исполнение нескольких работ
20





Impala интегрирована с HDFS и Hbase, не требуя
перемещения данных или преобразования.
Используется аналитиками и исследователями
данных (data scientist) для работы с данными
хранимыми в форматах Hadoop с привлечением SQL
и систем (автоматичести) генерирующих SQL
запросы, когда система построена в терминологии
бизнес объектов
С начала 2013 года объявлена поддержка столбцового
формата Parquet
С декабря 2013 Amazon объявил о поддержке Impala
для AWS (Amazon Web Service)
Использует SQL синтакс типа HiveQL
21

Общецелевой инструмент обработки SQL
запросов.





Обрабатывает достаточно сложные аналитические
запросы
Хорошо масштабируется
Обрабатывает работы в диапазоне от милли-секунд до
нескольких часов
Тысячи параллельно выполняемых работ
Работает напрямую с Hadoop?


Может читать различные форматы файлов
Использует тот же кластер
22

Высокая производительность.





Реальный параллелизм (MPP) обработки запросов
C++ вместо Java
Генерация машинного кода во время исполнения (LLVM)
Новая исполняющая система (не MapReduce)
Полностью открытый код

Apache License 2.0
http://github.com/cloudera/impala
23





SQL-92 без коррелированных под-запросов
Подобен HiveQL
ORDER требует LIMIT (в разработке)
Нет сложных типов данных (в разработке)
Другие удобства






• INSERT INTO SELECT
• CREATE TABLE AS SELECT
• LOAD INTO
UDF, UDAF (C++ и Java)
JOINs должны умещаться в памяти исполняющих
узлов
Постоянно добавляются новые (недостающие)
возможности языка SQL
24



Логистическая регрессия
Метод K-средних
Машинное обучение
25
Пусть X – вектор независимых переменных, Y –
т.наз. классификатор, предположим P(Y|X) –
вероятность события, классифицируемого Y


W = (W1, W2, … Wn) – вектор параметров, X=(X1, X2, …,
Xn), WX – скалярное произведение
Логистическая функция
(сигмоид):
1
P (Y  1| X) 
1  e  wx
26



Выборка – пациенты различного возраста (независимая
переменная)
Событие - инфаркт (Y, 1 или 0, зависимая переменная)
Линейная функция плохо оценивает вероятность инфаркта,
сигмоид – гораздо лучше
27




Логистическая регрессия исследует условное
распределение P(y|x)
Пусть py(x;w) – наша оценка P(y|x), где w – вектор
настраиваемых параметров
Предположим, имеется 2 класса, y = 0 и y = 1
Это эквивалентно
1
p1 (x; w ) 
 wx
1 e


1
p0 (x; w )  1 
 wx
1 e
Т.е. логарифм «шансов» попадания в класс 1
является линейной функцией от x
Как подобрать W?
p1 (x; w )
log
p0 (x; w )
 wx
28

Функция правдоподобия определяется «обучающей
выборкой» с соответствующими значениями
классификатора. Параметры W определяются путем
максимизации функции правдоподобия
w = arg max  P( y l | xl , w)
w

l
где w = <w0,w1 ,…,wn> - вектор оцениваемых
параметров (модели), yl – наблюдаемое значение в
l-том примере обучения, и xl – значения независимых
переменных в l-том примере обучения
29

Максимизация функции правдоподобия
эквивалентна максимизации ее логарифма:
w = arg max  ln P( y l | xl , w)
w

l
Обозначим это как l(W), что может быть
переписано как
l (w)   y l ln P( y l  1| xl , w)  (1  y l ) ln P( y l  0 | xl , w)
l

Заметим, здесь будет использоваться факт, что Y
может принимать только значения 0 или 1,
поэтому только одно слагаемое под суммой будет
ненулевым для любого конкретного yl
30


Не существует явного решения задачи
максимизации (логарифма) функции
правдоподобия l(w) по w. Возможный способ
решения – использование градиентных методов
i-тая компонента вектора градиента имеет вид

l (w )   xil ( y l  Pˆ ( y l  1| xl , w ))
wi
l
31

Можно использовать простой метод градиентного
спуска/подъема.для нахождение приближенного
значения для вектора w. Начиная с произвольной
начальной точки (например, нулевой) будем
итерационно двигаться в направлении градиента
с постоянным (или стремящимся к нулю шагом)
l
l
ˆ
wi  wi    x ( y  P( y  1| x , w ))
l
i
l
l

Или
𝒘(𝑛+1)
𝑛
𝑑𝑙(𝒘
)
(𝑛)
= 𝒘 +𝜂
𝑑𝒘(𝑛)
32
33

Матрица вторых производных
𝑑2 𝑙
𝐻𝑖𝑗 =
𝑑𝑤𝑖 𝑑𝑤𝑗
𝑯 = (𝐻𝑖𝑗 ) = 𝑿𝑇 *C*𝑿, где С – диагональная матрица


Метод Ньютона
𝑛 )
𝑑𝑙(𝒘
𝒘(𝑛+1) = 𝒘(𝑛) + 𝑯−1
𝑑𝒘(𝑛)
Сходится с квадратичной скоростью в окрестности
максимума


Изучает распределение условной
вероятности P(y|x)
Методы локального поиска.




Начинаем с начального вектора параметров
Максимизируем целевую фукцию итерационным
методом
Целевая фукция - логарифм функции правдоподобия
l(w). После оценки параметров по обучающей выборке,
можно оценить условную вероятность P(y|x) отнесения
(нового) вектора х к классам 1/0
Причем тут большие данные?
36


k-means (метод k-средних) - наиболее популярный
метод кластеризации
Задача - минимизировать суммарное квадратичное
отклонение точек кластеров от центров этих
кластеров
n
2
d(x, y) = å (xi - yi )
i=1

Алгоритм Штейнгауза/Ллойда



Инициализация. Выбираются K начальных точек –
центроидов (случайно, или погружением точек в
минимальный куб и размещением начальных точек по его
диагонали)
Итерация. Точки разбиваются на кластеры приданием
каждой ближайшему центроиду, центроиды
пересчитываются как центры кластеров
Итерации повторяются до тех пор пока ни один центроид
не изменится
37

Начальное множество точек
38

Выбрать начальные центроиды произвольным
образом
39

Отнести точки к ближайшему центроиду
40

Пересчитать центроиды в полученных
кластерах
41

Переназначить точки новым центроидам
42

Пересчитать центроиды в полученных
кластерах
43

Переназначить точки новым центроидам
44

Пересчитать центроиды в полученных
кластерах
45

Переназначить точки новым центроидам

Нет изменений – конец алгоритма
46

Вычисление расстояний
INSERT INTO YD
SELECT i, j,sum((YV.val-C.val)**2)
FROM YV, C WHERE YV.l = C.l GROUP BY i, j;

Нахождение ближайшего центроида
INSERT INTO YNN
SELECT YD.i, YD.j
FROM YD, (SELECT i, min(distance) AS mindist
FROM YD GROUP BY i) YMIND
WHERE D.i = YMIND.i
and YD.distance = YMIND.mindist;

Обновление центроидов
INSERT INTO W SELECT j,count(*)
FROM YNN GROUP BY j;
UPDATE W SET w = w/model.n;
INSERT INTO C
SELECT l, j, avg(Y V.val) FROM YV, YNN
WHERE YV.i = YNN.i GROUP BY l, j;
INSERT INTO R
SELECT C.l, C.j,avg( (YV.val − C.val) ∗ ∗2)
FROM C, YV, YNN
WHERE YV.i = YNN.i
and YV.l = C.l and YNN.j = C.j
GROUP BY C.l, C.j;

Может быть очень медленным из-за большого
количества создания и обновления больших таблиц
47



Подраздел искусственного интеллекта, изучающий методы
построения моделей, способных обучаться, и алгоритмов для их
построения и обучения. Обучение по прецедентам,
или индуктивное обучение, основано на выявлении
закономерностей в эмпирических данных.
Имеется множество объектов (ситуаций) и множество
возможных ответов (откликов, реакций). Существует некоторая
зависимость между ответами и объектами, но она неизвестна.
Известна только конечная совокупность прецедентов — пар «объект,
ответ», называемая обучающей выборкой. На основе этих данных
требуется восстановить зависимость, то есть построить алгоритм,
способный для любого объекта выдать достаточно точный ответ.
Для измерения точности ответов определённым образом
вводится функционал качества/потерь
Некоторые классические задачи, решаемые с помощью машинного
обучения



Классификация, как правило, выполняется с помощью обучения с учителем на
этапе собственно обучения.
Кластеризация, как правило, выполняется с помощью обучения без учителя
Для эффективной работы с большими обучающими выборками
требуется специальный инструмент, традиционные РБД и SQL не
подходят
48


Быстрая вычислительная система на кластере
совместимая с Apache Hadoop
Улучшает производтельость путем:



Конструкций для работы
в опер.памяти
Общего графа вычислений
До 100× быстрее
(2-10× с диском)
Удобство использования:


Богатый API для Scala, Java, Python
Интерактивная среда (shell)
Часто код короче 5×


MapReduce значительно упростил анализ больших
данных (для определенных типов приложений)
Но, по мере того, как он приобрел популярность,
пользователи захотели большего:




Более сложную (многошаговую) аналитику
Произвольные запросы в интерактивном режиме
Обработки больших потоков данных в режиме реального
времени
Все 3 типа требуют быстрого доступа к общим
данным между параллельными работами
HDFS
чтение
HDFS
запись
HDFS
чтение
итер. 1
HDFS
запись
итер. 2
. . .
ввод
HDFS
чтение
ввод
запрос 1
результат 1
запрос 2
результат 2
запрос 3
результат 3
. . .
Медленно из-за дублирования,
сериализации, дискового ввода/вывода
итер. 1
итер. 2
ввод
запрос 1
Одноразовая
обработка
ввод
Распределенная
память
запрос 2
запрос 3
. . .
10-100× быстрее, чем сеть и диск
. . .

Ключевая идея: эластичные распределенные
наборы данных (resilient distributed datasets,
RDDs)




Распределенные наборы объектов, которые могут
храниться и обрабатываться в памяти/кэше узлов
кластера
Обрабатываются с использованием (специальных)
параллельных операторов
Автоматически перевычисляются при отказах
Программный интерфейс


Функциональный APIs для Scala, Java, Python
Интерактивное использование из оболочки Scala
Загрузить сообщения об ошибках из журнала в память,
затем интерактивно искать различные шаблоны
lines = spark.textFile(“hdfs://...”)
Базовый
набор
Преобразован
ный набор
кэш 1
робот
errors = lines.filter(lambda x: x.startswith(“ERROR”)) результаты
errors.cache()
задачи
Драйвер
errors.filter(lambda x: “foo” in x).count
действие
errors.filter(lambda x: “bar” in x).count
кэш 2
. . .
результат: масштабируемый до1TB
в 5-7 сек. (против 170 сек. для
данных на диске)
блок 1
робот
кэш 3
робот
блок 3
блок 2
Поддерживаемые операторы
map
reduce
sample
filter
count
take
groupBy
fold
first
sort
reduceByKey
partitionBy
union
groupByKey
mapWith
join
cogroup
pipe
leftOuterJoin
cross
save
rightOuterJoin
zip
...

Столбцовый SQL аналитический инструмент на
основе Spark



Совместим с Hive



Поддерживает и SQL, и сложную аналитику
До 100 раз быстрее, чем Hive
HiveQL, UDF/UDAF, Scripts
Мажет работать на существующих хранилищах данных,
использующих Hive
Используется в Yahoo! для быстрого OLAP
анализа в оперативной памяти
Клиент
CLI
JDBC
Драйвер
Метаданные
Разбор Оптимизация
SQL
запроса
План выполнения запроса
выполнение
MapReduce
HDFS
Клиент
CLI
Драйвер
Метаданные
Разбор Оптимизация
SQL
запроса
Spark
HDFS
JDBC
управление
кэшем
План выполнения запроса
выполнение
Shark
Shark (disk)
Hive
Runtime (seconds)
100
75
50
25
0
1.1
0.8
Q1
0.7
Q2
1.0
Q3
Q4
1.7 TB Warehouse Data на 100 EC2 узлах


Единая система
для SQL,
обработки
графов,
машинного
обучения
Все используют
то же множество
роботов и кэшей
def logRegress(points: RDD[Point]): Vector {
var w = Vector(D, _ => 2 * rand.nextDouble - 1)
for (i <- 1 to ITERATIONS) {
val gradient = points.map { p =>
val denom = 1 + exp(-p.y * (w dot p.x))
(1 / denom - 1) * p.y * p.x
}.reduce(_ + _)
w -= gradient
}
w
}
val users = sql2rdd("SELECT * FROM user u
JOIN comment c ON c.uid=u.uid")
val features = users.mapRows { row =>
new Vector(extractFeature1(row.getInt("age")),
extractFeature2(row.getStr("country")),
...)}
val trainedVector = logRegress(features.cache())

Аналитика для больших данных развивается, включая:





Более сложные области применения (например, машинное
обучение)
Больше интерактивных специальных запросов
Больше потоковой обработки в реальном времени
Spark – это быстрая платформа, которая объединяет
такие приложения
Больше информации на: spark.apache.org

Первые успехи



Moneyball, 2002, Oakland Athletics, статистический подход к
выбору игроков в бейсболе.
Модель Google распространения гриппа, 2009 H1N1,
корреляция между определенными запросами и
распространением гриппа в пространстве и времени, 450млн
моделей, 45 терминов показали сильную корреляцию.
Oren Etszioni, инициировал нескольно компаний, работающих
с «большими данными» до того, как сам термин утвердился.
Farecast, продажа авиа-билетов, к 2012г. Система давала
правильный прогноз в 75% случаев и экономила
пользователю, в среднем $50 на билет, MicroSoft купила
Farecast за $110 млн.

Борьба с ошибками




«Измерить – значит узнать»(Кельвин), «Знание - сила» (Бэкон)
Измерения имеют погрешность, больше измерений – больше
ошибок, больше задержка в обработке
Проверка текста (по словарю) и грамматики, Microsoft Word,
Google Translator
CPI, 90 городов, 80000 ценников, поддержка - $20 млн./год,
задержка в 2-3 месяца. 2 экономиста из МИТ разработали
модель, получающую данные с Интернета, и позволяющую
быстрее реагировать на признаки кризиса
Тенденция в обработке данных - от частичных «очищенных»
данных к большему объему или к полным данным,
содержащим ошибки и «пустоты»

Корреляция



Amazon.com, изменение стратегии рекламы от прошлых
покупок, через корреляцию с похожими покупателями, к
корреляции между продуктами и вкусами покупателя
Target, аналитика для прогнозирования. Школьница получила
купон на детскую одежду и кроватку. Женщины, ожидающие
ребенка, регистрируются в программе детских подарков. Их
«покупательские корзины» анализируются. Затем
анализируются корзины других покупателей и, если
корреляция высока, то высылается соответствующая реклама.
Обслуживание смотровых колодцев в Нью Йорке (51 000
колодцев, 150 00 км подземных кабелей). Группа
анализировала 106 параметров, влияющих на аварийность.
10% колодцев из составленного списка имели 44% проблем.

Корреляция без причины, пример 1
2000
Разводы на 1000
жителей
Потребление
маргарина, фунтов
2001 2002 2003 2004 2005 2006 2007 2008 2009
5
4.7
4.6
4.4
4.3
4.1
4.2
4.2
4.2
4.1
8.2
7
6.5
5.3
5.2
4
4.6
4.5
4.2
3.7
Корреляция: 0.992558

Корреляция без причины, пример 2
2000
Расходы США на
науку и технологию
Самоубийства путем
повешения/удушения
2001
2002
2003
2004
2005
2006
2007
2008
2009
18,594 19,753 20,734 20,831 23,029 23,597 23,584 25,525 27,731 29,449
5,688
6,198
6,462
6,635
Корреляция: 0.992082
7,336
7,248
7,491
8,161
8,578
9,000






Построение 3-х мерной модели протеинов на аснове анализа ДНК
и статического анализа не отменяет необходимости понимания
физики и биохимии
Тот же алгоритм анализа больших данных может давить худший
результат в изменившихся условиях. Google Flu Trends.
Данные с Web или телефонных опросов могут быть не
репрезентативными.
Успехи больших данных – в относительно типичных, хорошо
известных областях. Google три-граммы и перевод.
Нарушение прав личности на частную жизнь
Навязчивая реклама. Нестотря на определенные успехи,
достижения в области больших данных не могут сравниться с
такими достижениями прошлых веков как антибиотики, самолеты,
интернет, сотовые телефоны
http://static.googleusercontent.com/media/research.google.com/en/us/archive/gfs-sosp2003.pdf
http://static.googleusercontent.com/media/research.google.com/en/us/archive/mapreduceosdi04.pdf
http://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf
http://ru.wikipedia.org/wiki/ACID
http://en.wikipedia.org/wiki/Eventual_consistency
http://ru.wikipedia.org/wiki/Оптимизация_запросов_СУБД
http://vldb.org/pvldb/vol5/p1712_avriliafloratou_vldb2012.pdf
http://cs.brown.edu/courses/cs227/archives/2011/slides/mar14-hbase.pdf
http://en.wikipedia.org/wiki/Cloudera_Impala
http://2013.berlinbuzzwords.de/sites/2013.berlinbuzzwords.de/files/slides/Impala%20tech%20talk
.pdf
http://ru.wikipedia.org/wiki/Apache_Spark
http://spark.apache.org
http://www.tylervigen.com/view_correlation?id=1597
http://madlib.net/
Nate Silver. The Signal and the Noise: Why So Many Predictions Fail — but Some Don't. 2012
Viktor Mayer-Schonbrger and Kenneth Cukier. Big Data. 2014
70
Download