Что такое “Большие Данные” (Big Data) и как их обрабатывать? По материалам лекции проф. David J. DeWitt на ежегодном собрании пользователей SQL Server Что означает термин “Большие Данные”? Собрание огромного количества записей – десятки и сотни PBs Для кого-то это использование т.н.NoSQL систем или параллельных реляционных БД Обычно размещаются на больших кластерах , построенных на дешевых процессорах. Facebook (в 2009 г.) имел кластер из 2700 узлов с объемом дисковой памяти 60PB ( 100PB в 2012)!! 2 Amount of Stored Data By Sector Если любите аналогии… 1000 900 800 Petabytes 700 (in Petabytes, 2009) 35ZB = достаточно данных, 966 чтобы образовать стопку CD дисков (0.8GB каждый) высотой с 848 половину пути от Земли до Марса, 715 или 70 стопок от Земли до Луны 619 600 500 434 Марс 364 400 269 300 227 200 100 0 Земля Sources: "Big Data: The Next Frontier for Innovation, Competition and Productivity." US Bureau of Labor Statistics | McKinsley Global Institute Analysis 1 zettabyte? = 1 million petabytes = 1 billion terabytes = 1 trillion gigabytes 3 Почему внезапный взрыв интереса? Значительно возросшее количество и разнообразие источников, вырабатывающих огромный объем данных Аналогово-цифровые датчики(координатные, звуковые, …) Web 2.0 текст (твиттер, википедия, … ) Web клик-поток Понимание, что некоторые данные “слишком ценны”, чтобы удалять их, либо само удаление слишком дорого. Существенное снижение стоимости оборудования, особенно – дисковой памяти Если бы цена была $500/GB (в 1994 г.), не было бы революции Больших Данных” (в 2014 г. $0.05/GB) 4 Как работать с “Большими Данными”? Использовать параллельную (реляционную) БД eBay – 10PB на 256 узлах Использовать NoSQL Facebook - 20PB на 2700 узлах Bing – 150PB на 40000 узлах Ebay – 5PB на 532 узлах 5 Что означает NoSQL? Не то, что SQL не должен использоваться для обработки “Больших данных”. Не то, что SQL и реляционные БД устарели и отмирают. Не только SQL. Для определенного круга задач другие подходы к хранению и обработке информации могут быть более эффективными, особенно с точки зрения легкости расширения (масштабируемости) информационной базы при постоянном добавлении новых данных. Не путать с NewSQL – новый подход к построению реляционных БД для приложений, ориентированных на обработку большого количества транзакций, сочетающий удобства SQL с масштабируемостью NoSQL систем. 6 Почему NoSQL? Более гибкая модель данных. Не требуется заранее схема. Может использоваться популярный JSON (JavaScript Object Notation) формат для описания данных. Ослабление требования целостности/согласованности данных на условие конечной (возможной в будущем) согласованности. Готовность поступиться целостностью ради доступности. Дешевое/бесплатное ПО. Не надо знать языки кроме стандартных Java/C/C++ (предположительно :-) ) освоенных в школе/университете. Более быстрый доступ к данным. 7 Более быстрый доступ к данным SQL: Данные поступают Очистка данных 3 1 Преобразование данных Загрузка данных 5 4 Разработка схемы БД SQL запросы СУБД 2 NoSQL: Данные поступают 6 NoSQL система Приложение 2 1 Не требуется очистка! Не требуется преобразование! Не требуется загрузка! Анализ там где данные оказались! 8 Два основных типа NоSQL систем Хранилище “ключ(и): значение” Примеры: MongoDB, CouchBase, HBase, Cassandra, Windows Azure, … Гибкая модель данных типа JSON Записи распределены между узлами кластера путем хеширования значения ключа (sharding) Поиск/извлечение/обновление отдельной записи по ключу Hadoop Программная среда для создания (автоматически) масштабируемых и отказо-устойчивых систем сбора, хранения и обработки больших объемов данных. Модель данных обычно отсутствует Записи хранятся в распределенной файловой системе. 9 Два мира – новая реальность Структурированный Реляционные СУБД & Не структурированный NoSQL Системы (Не-)(полу-)структурированные данные, Структурированные данные с схема (заранее) не известна (заранее) известной схемой ACID (АСИН) ACID не гарантируется Транзакции Транзакции не поддерживаются Использование SQL в качестве языка SQL не используется Модель жесткой согласованости Возможная согласованность ETL(извлечение,преобразование,загрузка) ETL не требуется Дольше до получения какого-то результата Конкретный результат м.б. быстрее Зрелость, стабильность, эффективность Гибкость 10 Что нас ожидает? Мир действительно изменился Реляционные СУБД больше не являются основным и подавляющим инструментом хранения и обработки данных Новые подходы должны приниматься как новая реальность, требуется понимание как наилучшим образом использовать новые технологии, такие как Hadoop Реляционные СУБД продолжат доминировать в системах обработки транзакций и в небольщих до средних размеров “хранилищ данных” Много пользователей будут вынуждены иметь дело с обоими мирами 11 2006 2003 Hadoop MR/GFS Огромный объем данных из клик-потоков, которые необходимо сохранять и анализировать Требования: Сохранение Масштабируемость до PB и тысяч Hadoop = HDFS узлов Высокий уровень отказоустойчивости (Относительная) простота программирования Обработка Сохранение + MapReduce Обработка GFS + MapReduce Распределенная и отказо-устойчивая “новая” парадигма программирования 12 Масштабируемость и высокий уровень отказоустойчивости Возможность быстро анализировать большие множества записей без необходимости начального построения модели, очистки и загрузки данных Низкая начальная стоимость оборудования и программного обеспечения Простая парадигма программирования для написания и выполнения программ (автоматически) масштабируемых до тысяч узлов и PB данных Возможность использования для «Хранилищ Данных» HDFS – распределенная, отказо-устойчивая файловая система MapReduce – набор средств для разработки/выполнения распределенных отказо-устойчивых приложений Hive & Pig – языки разработки приложений(с элементами SQL) Sqoop – пакет программ для передачи данных между HDFS и реляционной БД А также другие… Отчеты Средства загрузки Рел.БД Hive & Pig Map/ Reduce HBase Sqoop HDFS 14 3 Hive & Pig 2 Map/ Reduce 4 Sqoop Реляционная БД 5 HDFS 1 15 Основа всей среды разработки Hadoop Цели HDFS: Масштабируемость до тысяч узлов Предположение, что отказы (оборудования и ПО) возникают достаточно часто Предназначена для хранения небольшого количества очень больших файлов Файл записывается один раз, а читается многократно Традиционная иерархическая организация файлов и оглавлений Высокая степень переносимости между разными платформами Hive & Pig Map/ Reduce Sqoop HDFS 16 Большой файл 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 … 6440MB Обозначим блоки разным цветом Block Блок 1 Block Блок 2 Block Блок 3 Block Блок 4 Block Блок 5 Block Блок 6 64MB 64MB 64MB 64MB 64MB 64MB т.е. Размер блока = 64MB … Block Блок 100 Block Блок 101 64MB 40MB Файлы HDFS состоят из множества блоков • Обычный размер блока 64MB • Каждый блок хранится как отдельный файл в локальной файловой системе (например, NTFS) 17 Блок 1 Блок 2 Блок 3 Блок 1 Блок 3 Блок 2 Блок 2 Блок 3 Блок 1 Узел 1 Узел 2 Узел 3 Узел 4 Узел 5 Фактор дублирования = 3 Стратегия размещение по умолчанию: Первая копия записывается на узел, создающий файл (близость записи) Вторая копия записывается на узел в той же стойке (чтобы минимизировать сетевой трафик между стойками) Третья копия записывается на узел в другой стойке 18 Узел [обслуживания] имен (NameNode) – один на кластер Отвечает за операции над метаданными (данные о данных), избыточность/дублирование данных, местоположение блоков Узел имен Резервный узел имен(Backup Node) – резервная копия узла имен Резервный узел имен Мастер (копия) Узлы данных(DataNodes) – один на каждый узел кластера Отвечает за хранение блоков файла Предоставляет данные файла в ответ на запрос приложения DataNode DataNode DataNode Узел данных Робот 19 Узел имен Резервный узел имен (проверка состояния, балансирование загрузки, дублирование блоков, и т.д.) Узел данных Узел данных Узел данных Узел данных Узел данных Узлы записывают на свои локальные диски 20 Большой файл 110010101001 010100101010 011001010100 101010010101 001100101010 010101001010 100110010101 001010100101 {узел 2, 1, 2, 3} 2, узел 3, 4, 3, узел 4} 5} основываясь на “факторе дублирования” (по умолчанию - 3) HDFS Клиент Узел имен указывает клиенту, куда записать каждый блок файла Клиент передает блоки указанным узлам напрямую Узел имен Резервный Узел имен И так далее… Узел данных Узел данных Узел данных Узел данных Узел данных 21 Большой файл 110010101001 010100101010 011001010100 101010010101 001100101010 010101001010 100110010101 001010100101 HDFS Клиент Возвращает расположение блоков файла Узел имен Резервный узел имен Поток блоков от узлов ранных Узел данных Узел данных Узел данных Узел данных Узел данных 22 HDFS разрабатывалась, предполагая частые отказы (как оборудования так и ПО) Типы отказов: Ошибки или полный отказ дисков Отказы узлов данных Отказы стоек/сетевых коммутаторов Отказы узла имен Полный отказ дата-центра DataNode NameNode 23 Узел имен Резервный узел имен Каждый блок данных автоматически дублируется на Узел имен обнаруживает отказ узла данных оставшихся узлах удовлетворяя «фактору дублирования» Узел данных Узел данных Узел данных Узел данных Узел данных 24 Восстановление может быть автоматическим или требовать ручного вмешательства в некоторых случаях Узел имен Резервный узел имен Отказ не катастрофический, так как имеется резервный узел Узел данных Узел данных Узел данных Узел данных Узел данных 25 Узел имен Резервный узел имен данных равномерно УзелБлоки имен обнаруживает, что новый перераспределяются узел данных добавлен к кластеру Узел данных Узел данных Узел данных Узел данных Узел данных 26 Высокая степень масштабируемости Не используются «зеркальные диски» и RAID. Тысячи узлов данных и огромные (сотни TB) файлы Большой размер блоков для повышения скорости последовательного ввода/вывода Меньшая цена Почему? Использвание единого инструмента (тройное дублирование блоков) для борьбы с различными типами отказов вместо различных механизмов Недостатки Размещение блоков «прозрачно» для ПО верхнего уровня Многие возможности оптимизации (с успехом используемые в параллельных реляционных БД) не применимы Принцип «одна запись – многократное чтение» может быть слишком ограничительным 27 3 Hive & Pig 2 Map/ Reduce 4 Sqoop Relational Databases 5 HDFS 1 28 Среда программирования (библиотеки и исполняющая система) для анализа данных, хранимых в HDFS MapReduce задание состоит из двух функций/этапов: map() reduce() разделяй & властвуй (функция отображения) объединяй & сокращай (функция агрегирования) Пользователь только разрабатывает Map и Reduce функции MR среда «собирает» все вместе и координирует выполнение Map и Reduce функций на кластере, обеспечивая отказо-устойчивость масштабируемость 29 В основном, это… 1. Взять большую задачу и разделить ее на под-задачи MAP … 2. Выполнить (одну и ту же) функцию отображения для всех подзадач REDUCE DoWork() 3. DoWork() DoWork() … Соединить результат всех под-задач (функция агрегирования) … Вывод 30 <ключi, знач.i> Mapper Узел данных <ключA, знач.Ai> <ключB, знач.Bi> <ключC, знач.Ci> … <ключA, список(знач.Ai, знач.Aj, знач.Ak, …)> Reducer <ключi, знач.i> Mapper Узел данных <ключi, знач.i> Mapper <ключA, знач.Aj> сорти<ключB, знач.Bj> <ключC, знач.Cj> ровка и … группирование <ключA, знач.Ak> по <ключB, знач.Bk> ключу <ключ , знач. > … C <ключB, список(знач.Bi, знач.Bj, знач.Bk, …)> Reducer Получение и вывод результата Ck Узел данных <ключC, список(знач.Ci, знач.Cj, знач.Ck, …)> Reducer <ключi, знач.i> Mapper <ключA, знач.Al> <ключB, знач.Bl> <ключC, знач.Cl> … 31 - Координирование всех MR задач и событий - Управление очередями работ и графиком выполнения - Поддержка и контроль Операторов Задач - Перемещение/возобновление MR задач, если нужно - Использование «контрольных точек» для восстановления после отказа Узел Мастер имен Hadoop Оператор Работ Узел имен Уровень MapReduce Уровень HDFS Оператор Работ контролирует и следит за состоянием Операторов Задач Выполнение индивидуальных MR задач, назначенных Оператором Работ (в Уровень отдельной JVM) MapReduce Уровень HDFS hadoopУзелДанных1 Оператор Задач hadoophadoopУзелДанных2 УзелДанных3 Роботы Оператор Задач Оператор Задач hadoopУзелДанных4 Оператор Задач ОперЗадач сохраняет промежуточные результаты УзелДанных УзелДанных УзелДанных УзелДанных Промежуточные данные сохраняются в локальной файловой системе 32 Поставляет работы Оператору Работ MR клиент Оператор Работ Работы ставятся в очередь Map функции назначаются Опер.Задач Начинается этап объединения/сокращения на каждом Узле Данных Функции отображения запускаются на отдельной JVM и выполняются ОперЗадач ОперЗадач ОперЗадач ОперЗадач Mapper Reducer Mapper Reducer Mapper Reducer Mapper Reducer Функции отображения сохраняют промежуточные результаты локальные файловые системы узлов данных 33 54235 $75 54235 $22 10025 $60 10025 $95 44313 $55 53705 $65 53705 $30 53705 $15 02115 $15 02115 $15 44313 $10 44313 $25 4 54235 $75 7 10025 $60 2 53705 $30 1 02115 4 УзелДанных2 54235 $75 5 7 53705 10025 $65 $60 $15 3 0 8 54235 $22 10025 $95 44313 Mapper $55 5 53705 $65 0 54235 $22 5 53705 $15 2 53705 $30 6 44313 $10 1 02115 $15 Mapper УзелДанных1 Блоки файла продаж в HDFS (клиент, индекс, объем продаж) УзелДанных3 Получить сумму продаж по каждому индексу 3 10025 $95 5 53705 6 44313 44313 6 $10 8 44313 $55 6 44313 $25 9 02115 $15 $15 9 02115 Group By Group By Один сегмент данных на задачу агрегир. $25 $15 Задачи отображения 34 $65 $75 53705 $30 54235 $22 53705 $15 10025 $60 10025 $95 44313 $55 53705 Mapper 53705 54235 $65 53705 $30 53705 $15 02115 $15 02115 44313 44313 Сортировать 53705 $65 53705 $30 53705 $15 Агрегировать 53705 $110 10025 $155 44313 $90 02115 $30 54235 $97 Reducer Перетасование Mapper Reducer 44313 $10 10025 $60 44313 $25 10025 $95 10025 $60 44313 $10 10025 $95 44313 $25 44313 $55 44313 $55 Сортировать Задачи агрегирования 54235 $75 54235 $22 02115 $15 02115 $15 Агрегировать Reducer 02115 $15 02115 $15 54235 $75 54235 $22 $15 $10 $25 Сортировать Агрегировать 36 Файл A Reducer 1 Файл B Reducer 2 Различные ключи Reducer N Задачи агрегирования выполняют само соединение Перетасовка по сети и сортировка Перетасовка и сортировка Задача отображения генерирует множество пар (ключ, запись) Mapper 1 Mapper 2 Mapper 3 Mapper M Каждая задача отображения обрабатывает по одному блоку в раз HDFS хранит блоки данных (Дублирование не показано) 37 Действительное число задач отображения M обычно выбирается значительно большим, чем число узлов. Почему? Помогает иметь дело с неравномерность распределения значений ключей (data skew) и отказами Пример: Скажем, M = 10,000 и W = 100 (W - число Map роботов) Каждый робот выполнит (10,000 / 100) = 100 задач отображения Если на этапе отображения возникант неравномерность или отказ, невыполненная задача может быть легко перераспределена для выполнения на другом роботе Проблема неравномерности на уровне агрегирования не исчезает Пример: В запросе “получить сумму продаж по каждому индексу”, некоторые из индексов могут иметь гораздо больше записей для обработки, чем другие 38 Подобно HDFS, среда разработки MapReduce построена, чтобы обеспечть высокий уровень отказоустойчивости Отказ робота (на этапе отображения или агрегирования) Обнаруживается периодическими проверками, исходящими от Мастера Незавершенные задачи стартуют сначала на другом узле Если узел отказывает после завершения этапа отображения – вся задачи отображения этого узла переделывается, и все задачи агрегирования уведомляются. Отказ Мастера Если отказывает Мастер (-процесс), то вся работа полностью переделывается 39 Весьма высокая отказоустойчивость Относительно простое программирование распределенных вычислений для типичных функций типа агрегирования Среда MR позволяет программисту не заботиться об отказах и сбоях Схема/структура данных кодируется в каждом приложении Недостаток общей схемы данных Делает совместное использование данных между приложениями весьма затруднительным Невозможно использование аппарата реляционых БД (таких как индексы, ограничения целостности, представления, …) для эффективной обработки Нет декларативного языка для описания и доступа к данным типа SQL 40 3 Hive & Pig 2 Map/ Reduce 4 Sqoop Relational Databases 5 HDFS 1 41 использовали разные подходы к использованию декларативных языков для работы с данными (подобно SQL) в дополнение к MapReduce и Facebook разработала язык типа SQL, названный HIVE Yahoo разработала более процедурный язык, названный PIG Оба подхода используют MapReduce как язык описания/выполнения работ Запросы/программы на языках Hive и Pig компилируются в последовательность работ MapReduce 42 Рассмотрим два файла (множества записей): UserVisits Rankings ( ( sourceIP STRING, destURL STRING visitDate DATE, adRevenue FLOAT, .. pageURL STRING, pageRank INT, avgDuration INT ); ); Запрос: Найти sourceIP адрес, генерирующий наибольший доход, вместе со средним рангом посещенных страниц 43 // Phase #1 // ------------------------------------------JobConf p1_job = base.getJobConf(); p1_job.setJobName(p1_job.getJobName() + ".Phase1"); Path p1_output = new Path(base.getOutputPath().toString() + "/phase1"); FileOutputFormat.setOutputPath(p1_job, p1_output); package edu.brown.cs.mapreduce.benchmarks; import java.util.*; import org.apache.hadoop.conf.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.util.*; import org.apache.hadoop.mapred.lib.*; import org.apache.hadoop.fs.*; import edu.brown.cs.mapreduce.BenchmarkBase; // // Make sure we have our properties // String required[] = { BenchmarkBase.PROPERTY_START_DATE, BenchmarkBase.PROPERTY_STOP_DATE }; for (String req : required) { if (!base.getOptions().containsKey(req)) { System.err.println("ERROR: The property '" + req + "' is not set"); System.exit(1); } } // FOR public class Benchmark3 extends Configured implements Tool { public static String getTypeString(int type) { if (type == 1) { return ("UserVisits"); } else if (type == 2) { return ("Rankings"); } return ("INVALID"); } /* (non-Javadoc) * @see org.apache.hadoop.util.Tool#run(java.lang.String[]) */ public int run(String[] args) throws Exception { BenchmarkBase base = new BenchmarkBase(this.getConf(), this.getClass(), args); Date startTime = new Date(); System.out.println("Job started: " + startTime); 1 p1_job.setInputFormat(base.getSequenceFile() ? SequenceFileInputFormat.class : KeyValueTextInputFormat.class); if (base.getSequenceFile()) p1_job.setOutputFormat(SequenceFileOutputFormat.class); p1_job.setOutputKeyClass(Text.class); p1_job.setOutputValueClass(Text.class); p1_job.setMapperClass(base.getTupleData() ? edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TupleWritableMap.class : edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TextMap.class); p1_job.setReducerClass(base.getTupleData() ? edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TupleWritableReduce.class : edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TextReduce.class); p1_job.setCompressMapOutput(base.getCompress()); // Phase #2 // ------------------------------------------JobConf p2_job = base.getJobConf(); p2_job.setJobName(p2_job.getJobName() + ".Phase2"); p2_job.setInputFormat(base.getSequenceFile() ? SequenceFileInputFormat.class : KeyValueTextInputFormat.class); if (base.getSequenceFile()) p2_job.setOutputFormat(SequenceFileOutputFormat.class); p2_job.setOutputKeyClass(Text.class); p2_job.setOutputValueClass(Text.class); p2_job.setMapperClass(IdentityMapper.class); p2_job.setReducerClass(base.getTupleData() ? edu.brown.cs.mapreduce.benchmarks.benchmark3.phase2.TupleWritableReduce.class : edu.brown.cs.mapreduce.benchmarks.benchmark3.phase2.TextReduce.class); p2_job.setCompressMapOutput(base.getCompress()); 2 // // Execute #1 // base.runJob(p1_job); // // Execute #2 // Path p2_output = new Path(base.getOutputPath().toString() + "/phase2"); FileOutputFormat.setOutputPath(p2_job, p2_output); FileInputFormat.setInputPaths(p2_job, p1_output); base.runJob(p2_job); // // Execute #3 // Path p3_output = new Path(base.getOutputPath().toString() + "/phase3"); FileOutputFormat.setOutputPath(p3_job, p3_output); FileInputFormat.setInputPaths(p3_job, p2_output); base.runJob(p3_job); // Phase #3 // ------------------------------------------JobConf p3_job = base.getJobConf(); p3_job.setJobName(p3_job.getJobName() + ".Phase3"); p3_job.setNumReduceTasks(1); p3_job.setInputFormat(base.getSequenceFile() ? SequenceFileInputFormat.class : KeyValueTextInputFormat.class); p3_job.setOutputKeyClass(Text.class); p3_job.setOutputValueClass(Text.class); //p3_job.setMapperClass(Phase3Map.class); p3_job.setMapperClass(IdentityMapper.class); p3_job.setReducerClass(base.getTupleData() ? edu.brown.cs.mapreduce.benchmarks.benchmark3.phase3.TupleWritableReduce.class : edu.brown.cs.mapreduce.benchmarks.benchmark3.phase3.TextReduce.class); // There does need to be a combine if (base.getCombine()) base.runCombine(); return 0; } } 3 4 44 SELECT sourceIP, totalRevenue, avgPageRank FROM SELECT sourceIP, sum(adRevenue) as totalRevenue, avg(pageRank)as avgPageRank FROM Rankings as R, Uservisits as UV WHERE R.pageURL = UV.destURL and UV.visitDate between Date (‘2000-01-15’) and Date (‘2000-01-22’) GROUP BY UV.sourceIP ORDER BY totalRevenue DESC limit 1; 45 Отказо-устойчивая система Большие объемы данных Запросы на декларативном языке(типа SQL) (использование Hadoop) HIVE HiveQL = Удобные средства написания запросов(SQL) + MapReduce 46 Подобно реляционным БД, данные хранятся в таблицах Типы данных богаче, чем в SQL Простые типы: int, float, string, date Сложные типы: ассоциативные массивы, списки, структуры CREATE Table Example: Employees ( Name string, Salary integer, Children List <Struct <firstName: string, DOB:date>> ) 47 Как и в параллельных реляционных БД, Hive таблицы могут храниться в нескольких разделах Пример: Sales(custID, zipCode, date, amount) partitioned by state Hive DDL: Create Table Sales( custID INT, zipCode STRING, date DATE, amount FLOAT) Partitioned By (state STRING) Sales custID zipCode … custID zipCode … 201 12345 … 13 54321 … 105 12345 … 67 54321 … 933 12345 … 45 74321 … Alabama HDFS оглавление Alaska custID zipCode … … 78 99221 … 345 99221 … 821 99221 … Wyoming 1 HDFS файл на каждый штат 48 Sales(custID, zipCode, date, amount) partitioned by state HDFS оглавление Sales custID zipCode … HDFS файлы custID zipCode … 201 12345 … 13 54321 … 105 12345 … 67 54321 … 933 12345 … 45 74321 … Alabama custID zipCode … … Alaska 78 99221 … 345 99221 … 821 99221 … Wyoming Запрос 1: За последние 30 дней выдать объем продаж по каждому индексу (zipCode): SELECT zipCode, sum(amount) FROM Sales WHERE getDate()-30 < date < getDate() GROUP BY zipCode Запрос будет быполнен по всем штатам/разделам 49 Sales(custID, zipCode, date, amount) partitioned by state HDFS оглавление Sales custID zipCode … HDFS файлы custID zipCode … 201 12345 … 13 54321 … 105 12345 … 67 54321 … 933 12345 … 45 74321 … Alabama Alaska custID zipCode … … 78 99221 … 345 99221 … 821 99221 … Wyoming Запрос 2: За последние 30 дней выдать объем продаж по каждому индексу (zipCode) штата Alabama: SELECT zipCode, sum(amount) FROM Sales WHERE State = ‘Alabama’ and getDate()-30 < date < getDate() GROUP BY zipCode 50 Оптимизация запросов Эвристические приемы Ограниченная статистика (только размер файлов) делает практически невозможной оптимизацию запросов на основе стоимости Используются простые эвристические приемы для выборки перед соединением, раннего исключение столбцов, ... Результат частичной оптимизации – направленный граф (без циклов) MapReduce работ на языке Java Блок оптимизации Запрос выполняется (контролируется) стандартным MR планировщиком Отказо-усточивость обеспечивается автоматически Планы сложные для понимания и анализа Может пережить отказы узла/диска/сетевого маршрутизатора в середине обработки запроса Планы выполнения выглядят сложнее поскольку каждый шаг обработки использует в качестве входа отдельный файл HDFS 51 Оборудование Кластер из 9 HP узлов, каждый имеет 2 4-х ядерных процессорв, 16GB памяти, 4 жестких диска для данных ПО SQL Server PDW (Parallel Data Warehouse) Windows Hadoop Version 0.20.203, Hive Version 0.7.1 1 контролирующий узел, 8 рабочих 1 узел имен, 8 узлов данных Windows Server 2008 Тест таблицы из TPC-H (SF 800) lineitem: 612GB, 4.8B записей orders: 140GB, 1.2B записей 52 Query 1: SELECT count(*) FROM lineitem Query 2: SELECT max(l_quantity) FROM lineitem WHERE l_orderkey > 1000 and l_orderkey < 100000 GROUP BY l_linestatus Secs. 1500 1000 Hive PDW 500 0 Query 1 Query 2 53 Query 3: SELECT max(l_orderkey) FROM orders, lineitem where l_orderkey = o_orderkey 2 случая для PDW : Разделение Hive таблиц i) PDW-U: ordersпо partitioned on c_custkey столбцу соединенияlineitem не дает partitioned on l_partkey ii) PDW-P: ordersнет partitioned on o_orderkey никаких выгод, поскольку Демонстрирует преимущество lineitem параллельных реляционных БД, в средств контроля, куда HDFS partitioned on l_orderkey которых способ разделение таблиц позволяет минимизировать перемещение данных между узлами кластера (соединяемые разделы находятся на том же узле) размещаетSecs. блоки данных таблиц 4000 3000 Hive PDW-U PDW-P 2000 1000 0 Hive PDW-U PDW-P 54 Рассмотрим два файла (множества записей): UserVisits Rankings ( ( sourceIP STRING, destURL STRING visitDate DATE, adRevenue FLOAT, .. pageURL STRING, pageRank INT, avgDuration INT ); ); Запрос: Найти sourceIP адрес, генерирующий наибольший доход, вместе со средним рангом посещенных страниц 55 UV = load ‘userVisits’ as (sourceIP, destURL, visitDate, adRevenue); UVFiltered = filter UV by visitDate >= ‘2000-01-15’ and visitDate <= ‘2000-01-22’; R = load ‘Ranking’ as (pageURL, pageRank); Joined = join UVFiltered by destURL, R by pageURL; Grouped = group Joined by sourceIP; Summed = foreach Grouped generate group, sum(adRevenue) as totalRevenue, avg(pageRank) as avgPageRank; Sorted = order Summed by totalRevenue desc ; Top1 = limit Sorted 1; store Top1 into ‘topIPaddress’; 56 3 Hive & Pig 2 Map/ Reduce 4 Sqoop Relational Databases 5 HDFS 1 57 (причина 1) Структурированные данные (рел.БД) Неструктурированные данные (Hadoop) Sqoop Все больше данных изначально попадает в неструктурированный мир MapReduce – прекрасное средство для ETL (выбор, очистка, преобразование, загрузка) Sqoop предоставляет утилиту загрузки, выполняемую из командной строки 58 (причина 2) Неструктурированные данные (Hadoop) Структурированные данные (рел.БД) Sqoop Некоторые задачи анализа проще делать в процедурном языке или в языке типа HiveQL с элементами MapReduce, когда необходимо Sqoop предоставляет: Как мы увидим эффективность этого невысока утилиту выгрузки, выполняемую из командной строки Возможность для Map задач “доставать” данные из реляционной БД, используя SQL 59 (причина 3) Структурированные данные (рел.БД) Неструктурированные данные (Hadoop) Sqoop Некоторые приложение требуют данные из обоих миров Только в неструктурированном мире т.к. неструктурированные данные не могут быть загружены в реляционную БД По-прежнему, эффективность этого невысока Использвать утилиту выгрузки и доступ к БД для Map задач 60 Map задача требует результат запроса : Q: SELECT Смещение a,b,c FROM WHERE P задачи. X своеTдля каждой Map 1 Sqoop X=0 Пример, пусть Cnt 100 Каждая и map() должна выбрать X=33 используются 3 Map Map 2 Map 3 задачи свое (непересекающееся) Для Map 1 Sqoop Sqoop подмножество записей X=66 Для Map 2 Для Map 3 L=33 L=33 L=34 RDBMS Эффективность T будет Cnt плохая, поскольку таблица T читается 4 раза! Шаг (1): Sqoop выполняет В общем случае, с M Map SELECTтаблица count(*) задачами, T FROM бы T WHERE P читалась M + 1 раз!!!!!! для получения Cnt, числа записей в T Шаг (2): Sqoop генерирует отдельный запрос Q’ для каждой Map задачи: SELECT a,b,c FROM T WHERE P ORDER BY a,b,c Limit L, Offset X Шаг (3): Каждая из задач выполняет свой запрос 61 Неструктурированные данные (Hadoop) Структурированные данные (Рел.ДБ) Администратор Данных Предприятия Пересылка данных – это прошлый век! Почему бы не создать систему управления данными которая: Может выполнять запросы, используя данные из обоих миров без необходимости их перемещения из одного в другой Имеет выразительную возможность языков типа HiveQL Назовем такую систему Администратор Данных Предприятия АДП (EDM – Enterprise Data Manager). 62 Первая попытка создать «Администратор Данных Предприятия» Подобно Hive Использует HDFS для «неструктурированных» данных Использует среду MR для обработки запросов для обеспечения масштабируемости и отказо-устойчивости Поддерживает язык запросов типа HiveQL В отличие от Hive Имеет реляционную БД на каждом узле Использует новый подход разделения выполнения запроса между областями структурированных и неструктурированных данных (прозрачно с точки зрения пользователя) 63 Работа SQL MapReduce Запрос Синтаксический анализатор Каталоги Оптимизатор запросов Администратор MR Таблицы РБД разделяются между узлами путем хеширования «Неструктурированные» данные хранятся в HDFS SQL запросы компилируются в последовательность работ MapReduce Используется подход разделения выполнения запроса, при этом РБД используется как можно больше Рассмотрим соединениетаблиц A и B MapReduce MapReduce MapReduce MapReduce MapReduce HDFS RDBMS MapReduce HDFS RDBMS HDFS RDBMS HDFS RDBMS HDFS RDBMS HDFS РБД 64 Добавить Без необходимости загрузки Лучшая масштабируемость Неструктур. данные Отказоустойчивость Пытающиеся достичь сравнительной производительности SQL Server PDW значительно проще Системы, основанные на Hadoop Параллельные РБД Вычислительная модель Понятие транзакции Транзакция – единица исполнения ACID обеспечивается для параллельных транзакций - Понятие работы Работа – единица исполнения Управление параллельным исполнением отсутствует Структурированные данные с известной схемой Режимы Чтение/Запись - Любые данные (не-)(полу-)структурированные Режим ТолькоЧтение - Покупается для специального применения, дороже обычного - «Собирается» пользователем из дешевых компьютеров «широкого потребления» - Отказы предполагаются редкими Отказо-устойчивость для отдельных запросов отсутствует - Отказы предполагаются довольно частыми Простая, но эффективная отказо-устойчивость на уровне запросов Эффективность, оптимизация, возможность настройки - - Модель данных Конфигурация оборудования Отказоустойчивость Ключевые характеристики Hadoop - - - - Масштабируемость, гибкость, отказо-устойчивость Реляционные БД или Hadoop? (каково будущее?) Реляционные БД и Hadoop созданы для различных целей/задач Только РБД или только Hadoop не будет основным средством для обработки больших данных 67