680 likes | 876 Views
По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей SQL Server. Что такое “ Большие Данные ” (Big Data ) и как их обрабатывать ?. Что означает термин “ Большие Данные ”?. Собрание огромного количества записей – десятки и сотни PBs. ?.
E N D
Поматериаламлекциипроф. David J. DeWitt наежегодномсобраниипользователей SQL Server Что такое “БольшиеДанные” (Big Data) и как их обрабатывать?
Что означаеттермин “БольшиеДанные”? • Собрание огромногоколичествазаписей – десятки и сотни PBs ? Для кого-тоэтоиспользованиет.н.NoSQLсистемилипараллельныхреляционных БД • Обычно размещаютсянабольшихкластерах, построенныхнадешевыхпроцессорах. • Facebook (в 2009 г.) имелкластериз 2700 узлов с объемомдисковойпамяти 60PB ( 100PB в 2012)!!
Немного статистики • Если любите аналогии… Petabytes • 35ZB = достаточноданных, • чтобыобразоватьстопку CD • дисков (0.8GB каждый) высотойс • половинупутиот ЗемлидоМарса, • или 70 стопок от Землидо Луны 1 zettabyte? = 1 million petabytes = 1 billion terabytes = 1 trillion gigabytes Sources: "Big Data: The Next Frontier for Innovation, Competition and Productivity." US Bureau of Labor Statistics | McKinsley Global Institute Analysis Земля Марс
Почемувнезапныйвзрывинтереса? Значительновозросшееколичество и разнообразиеисточников, вырабатывающихогромныйобъемданных Аналогово-цифровыедатчики(координатные, звуковые, …) Web 2.0 текст (твиттер, википедия, … ) Web клик-поток Понимание, чтонекоторыеданные “слишкомценны”, чтобыудалятьих, либо само удаление слишком дорого. Существенноеснижениестоимостиоборудования, особенно – дисковойпамяти Еслибыценабыла $500/GB (в 1994 г.), небылобыреволюцииБольшихДанных” (в 2014 г. $0.05/GB)
Какработать с “БольшимиДанными”? Использовать параллельную (реляционную) БД eBay – 10PB на 256 узлах Использовать NoSQL Facebook - 20PB на 2700 узлах Bing – 150PB на 40000 узлах Ebay – 5PB на 532 узлах
Что означаетNoSQL? • Нето, что SQL недолжениспользоватьсядляобработки “Большихданных”. • Нето, что SQL и реляционные БД устарелии отмирают. • Нетолько SQL. Для определенногокругазадачдругиеподходы к хранению и обработкеинформациимогутбытьболееэффективными, особенно с точкизрениялегкостирасширения (масштабируемости) информационнойбазыприпостоянномдобавленииновыхданных. • Непутать с NewSQL – новыйподход к построениюреляционных БД дляприложений, ориентированныхнаобработкубольшогоколичестватранзакций, сочетающийудобства SQL с масштабируемостью NoSQL систем.
ПочемуNoSQL? • Болеегибкаямодельданных. • Нетребуетсязаранеесхема. • Можетиспользоватьсяпопулярный JSON (JavaScript Object Notation) форматдляописанияданных. • Ослаблениетребованияцелостности/согласованностиданныхнаусловиеконечной (возможной в будущем) согласованности. • Готовностьпоступитьсяцелостностьюрадидоступности. • Дешевое/бесплатное ПО. • Ненадознатьязыкикроместандартных Java/C/C++ (предположительно :-) ) освоенных в школе/университете. • Болеебыстрыйдоступ к данным.
Болеебыстрыйдоступ к данным SQL: Загрузка данных Данные поступают Преобразование данных Очистка данных 3 5 1 4 Разработка схемы БД СУБД SQLзапросы Иногданазывают “Сначаламодель” 2 6 NoSQLсистема Приложение Данные поступают NoSQL: 2 1 • Не требуется очистка! • Не требуется преобразование! • Не требуется загрузка! • Анализ там где данные оказались! Иногданазывают “Модельпозже”
ДваосновныхтипаNоSQL систем Хранилище “ключ(и): значение” Примеры: MongoDB, CouchBase, HBase, Cassandra, Windows Azure, … Гибкаямодельданныхтипа JSON Записираспределенымеждуузламикластерапутемхешированиязначенияключа(sharding) Поиск/извлечение/обновлениеотдельнойзаписипоключу Hadoop Программнаясредадлясоздания (автоматически) масштабируемых и отказо-устойчивыхсистемсбора, хранения и обработкибольшихобъемовданных. Модельданныхобычноотсутствует Записихранятся в распределеннойфайловойсистеме. Походе на систему обраб. транзакций без SQL Похоже на “склад данных” (data warehouse) без SQL
Двамира – новаяреальность Структурированный Не структурированный & Реляционные СУБД NoSQL Системы (Не-)(полу-)структурированныеданные, схема (заранее) неизвестна Структурированные данные с (заранее) известной схемой ACID (АСИН) ACID не гарантируется Транзакции Транзакции не поддерживаются Использование SQL в качестве языка SQL не используется Модель жесткой согласованости Возможная согласованность ETL(извлечение,преобразование,загрузка) ETL не требуется Дольше до получения какого-то результата Конкретный результат м.б. быстрее Зрелость, стабильность, эффективность Гибкость
Что насожидает? Мирдействительноизменился Реляционные СУБД большенеявляютсяосновным и подавляющиминструментомхранения и обработкиданных Новыеподходыдолжныприниматьсякакноваяреальность, требуетсяпониманиекакнаилучшимобразом использоватьновыетехнологии, такиекак Hadoop Реляционные СУБД продолжатдоминировать в системахобработкитранзакций и в небольщихдосреднихразмеров “хранилищданных” Многопользователейбудутвынужденыиметьдело с обоимимирами
Все началось в Google • Огромный объем данных из клик-потоков, которые необходимо сохранять и анализировать 2006 2003 Hadoop MR/GFS Две ключевых части: Требования: • Масштабируемость до PB итысяч узлов • Высокий уровень отказоустойчивости • (Относительная) простота программирования GFS + MapReduce Распределенная и отказо-устойчивая “новая” парадигма программирования Сохранение Обработка Сохранение Обработка Hadoop = HDFS + MapReduce
Что позволяет Hadoop? Возможность использования для «Хранилищ Данных» Масштабируемость и высокий уровень отказо-устойчивости Hadoop и MapReduceпредоставляют: Возможность быстро анализировать большие множества записей без необходимости начального построения модели, очистки и загрузки данных Низкая начальная стоимость оборудования и программного обеспечения Простая парадигма программирования для написания и выполнения программ (автоматически) масштабируемых до тысяч узлов и PB данных
Среда разработки Hadoop • HDFS – распределенная, отказо-устойчивая файловая система • MapReduce – набор средств для разработки/выполнения распределенных отказо-устойчивых приложений • Hive & Pig – языки разработки приложений(с элементами SQL) • Sqoop – пакет программ для передачи данных между HDFS и реляционной БД • А также другие… Hive & Pig Отчеты Рел.БД Средства загрузки Sqoop Map/ Reduce HBase HDFS
Основные пункты Hive & Pig 3 4 Реляционная БД Sqoop Map/ Reduce 2 5 HDFS 1
HDFS – распределенная файловая система (Hadoop Distributed File System) • Основа всей среды разработки Hadoop • Цели HDFS: • Масштабируемость до тысяч узлов • Предположение, что отказы (оборудования и ПО) возникают достаточно часто • Предназначена для хранения небольшого количества очень больших файлов • Файл записывается один раз, а читается многократно • Традиционная иерархическая организация файлов и оглавлений • Высокая степень переносимости между разными платформами Hive & Pig Sqoop Map/ Reduce HDFS
Разделение файла на блоки Пример: Большой файл 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001 … 6440MB Обозначим блоки разным цветом Блок 1 Block 1 Block 2 Блок 2 Block 3 Блок 3 Блок 4 Block 4 Блок 5 Block 5 Block 6 Блок 6 … Block 100 Блок 100 Block 101 Блок 101 64MB 64MB 64MB 64MB 64MB 64MB 64MB 40MB • Файлы HDFS состоят из множества блоков • Обычный размер блока64MB • Каждый блок хранится как отдельный файл в локальной файловой системе (например,NTFS) т.е. Размер блока = 64MB
Физическое размещение блоков Пример: • Стратегия размещение по умолчанию: • Первая копиязаписывается на узел, создающий файл (близость записи) • Вторая копиязаписывается на узелв той же стойке (чтобы минимизировать сетевой трафик между стойками) • Третья копиязаписывается на узелв другой стойке Блок 3 Блок 2 Блок 1 Блок 2 Блок 2 Блок 3 Блок 3 Блок 1 Блок 1 Фактор дублирования = 3 • Цели:равномерная загрузка, быстрый доступ, отказо-устойчивость Узел 3 Узел 4 Узел 1 Узел 2 Узел 5
Типы узлов HDFS кластера • Узел [обслуживания] имен (NameNode)– один на кластер • Отвечает за операции над метаданными (данные о данных), избыточность/дублирование данных, местоположение блоков • Резервный узел имен(Backup Node) – резервная копия узла имен • Узлы данных(DataNodes)– один на каждый узел кластера • Отвечает за хранение блоков файла • Предоставляет данные файла в ответ на запрос приложения Узел имен Мастер Резервный узел имен (копия) DataNode DataNode DataNode Узел данных Робот
Архитектура HDFS Резервный узел имен Узел имен (проверка состояния, балансирование загрузки, дублирование блоков, и т.д.) Узел данных Узел данных Узел данных Узел данных Узел данных Узлы записывают на свои локальные диски
Помещение файла в HDFS Большой файл 110010101001 010100101010 011001010100 101010010101 001100101010 010101001010 100110010101 001010100101 {узел 1, узел 2, узел 3} {узел 2, узел 4, узел 5} {узел 1, узел 3, узел 5} {узел 2, узел 3, узел 4} основываясь на “факторе дублирования” (по умолчанию - 3) HDFS Клиент Узел имен указывает клиенту, куда записать каждый блок файла Узел имен Резервный Узел имен Клиент передает блоки указанным узламнапрямую И так далее… Узел данных Узел данных Узел данных Узел данных Узел данных
Получение файла из HDFS Большой файл 110010101001 010100101010 011001010100 101010010101 001100101010 010101001010 100110010101 001010100101 HDFS Клиент Возвращает расположение блоков файла Узел имен Резервный узел имен Поток блоков от узлов ранных Узел данных Узел данных Узел данных Узел данных Узел данных
Отказы, отказы, отказы • HDFS разрабатывалась, предполагая частые отказы (как оборудования так и ПО) Типы отказов: • Ошибки или полный отказ дисков • Отказы узлов данных • Отказы стоек/сетевых коммутаторов • Отказы узла имен • Полный отказ дата-центра NameNode DataNode
Отказо-устойчивость (Узел данных) Узел имен Резервный узел имен Каждый блок данных автоматически дублируется на оставшихся узлахудовлетворяя «фактору дублирования» Узел имен обнаруживает отказ узла данных Узел данных Узел данных Узел данных Узел данных Узел данных Узел данных Узел данных Узел данных
Отказо-устойчивость (Узел имен) Резервный узел имен Восстановление может быть автоматическим или требовать ручного вмешательства в некоторых случаях Узел имен Отказ не катастрофический, так как имеется резервный узел Узел данных Узел данных Узел данных Узел данных Узел данных
Автоматическое масштабирование ибалансирование без остановки системы Резервный узел имен Узел имен Блоки данных равномерно перераспределяются Узел имен обнаруживает, что новый узел данных добавленк кластеру Узел данных Узел данных Узел данных Узел данных Узел данных Узел данных Узел данных Узел данных
Некоторые итоги обсуждения HDFS • Высокая степеньмасштабируемости • Тысячи узлов данных и огромные (сотни TB) файлы • Большой размер блоков для повышения скорости последовательного ввода/вывода • Не используются «зеркальные диски» иRAID. • Меньшая цена • Использвание единого инструмента (тройное дублирование блоков) для борьбы с различными типами отказов вместо различных механизмов • Недостатки • Размещение блоков «прозрачно» для ПО верхнего уровня • Многие возможностиоптимизации (с успехом используемые в параллельных реляционных БД) не применимы • Принцип «одна запись – многократное чтение» может быть слишком ограничительным Почему?
Переходим к MapReduce Hive & Pig 3 4 Relational Databases Sqoop Map/ Reduce 2 5 HDFS 1
Что такое Hadoop MapReduce (MR)? • Среда программирования (библиотеки и исполняющая система) для анализа данных, хранимых в HDFS • MapReduce задание состоит из двух функций/этапов: • Пользователь только разрабатывает Map и Reduce функции • MR среда «собирает» все вместе и координирует выполнение Map и Reduce функций на кластере, обеспечивая • отказо-устойчивость • масштабируемость map() reduce() объединяй & сокращай (функция агрегирования) разделяй &властвуй (функция отображения)
Главная идея MapReduce В основном, это… • Взять большую задачу и разделить ее на под-задачи • Выполнить (одну и ту же) функцию отображения для всех под-задач • Соединить результат всех под-задач(функция агрегирования) … MAP … DoWork() DoWork() DoWork() REDUCE … Вывод
Визуальное представление MapReduce <ключA, знач.Ai> <ключB, знач.Bi> <ключC, знач.Ci> … Mapper <ключi,знач.i> <ключB, список(знач.Bi, знач.Bj, знач.Bk, …)> <ключA, список(знач.Ai, знач.Aj, знач.Ak, …)> <ключC, список(знач.Ci, знач.Cj, знач.Ck, …)> Reducer Reducer Reducer сорти- ровка и груп- пиро- вание по ключу <ключA, знач.Aj> <ключB, знач.Bj> <ключC, знач.Cj> … Mapper <ключi,знач.i> Получение и вывод результата <ключA, знач.Ak> <ключB, знач.Bk> <ключC, знач.Ck> … Mapper <ключi,знач.i> Узел данных Узел данных Узел данных <ключA, знач.Al> <ключB, знач.Bl> <ключC, знач.Cl> … Mapper <ключi,знач.i>
Компоненты MapReduce Как все это работает с HDFS? Мастер Узел имен Hadoop -Координирование всех MR задач и событий - Управление очередями работ и графиком выполнения - Поддержка и контрольОператоров Задач - Перемещение/возобновление MR задач, если нужно - Использование «контрольных точек» для восстановленияпосле отказа Оператор Работ Уровень MapReduce Уровень HDFS Узел имен Оператор Работконтролирует и следит за состояниемОператоров Задач hadoop- УзелДанных1 hadoop- УзелДанных2 hadoop- УзелДанных3 hadoop- УзелДанных4 Роботы Выполнение индивидуальных MR задач, назначенныхОператором Работ (в отдельнойJVM) Оператор Задач Оператор Задач Оператор Задач УзелДанных УзелДанных УзелДанных УзелДанных Оператор Задач Уровень MapReduce ОперЗадач сохраняет промежуточные результаты Уровень HDFS Промежуточные данные сохраняются в локальной файловой системе
Представление работы Поставляет работыОператору Работ MR клиент Оператор Работ Работы ставятся в очередь Map функции назначаютсяОпер.Задач на каждом Узле Данных Начинается этап объединения/сокращения ОперЗадач ОперЗадач ОперЗадач ОперЗадач Функции отображения запускаются на отдельнойJVM и выполняются Mapper Mapper Mapper Mapper Reducer Reducer Reducer Reducer Функции отображения сохраняют промежуточные результаты локальные файловые системы узлов данных
MapReduce: Map-этап, под-задачи Получить сумму продаж по каждому индексу (клиент, индекс, объем продаж) УзелДанных3 5 0 2 6 5 9 6 3 5 1 7 8 3 1 2 6 5 4 7 0 9 8 6 4 44313 02115 44313 53705 54235 44313 53705 53705 44313 53705 02115 10025 44313 54235 02115 53705 44313 54235 10025 02115 53705 10025 44313 02115 02115 53705 54235 10025 10025 53705 44313 54235 54235 53705 10025 44313 $75 $15 $22 $60 $15 $75 $65 $60 $15 $30 $55 $25 $55 $10 $10 $15 $15 $25 $30 $95 $95 $15 $15 $30 $22 $65 $75 $25 $22 $15 $55 $15 $10 $60 $65 $95 Group By Mapper Один сегмент данных на задачу агрегир. Блоки файла продаж в HDFS УзелДанных2 Group By Mapper УзелДанных1 Задачи отображения
Reducer Фаза агрегирования Агреги- ровать Агреги- ровать Агреги- ровать Сорти- ровать Сорти- ровать Сорти- ровать Mapper Reducer • Работа выполнена! 02115 54235 10025 44313 53705 $30 $97 $90 $155 53705 54235 10025 44313 10025 53705 53705 54235 02115 44313 44313 02115 44313 53705 44313 54235 53705 02115 02115 10025 44313 53705 10025 10025 53705 54235 44313 44313 54235 53705 02115 10025 53705 44313 54235 02115 $110 $65 $10 $10 $25 $30 $15 $75 $10 $25 $95 $55 $22 $15 $15 $65 $30 $15 $15 $65 $30 $15 $55 $60 $22 $25 $15 $15 $75 $60 $15 $75 $22 $95 $55 $60 $95 Перетасование Reducer Mapper Задачиагрегирования
Как насчет более сложных задач?(например, соединение двух файлов по ключу)
Соединение двух больших файлов Различныеключи ФайлA ФайлB Задачи агрегирования выполняют само соединение Reducer 1 Reducer 2 Reducer N Перетасовка по сети и сортировка Перетасовка и сортировка Задача отображениягенерирует множество пар (ключ, запись) Каждая задача отображения обрабатывает по одному блоку в раз Mapper 1 Mapper 2 Mapper 3 Mapper M HDFS хранит блоки данных (Дублирование не показано)
Несколько дополнительных деталей • Действительное число задач отображения Mобычно выбирается значительно большим, чем число узлов. • Почему? • Помогает иметь дело с неравномерность распределения значений ключей(data skew) и отказами Пример: Скажем, M= 10,000 и W= 100 (W- числоMap роботов) Каждый робот выполнит(10,000 / 100) = 100задач отображения Если на этапе отображения возникант неравномерность или отказ, невыполненная задача может быть легко перераспределена для выполнения на другом роботе • Проблема неравномерности на уровне агрегирования не исчезает • Пример: В запросе “получить сумму продаж по каждому индексу”,некоторые из индексов могут иметь гораздо больше записей для обработки, чем другие
Как преодолеваются отказы? • Подобно HDFS, среда разработки MapReduceпостроена, чтобы обеспечть высокий уровень отказо-устойчивости • Отказ робота (на этапе отображения или агрегирования) • Обнаруживается периодическими проверками, исходящими от Мастера • Незавершенные задачи стартуют сначала на другом узле • Если узел отказывает после завершения этапа отображения – вся задачи отображения этого узла переделывается, и все задачи агрегирования уведомляются. • Отказ Мастера • Если отказывает Мастер (-процесс), то вся работа полностью переделывается
MapReduce–за и против • Весьма высокая отказо-устойчивость • Относительно простое программирование распределенных вычислений для типичных функций типа агрегирования • Среда MR позволяет программисту не заботиться об отказах и сбоях • Схема/структура данных кодируется в каждом приложении • Недостаток общей схемы данных • Делает совместное использование данных между приложениями весьма затруднительным • Невозможно использование аппарата реляционых БД (таких как индексы, ограничения целостности, представления, …) для эффективной обработки • Нет декларативного языка для описания и доступа к данным типа SQL
Первые языки программирования в «среде Hadoop» Hive & Pig 3 4 Relational Databases Sqoop 2 Map/ Reduce 5 HDFS 1
Hive и Pig • ииспользовали разные подходы к использованию декларативных языков для работы с данными (подобно SQL) в дополнение к MapReduce • Facebook разработалаязык типа SQL, названныйHIVE • Yahoo разработала более процедурный язык, названныйPIG • Оба подхода используютMapReduceкак язык описания/выполнения работ • Запросы/программы на языках Hive и Pig компилируются в последовательность работMapReduce
Пример Рассмотрим два файла (множества записей): UserVisits ( sourceIPSTRING,destURLSTRINGvisitDate DATE,adRevenue FLOAT,.. ); Rankings ( pageURLSTRING,pageRank INT,avgDuration INT ); соединение Запрос: НайтиsourceIPадрес, генерирующий наибольший доход, вместе со средним рангом посещенных страниц
In MapReduce 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; 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); // 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); // // 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 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()); Запрос требует3 MapReduceработы, так как написание программы соединениявMR – довольно трудоемкая задача Даже не пытайтесь это читать! 1 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); // There does need to be a combine if (base.getCombine()) base.runCombine(); return 0; } } // 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()); // 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); 4 страницы мелким шрифтом!!! 4 3
ВHiveQL 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; Из 150000 работвыполняемых ежедневно в Facebook, только 500 –работы написанные непосредственно в MapReduce!Остальные- вHiveQL!! Да здравствует SQL!!! В Facebook сделали вывод: • “… MapReduceбыл не простым для пользователей… “ • “… пользователи тратили несколько часов (или даже дней) для написания MR программ даже для очень простого анализа” Толькопол-страницыкрупным шрифтом!
Цели Hive иHiveQL Отказо-устойчивая система Большие объемы данных Запросы на декларативном языке(типа SQL) (использование Hadoop) HIVE HiveQL = Удобные средства написания запросов(SQL) + MapReduce
Таблицы в Hive • Подобно реляционным БД, данные хранятся в таблицах • Типы данных богаче, чем в SQL • Простые типы: int, float, string, date • Сложные типы: ассоциативные массивы, списки, структуры Example: • CREATE Table Employees ( • Name string, • Salary integer, Children List <Struct <firstName: string, DOB:date>>)
Хранение данных в Hive • Как и в параллельных реляционных БД, Hive таблицы могут храниться в нескольких разделах • Пример: Sales(custID, zipCode, date, amount) partitioned by state Hive DDL: Sales HDFS оглавление Create Table Sales( custID INT, zipCode STRING, date DATE, amount FLOAT) Partitioned By (state STRING) … Alaska Alabama Wyoming 1 HDFS файл на каждый штат Записи в файле могу не содержать название штата! Каждый HDFSфайл в свою очередь разделен на большие блоки, которые продублированыи распределены по узлам кластера
HiveQLпример 1: Sales(custID, zipCode, date, amount) partitioned by state HDFS оглавление Sales … HDFS файлы Alaska Alabama Wyoming Запрос 1: За последние30 дней выдать объем продаж по каждому индексу (zipCode): SELECT zipCode, sum(amount) FROM Sales WHERE getDate()-30 < date < getDate() GROUP BY zipCode Запрос будет быполнен по всем штатам/разделам
HiveQLпример 2: Sales(custID, zipCode, date, amount) partitioned by state HDFS оглавление Sales … Alaska Alabama Wyoming HDFS файлы Запрос 2: За последние 30 дней выдать объем продаж по каждому индексу (zipCode)штатаAlabama: SELECT zipCode, sum(amount) FROM Sales WHERE State = ‘Alabama’ and getDate()-30 < date < getDate() GROUP BY zipCode Запрос будет выполнен по всем разделам (одного узла), содержащим записи штата Alabama