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