├── 00_quetions.txt ├── 01_quetions.txt ├── 02_quetions.txt ├── 03_quetions.txt ├── 1.2.3.txt ├── 1.2.6.txt ├── 2.1.11.txt ├── 2.1.13.txt ├── 2.1.15.txt ├── 2.1.16.txt ├── 2.1.2.txt ├── 2.1.3.txt ├── 2.1.4.txt ├── 2.1.6.txt ├── 2.1.8.txt ├── 2.1.9.txt ├── 2.2.10.txt ├── 2.2.11.txt ├── 2.2.2.txt ├── 2.2.4.txt ├── 2.2.5.txt ├── 2.2.6.txt ├── 2.2.7.txt ├── 2.2.8.txt ├── 2.3.2.txt ├── 2.3.3.txt ├── 2.3.4.txt ├── 2.3.5.txt ├── 2.3.6.txt ├── 3.1.10.txt ├── 3.1.11.txt ├── 3.1.13.txt ├── 3.1.3.txt ├── 3.1.4.txt ├── 3.1.6.txt ├── 3.1.7.txt ├── 3.1.8.txt ├── 3.1.9.txt ├── 3.2.10.txt ├── 3.2.2.txt ├── 3.2.3.txt ├── 3.2.4.txt ├── 3.2.5.txt ├── 3.2.7.txt ├── 3.2.8.txt ├── 3.2.9.txt ├── 3.3.10.txt ├── 3.3.11.txt ├── 3.3.12.txt ├── 3.3.2.txt ├── 3.3.3.txt ├── 3.3.4.txt ├── 3.3.5.txt ├── 3.3.6.txt ├── 3.3.7.txt ├── 3.3.8.txt ├── 3.3.9.txt ├── 4.1.3.txt ├── HBase.pdf ├── HDFS.pdf ├── HDFS_API.pdf ├── HDFS_Shell.pdf ├── Hive.pdf ├── MapReduce.1.pdf ├── MapReduce_API.1.pdf ├── MapReduce_Algorithme.1.pdf ├── MapReduce_Graph.pdf ├── NoSQL.pdf ├── Pig.pdf ├── README.md ├── Spark.pdf ├── Spark_Engine.pdf └── YARN.pdf /00_quetions.txt: -------------------------------------------------------------------------------- 1 | Вопрос следующий: " Можно ли как-то посмотреть на сколько блоков был разбит 2 | некоторый большой файл на Datanode's, а также, где реплики для каждого 3 | блока файла хранятся ? ( информацию о метаданных хранит NameNode )". 4 | 5 | Все это вы можете посмотреть с помощью команды: $hadoop fsck -files -blocks -locations 6 | 7 | Собственные заметки: 8 | 9 | 1) В чем основное отличие реляционных БД от Hadoop? 10 | 11 | Hadoop способен решать задачи: 12 | + 13 | горизонтальная масштабируемость за счёт дешевого железа 14 | отказоустойчивость 15 | репликация данных ( по умолчанию 3 уровня) 16 | перезапуск задач 17 | распределенные вычисления на кластере из множества машин 18 | скрывает сложности распределенных систем 19 | освобождает разработчиков от проблем системного уровня 20 | передача данных 21 | доставка кода к данным и др. 22 | последовательный доступ к данным 23 | поддержка принципа типа "один раз записать данные и много раз считывать в дальнейшем" 24 | подходи для хранения большого объёма данных 25 | - 26 | данные дописываются только в конец файла 27 | не подходит для быстрого доступа к данных ( решено с помощью Hbase) 28 | 29 | Реляционные БД решают задачи 30 | - 31 | вертикальная масшабируемость за счёт апгрейда железа 32 | сложности при быстром росте нагрузки на БД 33 | сложности при решении задач распределенных вычислений из-за реляционного подхода 34 | проблема с хранением иерархических данных 35 | проблема при большом количестве столбцов ( но иногда используют компрессию по данным) 36 | + 37 | поддержка ACID (контроль за целостность данных) и отсюда 38 | атомарность ( гарантия завершенности транзакции ) 39 | согласованность ( гарантия согласованного состояния данных при изменении) 40 | изолированность ( гарантия того, что одна транзакция не влияет на результат выполнения другой) 41 | уровни изоляции (...) 42 | надежность (гарантия сохранения данных на диск) 43 | одновременный доступ к данным 44 | повышенная безопасность за счет нормализации и внешних ключей 45 | доступ к данным посредством SQL 46 | подходит для транзакционных систем 47 | быстрого доступа к данным 48 | 49 | 2) Объясните различия между HBase и Hive? 50 | 51 | Hbase - column-based (разяженная матрица), поддержка последовательного и произвольного чтения 52 | + 53 | поддержка различных структур данных 54 | меньшая согласованность данных 55 | горизонтальная масштабируемость 56 | нет фиксированной струтуры колонок 57 | выборка значений по ключу 58 | - 59 | нет поддержки SQL 60 | нет поддержки реляционной модели данных 61 | 62 | Hive - DWH с поддержкой SQL 63 | + 64 | поддержка структурированных данных 65 | предоставляет доступ к данным из HDFS и Hbase 66 | - 67 | небольшие запросы могут занять длительное время 68 | 69 | 3) Как происходит удаление строк в HBase? 70 | 71 | Как такового удаления не происходит, данные помечаются "маркерами" delete и не учитываются при фильтрации в дальнейшем. 72 | 73 | 4) Есть ли какие-то проблемы с маленькими файлами в HDFS? 74 | 75 | Лучше хранить большие файлы, чем маленькие, потому что Namenode хранит информацию о файловом пространстве, 76 | метаданных,расположении блоков данных в ОП. Если будет очень много маленьких файлов, то ресурсы для Namenode 77 | нужно будет увеличить, также возрастет нагрузка при чтении данных с диска. 78 | 79 | 5) Как вы отлаживаете код на Hadoop? 80 | 81 | Есть несколько способов отладки: 82 | 83 | 1) логирование 84 | самый простой писать логи выполнения шагов в output 85 | вызов System.out.println (java) или же print(...) (python) 86 | этот способ часто использовал 87 | использовать готовый класс-логгер в java (log4j), но не во всех случаях, 88 | т.к. объём лог-файла может быть большим, поскольку в него пишется много отладочной информации 89 | 2) использование счётчиков 90 | не пользовался 91 | 92 | 6) Как исключить несколько нод из кластера? 93 | 94 | Можно просто выключить их. Система должна корректно обработать данную ситуацию, при необходимости 95 | еще можно запустить ребалансировку блоков данных по кластеру и оставшимся нодам. 96 | Убрать ноды из соответствующего конфига, но этого никогда не делал. 97 | 98 | 99 | 7) Как использую командную строку Linux просмотреть список всех выполняющихся задания на кластере Hadoop? Как убить задание? 100 | 101 | Через веб-интерфейс jobtracker самой простой, а конкретную команду ... 102 | 103 | 104 | 8) Как реализовано индексирование в HDFS? 105 | 106 | В момент добавления данных в HDFS происходит их индексирование и в дальнейшем Namenode знает, где \ куда обращаться за данными. 107 | 108 | 109 | 9) Что такое RowKey в HBase? 110 | 111 | По RowKey осуществляется поиск данных ... своего рода аналог primary key в таблице 112 | 113 | 10) Что такое JobTracker? 114 | 115 | Управляет запуском задач и определяет, на каком TaskTracker'е будет 116 | запущен worker и на каких данных, а также мониторит прогресс выполнения и перезапускает Tasks, если они по какой-то причине не выполнились или висят долгое время 117 | 118 | -------------------------------------------------------------------------------- /01_quetions.txt: -------------------------------------------------------------------------------- 1 | NoSQL (4 июл, 2012 at 2:18 PM) 2 | 3 | В классических SQL баз данных предметная область разбивается на сущности (таблицы), 4 | между которыми устанавливаются отношения. 5 | Каждая таблица имеет строго определенный набор полей. 6 | Строка представляет объект, значение полей которого находится в соответствующих столбцах. 7 | Для ускорения доступа к данным есть индексы - структура, с помощью которой по значению поля можно быстро 8 | найти список строк с этим значением. 9 | 10 | В идеальном разбиении данных на сущности данные не дублируются. 11 | Созданы такие БД для компактного хранения, быстрых частых выборок данных, но не подходят для частых изменений. 12 | 13 | Индекс в общем сложная структура, при изменения данных он блокируется для записи (либо весь, либо его существенная часть, не важно). 14 | В этот момент никто не может вносить в него изменения. 15 | Помогает решение SQL + partitioning, когда строки в таблице разбиваются на группы, партиции, с независимым хранением данных, 16 | индексами и т.п. Хорошо, если надо иметь и архив, и актуальные записи в одной таблице. 17 | Если же идет просто много изменений, то это полумера. 18 | Ну на 2,3,10 ... 20 партиций разобъем, но не больше. 19 | Т.е. плохая горизонтальная масштабируемость. 20 | 21 | Здесь нужны распределенные базы данных, такие называют БД NoSQL. 22 | Используются гигантами типа Google, Facebook, etc. Есть CAP-теорема, 23 | что в распределенных вычислениях можно добиться только два из трех 24 | свойств C(согласованность), A(доступность), P(устойчивость к разрыву связей). 25 | Надо классифицировать известные NoSQL базы данных в терминах теоремы. Есть несколько типов NoSQL БД 26 | 27 | -ключ-значение (Redis, MonoDB, ... ) 28 | -документо-ориентированные (то же самое что и ключ-значение) 29 | -колоночные? (ничего про них не знаю) 30 | -граф-ориентированные (neo4j) 31 | 32 | В key-value БД атомарность на уровне ключа (ключевые слова: DHT). 33 | Каждому ключу соответствует одно значение, которое может только целиком изменяться, удаляться и т.п. 34 | По ключу быстро определяется и узел с данными, и значение. 35 | Как находится узел, видимо надо смотреть в направлении протоколов p2p, dht. 36 | Значение - данные в произвольном формате, например, json закодированные структуры. 37 | Никакой типизации значения нет. Что с одной стороны хорошо, т.к. примитивные поля в SQL: строка, 38 | число, дата - это архаизм, но переносит валидацию данных на плечи программиста. 39 | 40 | Индексы есть, но часто поиск по критерию приводит к полному перебору. 41 | Выборка разпределяется между узлами по технологии MapReduce. 42 | Далее нету JOIN, следовательно для эффективных выборок данные дублируют. 43 | Тут начинаются офигенные халивары между упертыми старперами и не до конца разбирающейся молодежью. 44 | Первые ужасаются полному перебору и дубляжу данных. 45 | Вторые говорят, что полный перебор фигня, если у тебя милион компов, при этом, 46 | правда, забывая, что милион компов делается для милиона запросов. 47 | В общем система сделана для быстрых частых записей, но не подходят для частых больших выборок. 48 | 49 | В граф-ориентированных NoSQL БД поддерживаются узлы и отношения между узлами. Пример, neo4j. 50 | -------------------------------------------------------------------------------- /02_quetions.txt: -------------------------------------------------------------------------------- 1 | В Cloudera есть Impala 2 | Возможно, система, предложенная компанией Cloudera, вызовет определенный скептицизм у специалистов, 3 | поскольку некоторое время назад в рамках проекта Hive уже был разработан механизм исполнения 4 | SQL-запросов (совместимый со стандартными средствами бизнес-аналитики) к данным, хранящимся под управлением Hadoop. 5 | О месте системы Impala и о ее технических деталях рассказал Майк Олсон — глава компании Cloudera. 6 | “Хотя Impala имеет программный интерфейс (API) к системе Hive, а также к ее ODBC-драйверу, 7 | это совершенно отличный от Hive продукт. Суть системы Hive заключается в том, что она просто 8 | преобразует/компилирует SQL-запросы в программу на языке Java с использованием MapReduce-функций, 9 | которая затем исполняется в пакетном режиме аналогично другим Hadoop-задачам. Таким образом, 10 | Hive добавляет дополнительный шаг перед использованием MapReduce, тогда как система Impala 11 | полностью заменяет MapReduce”, — подчеркнул Майк Олсон. 12 | 13 | Чистый SQL — основа системы Impala 14 | По определению, система Impala есть автономное средство выполнения SQL-запросов в распределенном режиме, 15 | которое работает на Hadoop-кластерах и заменяет собой MapReduce-механизм системы Hadoop. 16 | Соответственно, система Impala работает с HDFS — распределенной файловой системой, принятой в Hadoop. 17 | Это означает, что Impala работает на физически распределенной архитектуре. 18 | При этом, при выполнении запросов, по-прежнему, используется свойство локальности данных, 19 | поскольку распределение данных по узлам кластера не изменяется. 20 | 21 | 22 | Совместимость со средствами бизнес-аналитики 23 | Несмотря на инновационный подход, реализованный в системе Impala, она удачно вписывается в экосистему 24 | соответствующих программных продуктов. Один из основателей компании Pentaho Рич Дэйли, а 25 | также ее исполнительный вице-президент по развитию бизнеса Эдди Уайт отметили, 26 | что их компания активно работает с Cloudera по интеграции средств бизнес-аналитики, разработанных в Pentaho, в систему Impala. 27 | 28 | Компания Pentaho подготовила демонстрационное приложение, в котором сопоставляется работа ее средств совместно 29 | с Impala с решением аналогичной задачи средствами Hive. 30 | В этом приложении запускается некоторый SQL-запрос для выполнения средствами Impalа из 31 | системы создания отчетов от Pentaho. Исполнение этого запроса сравнивается с исполнением аналогичного запроса, 32 | запущенного из командной строки в системе Hive. 33 | После получения результатов запроса от системы Impala над ними выполняется ряд задач отчетного вида, 34 | а также происходит визуализация данных, что заканчивается построением полного отчета. 35 | Исполнение того же запроса в системе Hive — с теми же самыми данными, на том же самом кластере — 36 | занимает значительно больше времени. 37 | 38 | 39 | Доступность бета-версии 40 | В настоящий момент, компания Cloudera обеспечила возможность свободного скачивания со своего сайта копии 41 | виртуальной машины (в форматах VMware, Virtual Box и KVM), в которой преинсталлирована система Impala. 42 | Также на ее сайте размещена документация на бета-версию системы. 43 | 44 | Тема совместного существования SQL- и MapReduce-подходов в мире больших данных 45 | неоднократно поднималась на конференции Strata + Hadoop World. И система Impala — это только один из примеров такого сосуществования. 46 | -------------------------------------------------------------------------------- /03_quetions.txt: -------------------------------------------------------------------------------- 1 | http://www.slideshare.net/cloudera/hive-impala-and-spark-oh-my-sqlonhadoop-in-cloudera-55 2 | 3 | 1. Agenda 4 | 5 | History of SQL-on-Hadoop technologies 6 | Picking the right tool for the job 7 | What's new with Cloudera 5.5 8 | Real-world use cases 9 | Future of SQL-on-Hadoop 10 | 11 | 2. MapReduce : The early Yesrs 12 | The original processing engine for Hadoop 13 | - Process any type of data in any format 14 | - Scale infinitely for multiple, lage jobs 15 | - Pioneer of bringing compute to data 16 | 17 | But ... 18 | Difficult to program 19 | Slow processing 20 | Limited expressivity ... 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /1.2.3.txt: -------------------------------------------------------------------------------- 1 | Отметьте галочками верные высказывания о принципах Hadoop: 2 | 3 | Отказоустойчевость + 4 | Вертикальное масштабирование 5 | Отправка кода к данным + 6 | Горизонтальное масштабирование + 7 | Инкапсуляция сложности реализации распределенной системы + 8 | Перемещение данных к коду 9 | -------------------------------------------------------------------------------- /1.2.6.txt: -------------------------------------------------------------------------------- 1 | Какие функции выполняют вендоры дистрибутивов? 2 | 3 | Продают дистрибутивы Hadoop 4 | Исправляют ошибки в компонентах Hadoop + 5 | Предоставляют дистрибутивы в различных форматах (rpm, tar.gz, образ виртуальных машин) + 6 | Разрабатывают дополнительные фичи в стандартных компонентах Hadoop + 7 | Обеспечивают совместимость разных компонентов Hadoop + 8 | -------------------------------------------------------------------------------- /2.1.11.txt: -------------------------------------------------------------------------------- 1 | Пользователь делает следующие действия в hdfs: 2 | 3 | Записывает файл /tmp/log.txt 4 | Устанавливает у этого файла фактор репликации 2 5 | Перемещает этот файл в /data/log.txt 6 | Выводит содержимое файла /data/log.txt на экран 7 | Удаляет файл /data/log.txt 8 | 9 | Понятно, что при выполнении каждого действия происходит обращение к демону NameNode. А сколько при этом происходит обращений к DataNode? 10 | 11 | Напишите минимальное необходимое число обращений клиента к демонам DataNode для выполнения этих действий. 12 | 13 | Ответ: 2 14 | -------------------------------------------------------------------------------- /2.1.13.txt: -------------------------------------------------------------------------------- 1 | Чем больше размер блока HDFS, тем... 2 | 3 | Тем больше файлов в нем можно хранить + 4 | Тем меньше файлов в нем можно хранить 5 | 6 | -------------------------------------------------------------------------------- /2.1.15.txt: -------------------------------------------------------------------------------- 1 | Как осуществляется доступ к HDFS? 2 | 3 | Только прямой доступ (Direct Access) 4 | Только через proxy-сервер 5 | Прямой доступ или через proxy-сервер + 6 | -------------------------------------------------------------------------------- /2.1.16.txt: -------------------------------------------------------------------------------- 1 | Какие предложения характеризуют HDFS? 2 | 3 | Несколько процессов могут писать данные в один файл HDFS 4 | Работает на кластере из суперкомпьтеров 5 | Лучше хранить миллиард небольших файлов, чем миллион больших 6 | Высокая пропускная способность вместо быстрого доступа к данным + 7 | Данные восстанавливаются, если выходят из строя диски/сервера + 8 | Является приложением пользовательского уровня ОС + 9 | -------------------------------------------------------------------------------- /2.1.2.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | Как осуществляется доступ к данным на чтение в HDFS? 4 | 5 | Произвольный доступ к нужной части файла 6 | Последовательное чтение всего файла с данными + 7 | -------------------------------------------------------------------------------- /2.1.3.txt: -------------------------------------------------------------------------------- 1 | Как можно менять данные в файле HDFS? 2 | ' 3 | Дописывать данные в произвольное место файла (начало, середина, конец) 4 | Удалять данные в конце файла 5 | Дописывать данные в конец файла + 6 | Удалять все данные (удалять файл) + 7 | Удалять произвольную часть файла 8 | -------------------------------------------------------------------------------- /2.1.4.txt: -------------------------------------------------------------------------------- 1 | Для какого шаблона взаимодействия с данными был разработан HDFS? 2 | 3 | Много раз поменяли данные / много раз прочитали 4 | Много раз поменяли данные / один раз прочитали 5 | Один раз записали / один раз прочитали 6 | Один раз записали / много раз прочитали + 7 | -------------------------------------------------------------------------------- /2.1.6.txt: -------------------------------------------------------------------------------- 1 | Как называется демон HDFS, который работает на каждом сервере в кластере и отвечает за хранение данных? 2 | 3 | datanode 4 | -------------------------------------------------------------------------------- /2.1.8.txt: -------------------------------------------------------------------------------- 1 | Сколько блоков в HDFS будет иметь файл размером 1025 Мб? 2 | 3 | Характеристики HDFS следующие: 4 | 5 | Объем HDFS: 15 Пб 6 | Размер блока: 128 Мб 7 | Число серверов: 500 8 | Фактор репликации: 3 9 | 10 | 11 | Ответ: 27 12 | -------------------------------------------------------------------------------- /2.1.9.txt: -------------------------------------------------------------------------------- 1 | Какой должен быть размер блока файлов в HDFS (в МБ), чтобы seek time составлял 1,5% от transfer time (считайте, что tranfer time ≈ время чтения блока), если: 2 | 3 | seek time = 20 мс 4 | transfer rate = 48 МБ/с 5 | 6 | Ответ: 64 7 | -------------------------------------------------------------------------------- /2.2.10.txt: -------------------------------------------------------------------------------- 1 | Что означает, если файл имеет такие права доступа: -rw-r----- 2 | 3 | Все пользователи могут читать и писать в файл 4 | Только владелец может читать и писать в файл. Остальные пользователи не могут ни читать, ни писать в файл 5 | Владелец может читать и писать в файл, пользователи из той же группы могут читать файл, другие ничего не могут делать с файлом + 6 | Владелец и пользователи из той же группы могут читать и писать в файл, другие могут только читать из файла 7 | -------------------------------------------------------------------------------- /2.2.11.txt: -------------------------------------------------------------------------------- 1 | Как в консоли будут указаны права доступа у файла, который доступен для чтения, записи и исполнения для всех пользователей? 2 | 3 | -rwxrwxrwx 4 | -------------------------------------------------------------------------------- /2.2.2.txt: -------------------------------------------------------------------------------- 1 | Какие варианты соответствуют URI схеме и могут быть использованы в командах shell-клиента HDFS? 2 | 3 | hdfs:/localhost:9000//data/log.txt 4 | hdfs://hdfs/ + 5 | file:///home/user/ + 6 | file:/// + 7 | hdfs:data.txt 8 | /tmp/output.txt + 9 | -------------------------------------------------------------------------------- /2.2.4.txt: -------------------------------------------------------------------------------- 1 | C помощью каких команд shell-клиента HDFS можно вывести на экран содержимое файла hello_world.cpp: 2 | 3 | // hello_world.cpp 4 | 5 | #include 6 | 7 | int main() 8 | { 9 | std::cout << "Hello, world!" << std::endl; 10 | return 0; 11 | } 12 | 13 | 14 | -cat + 15 | -tail + 16 | -get 17 | -put 18 | -text + 19 | -ls 20 | -------------------------------------------------------------------------------- /2.2.5.txt: -------------------------------------------------------------------------------- 1 | В папке HDFS /data/ находится файл logs.gz: 2 | 3 | $hdfs dfs -ls /data/ 4 | Found 1 items 5 | -rw-r--r-- 3 hadoop hadoop 12755389453 2015-01-01 00:00 /data/logs.gz 6 | 7 | Напишите результат выполнения последней команды: 8 | 9 | $hdfs dfs -text /data/logs.gz | tail > tail.txt 10 | $hdfs dfs -mkdir /data/tail 11 | $hdfs dfs -put tail.txt /data/tail/ 12 | $hdfs dfs -rm /data/logs.gz 13 | $hdfs dfs -ls /data/ | wc -l 14 | 15 | (команда wc -l определяет число строчек во входных данных) 16 | 17 | Ответ: 2 18 | -------------------------------------------------------------------------------- /2.2.6.txt: -------------------------------------------------------------------------------- 1 | На сервере работает скрипт, который раз в сутки загружает файл с логом за прошедшие сутки 2 | (например, 2015-01-01.log) в HDFS. Работает он следующим образом: 3 | 4 | Локальный файл с логом (2015-01-01.log) копируется в HDFS в папку /tmp/logs/ 5 | Создается папка для нужной даты в /data/logs/ (например, /data/logs/2015-01-01/) 6 | Из временной папки /tmp/logs/ нужный файл с логом перемещается в папку /data/logs/{date} 7 | Удаляется папка с логом месячной давности (например, /data/logs/2014-12-01/) 8 | 9 | Напишите через запятую последовательность команд (если нужно с опциями) shell-клиента 10 | для выполнения описанных действий (например: -ls, -mkdir, -du -h, -tail) 11 | 12 | Ответ : -put, -mkdir, -mv, rm -r 13 | 14 | -------------------------------------------------------------------------------- /2.2.7.txt: -------------------------------------------------------------------------------- 1 | Как лучше скопировать файл file.txt размером 10Тб из папки /data/ в папку /tmp/ 2 | 3 | $hdfs distcp /data/file.txt /tmp/ + 4 | $hdfs dfs -cp /data/file.txt /tmp/ 5 | $hdfs dfs -get /data/file.txt . ; hdfs dfs -put file.txt /tmp/ 6 | -------------------------------------------------------------------------------- /2.2.8.txt: -------------------------------------------------------------------------------- 1 | Как лучше скопировать файл file.txt размером 10Мб из папки /data/ в папку /tmp/ 2 | 3 | 4 | $hdfs dfs -get /data/file.txt . ; hdfs dfs -put file.txt /tmp/ 5 | $hdfs distcp /data/file.txt /tmp/ 6 | $hdfs dfs -cp /data/file.txt /tmp/ + 7 | -------------------------------------------------------------------------------- /2.3.2.txt: -------------------------------------------------------------------------------- 1 | Какие реализации абстрактного класса FileSystem существуют в HDFS API? 2 | 3 | LocalFileSystem + 4 | HftpFileSystem + 5 | FTPFileSystem + 6 | DistributedFileSystem + 7 | -------------------------------------------------------------------------------- /2.3.3.txt: -------------------------------------------------------------------------------- 1 | Создайте объект path класса Path для файла /data/logs.txt, расположенного 2 | в HDFS (демон NameNode работает на сервере server0, порт 9000) 3 | 4 | Path path = new Path ("hdfs://server0:9000/data/logs.txt"); 5 | -------------------------------------------------------------------------------- /2.3.4.txt: -------------------------------------------------------------------------------- 1 | В файле конфигурации определяется значение для ключа fs.defaultFS: 2 | 3 | 4 | fs.defaultFS 5 | hdfs://devhdp:9999 6 | 7 | 8 | Какой результат выведет следующий код: 9 | 10 | Configuration conf = getConf(); 11 | conf.set("fs.defaultFS", "hdfs://prdhdp:9999"); 12 | String fs = conf.get("fs.defaultFS", "hdfs://devhdp:9000"); 13 | System.out.println("Default FS: " + fs); 14 | 15 | 16 | 17 | Default FS: hdfs://prdhdp:9999 + 18 | Default FS: hdfs://devhdp:9999 19 | Default FS: hdfs://devhdp:9000 20 | -------------------------------------------------------------------------------- /2.3.5.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | В папке в HDFS /data/logs хранятся файлы с логами в текстовом виде (.txt) и в сжатом виде (.gz). В названиях файлов указана дата, за которую собраны данные: 4 | 5 | $hdfs dfs -l /data/logs/ 6 | Found 1837 items 7 | ... 8 | -rw-rw-rw- 3 hadoop hadoop 846552233 /data/logs/2015.09.23.txt 9 | -rw-rw-rw- 3 hadoop hadoop 18465354 /data/logs/2015.09.21.gz 10 | -rw-rw-rw- 3 hadoop hadoop 829485664 /data/logs/2015.09.21.txt 11 | -rw-rw-rw- 3 hadoop hadoop 790837465 /data/logs/2015.10.13.txt 12 | -rw-rw-rw- 3 hadoop hadoop 19365374 /data/logs/2015.09.23.gz 13 | -rw-rw-rw- 3 hadoop hadoop 18223746 /data/logs/2015.10.13.gz 14 | ... 15 | 16 | Из папки /data/logs хотим удалить все (не только два из примера) несжатые файлы с логами за сентябрь 2015 года (выделены жирным). Напишите маску, которая будет соответствовать этим файлам (чтобы ее можно было применить к команде: $hdfs dfs -rm <маска>) 17 | 18 | 19 | 20 | /data/logs/2015.09.*.txt 21 | -------------------------------------------------------------------------------- /2.3.6.txt: -------------------------------------------------------------------------------- 1 | Функциональность какой команды (или команд) shell-клиента реализует программа: 2 | 3 | import org.apache.hadoop.conf.Configuration; 4 | import org.apache.hadoop.fs.FSDataOutputStream; 5 | import org.apache.hadoop.fs.FileSystem; 6 | import org.apache.hadoop.fs.Path; 7 | import org.apache.hadoop.io.IOUtils; 8 | 9 | import java.io.InputStream; 10 | 11 | public class SomeAction { 12 | 13 | public static void main(String[] args) throws Exception { 14 | 15 | if (args.length < 2) { 16 | System.err.println("Bad arguments"); 17 | } 18 | 19 | Path source_path = new Path(args[0]); 20 | Path target_path = new Path(args[1]); 21 | 22 | Configuration conf = new Configuration(); 23 | FileSystem source_fs = FileSystem.get(source_path.toUri(), conf); 24 | FileSystem target_fs = FileSystem.get(target_path.toUri(), conf); 25 | 26 | FSDataOutputStream output = target_fs.create(target_path); 27 | InputStream input = null; 28 | try{ 29 | input = source_fs.open(source_path); 30 | IOUtils.copyBytes(input, output, conf); 31 | } finally { 32 | IOUtils.closeStream(input); 33 | IOUtils.closeStream(output); 34 | } 35 | } 36 | 37 | } 38 | 39 | 40 | 41 | 42 | -cat 43 | -put + 44 | -text 45 | -mv 46 | -cp + 47 | -mkdir 48 | -get + 49 | -tail 50 | 51 | -------------------------------------------------------------------------------- /3.1.10.txt: -------------------------------------------------------------------------------- 1 | Что происходит, если выходит из строя диск с промежуточными данными между Map и Reduce? 2 | 3 | Данные восстанавливаются из других реплик 4 | Перезапускается mapper, который создал эти данные + 5 | Задача завершается с ошибкой, т.к. потеряны промежуточные данные 6 | -------------------------------------------------------------------------------- /3.1.11.txt: -------------------------------------------------------------------------------- 1 | Что такое shuffle? 2 | 3 | Сортировка промежуточных данных между Map и Reduce 4 | Процесс передачи промежуточных данных из mapper'ов в reducer + 5 | Процесс перемешивания промежуточных данных для равномерного распределения по reducer'ам 6 | Определение номера редьюсера для каждой пары Ключ-Значение в промежуточных данных 7 | -------------------------------------------------------------------------------- /3.1.13.txt: -------------------------------------------------------------------------------- 1 | Как определяется число reducer-процессов в MapReduce задаче? 2 | 3 | Определяется системой, исходя из размера промежуточных данных между Map и Reduce 4 | Задается пользователем при описании MapReduce задачи + 5 | 6 | -------------------------------------------------------------------------------- /3.1.3.txt: -------------------------------------------------------------------------------- 1 | В каком виде осуществляется передача данных между Map и Reduce? 2 | 3 | Текстовые сообщения 4 | Массив байт 5 | Можно самому определять формат 6 | В виде xml 7 | Ключ / Значение + 8 | -------------------------------------------------------------------------------- /3.1.4.txt: -------------------------------------------------------------------------------- 1 | Перед запуском MapReduce задачи входные данные разбиваются на независимые части. Как называются эти части? 2 | 3 | Split 4 | -------------------------------------------------------------------------------- /3.1.6.txt: -------------------------------------------------------------------------------- 1 | Как определяется число mapper-процессов в MapReduce задаче? 2 | 3 | Обычно равно число сплитов во входных данных + 4 | Задается пользователем при описании MapReduce задачи 5 | -------------------------------------------------------------------------------- /3.1.7.txt: -------------------------------------------------------------------------------- 1 | Сколько mapper-процессов запустится для обработки файла /data/logs.gz размером 1Гб, если размер блока в HDFS равен 64Мб? 2 | 3 | 1 4 | -------------------------------------------------------------------------------- /3.1.8.txt: -------------------------------------------------------------------------------- 1 | Что такое data locality? 2 | 3 | Запуск mapper на той же ноде, где хранятся нужные данные + 4 | Процесс определения, на какой ноде расположены нужные данные 5 | Процесс копирования нужных данны на ноду с запущенным mapper 6 | -------------------------------------------------------------------------------- /3.1.9.txt: -------------------------------------------------------------------------------- 1 | Как хранятся промежуточные данные между фазами Map и Reduce? 2 | 3 | В HDFS 4 | На локальном диске + 5 | -------------------------------------------------------------------------------- /3.2.10.txt: -------------------------------------------------------------------------------- 1 | Какие опциональные функции может реализовать разработчик задачи MapReduce в Hadoop? 2 | 3 | sort(key, value) 4 | map(key, value) 5 | combine(key, list) + 6 | reduce(key, list) 7 | partition(key, value, reduce_number) + 8 | shuffle(key, value) 9 | 10 | ---- 11 | 12 | А куда относят "sort" и "shuffle" ( они входят в map ) ? 13 | 14 | Шаг Reduce состоит из 3 этапов: shuffle, sort, reduce 15 | -------------------------------------------------------------------------------- /3.2.2.txt: -------------------------------------------------------------------------------- 1 | За что отвечает фреймворк MapReduce Hadoop? 2 | 3 | 4 | Определение того, что должны делать mapper и reducer 5 | Запуск mapper и reducer + 6 | Копирование кода к данным + 7 | Определение формата входных данных 8 | Обработка ошибок и отказов + 9 | Синхронизация этапов Map и Reduce + 10 | -------------------------------------------------------------------------------- /3.2.3.txt: -------------------------------------------------------------------------------- 1 | Как называется мастер-процесс в MapReduce Hadoop? 2 | 3 | jobtraker 4 | -------------------------------------------------------------------------------- /3.2.4.txt: -------------------------------------------------------------------------------- 1 | Зная стандартную схему взаимодействия демонов NameNode, DataNode, JobTracker и 2 | TaskTracker, определите минимальное число демонов TaskTracker в кластере из 10 3 | машин, необходимое для полноценной работы Hadoop. Сервера 4 | в кластере имеют конфигурацию, которая позволяет запускать на них одновременно 7 воркеров. 5 | 6 | 8 7 | -------------------------------------------------------------------------------- /3.2.5.txt: -------------------------------------------------------------------------------- 1 | В кластере 102 машины (2 из них для NameNode и JobTracker) 2 | со следующими характеристиками: 24 ядра, 64 Гб памяти. 3 | Какое максимальное число mapper-процессов может быть запущено в таком кластере, если 1 слот занимает 4 | 1 ядро и 3 Гб памяти, а mapper-слоты и reducer-слоты разбиты в соотношении 5:2? 5 | 6 | 7 | 1500 8 | -------------------------------------------------------------------------------- /3.2.7.txt: -------------------------------------------------------------------------------- 1 | Как называется этап, на котором функция reduce выполняется локально после выполнения map? 2 | 3 | combine 4 | -------------------------------------------------------------------------------- /3.2.8.txt: -------------------------------------------------------------------------------- 1 | Что такое partition? 2 | 3 | Часть входных данных, которая целиком обрабатывается одним mapper 4 | Этап, на котором определяется номер reducer для каждой пары key/value + 5 | Данные, которые пришли на один редьюсер 6 | Название пары key/value в промежуточных данных между Map и Reduce 7 | -------------------------------------------------------------------------------- /3.2.9.txt: -------------------------------------------------------------------------------- 1 | 2 | На сколько процентов этап combine должен уменьшать объем данных 3 | между Map и Reduce, чтобы его использование стало выгодным в задаче, 4 | где копирование данных между Map и Reduce занимает в 3 раза меньше времени, чем их обработка на reducer? 5 | 6 | Укажите минимальный процент сжатия: 7 | 8 | 75 % 9 | 10 | -------------------------------------------------------------------------------- /3.3.10.txt: -------------------------------------------------------------------------------- 1 | C помощью каких функций определяются типы входных key / value для редьюсера? 2 | 3 | 4 | Job.setInputKeyClass(KeyType); 5 | Job.setInputFormatClass(InputClass.class); 6 | Job.setInputValueClass(ValueType); 7 | Job.setOutputFormatClass(OutputFormat.class); 8 | Job.setOutputValueClass(ValueType); 9 | Job.setMapOutputValueClass(ValueType); + 10 | Job.setOutputKeyClass(KeyType); 11 | Job.setMapOutputKeyClass(KeyType); + 12 | -------------------------------------------------------------------------------- /3.3.11.txt: -------------------------------------------------------------------------------- 1 | От какого класса должен наследоваться пользовательский класс, реализующий функциональность маппера? 2 | 3 | 4 | MapReduce 5 | Не должен наследоваться ни от какого класса 6 | AbstractMapper 7 | Map 8 | Mapper + 9 | MapperBase 10 | -------------------------------------------------------------------------------- /3.3.12.txt: -------------------------------------------------------------------------------- 1 | Какие параметры следует указать при наследовании пользовательского класса маппера от базового класса? 2 | 3 | Тип ключа входных данных MapReduce задачи + 4 | Тип значения выходных данных MapReduce задачи 5 | Тип значения промежуточных данных между Map и Reduce + 6 | Тип ключа промежуточных данных между Map и Reduce + 7 | Тип значения входных данных MapReduce задачи + 8 | Тип ключа выходных данных MapReduce задачи 9 | -------------------------------------------------------------------------------- /3.3.2.txt: -------------------------------------------------------------------------------- 1 | Какой пакет предоставляет новое Java API для MapReduce? 2 | 3 | org.apache.hadoop.mapred_new 4 | org.apache.hadoop.mapreduce2 5 | org.hadoop.mapred 6 | org.apache.hadoop.mapred 7 | org.apache.hadoop.mapreduce + 8 | -------------------------------------------------------------------------------- /3.3.3.txt: -------------------------------------------------------------------------------- 1 | Для чего нужен класс Job? 2 | 3 | Определение числа мапперов 4 | Определение формата входных / выходных данных + 5 | Определение числа редьюсеров + 6 | Определение input / output путей + 7 | -------------------------------------------------------------------------------- /3.3.4.txt: -------------------------------------------------------------------------------- 1 | Какие функции могут быть переопределены в пользовательском классе, который наследуется от класса Mapper? 2 | 3 | reduce(KeyIn key, List value, Context context) 4 | init(Context context) 5 | finish(Context context) 6 | setup(Context context) + 7 | cleanup(Context context) + 8 | map(KeyIn key, ValueIn value, Context context) + 9 | getKeyValue(Context context) 10 | -------------------------------------------------------------------------------- /3.3.5.txt: -------------------------------------------------------------------------------- 1 | Для чего нужен объект класса Context в функции map? 2 | 3 | Посылка статистики задачи в JobTracker + 4 | Передача данных между разными mapper 5 | Запись выходных данных + 6 | Получение конфигурации задачи + 7 | Получение следующих пар key / value 8 | -------------------------------------------------------------------------------- /3.3.6.txt: -------------------------------------------------------------------------------- 1 | 2 | На определенный reducer приходят следующие пары key / value: 3 | 4 | a 1 5 | b 2 6 | c 1 7 | a 5 8 | a 3 9 | b 1 10 | a 1 11 | 12 | Сколько раз будут вызваны функции setup(), reduce(), cleanup() ? 13 | 14 | Напишите ответ в виде трех чисел через пробел (например: 1 2 3) 15 | 16 | 1 3 1 17 | -------------------------------------------------------------------------------- /3.3.7.txt: -------------------------------------------------------------------------------- 1 | Для чего нужен класс Partitioner? 2 | 3 | 4 | 5 | Делит входные данные на сплиты 6 | Определяет номер reducer для пары key/value + 7 | Делит выходные данные задачи по нескольким файлам 8 | Является "локальным редьюсером" 9 | -------------------------------------------------------------------------------- /3.3.8.txt: -------------------------------------------------------------------------------- 1 | Какие функции нужно вызвать для описания выходных данных MapReduce задачи? 2 | 3 | Job.setOutputKeyClass(KeyType); + 4 | Job.setOutputFormatClass(OutputFormat.class); + 5 | OutputFormat.setOutputPath(Job, Path); + 6 | InputFormat.addInputPath(Job, Path); 7 | Job.setMapOutputValueClass(ValueType); 8 | Job.setOutputValueClass(ValueType); + 9 | Job.setMapOutputKeyClass(KeyType); 10 | Job.setInputFormatClass(InputFormat.class); 11 | -------------------------------------------------------------------------------- /3.3.9.txt: -------------------------------------------------------------------------------- 1 | Какие функции нужно вызвать для описания входных данных MapReduce задачи? 2 | 3 | Job.setOutputFormatClass(OutputFormat.class); 4 | Job.setMapperClass(Mapper.class); 5 | Job.setReducerClass(Reducer.class); 6 | InputFormat.addInputPath(Job, Path); + 7 | Job.setInputFormatClass(InputFormat.class); + 8 | Job.setOutputKeyClass(KeyType); 9 | OutputFormat.setOutputPath(Job, Path); 10 | Job.setOutputValueClass(ValueType); 11 | -------------------------------------------------------------------------------- /4.1.3.txt: -------------------------------------------------------------------------------- 1 | Текстовый файл состоит из 1000 строк по 10 слов в каждой. При этом в каждой строке каждое слово 2 | встречается 2 раза. Всего файл содержит 100 различных слов. 3 | 4 | Сколько пар key / value будет передаваться из Map в Reduce в задаче WordCount в каждом из 3 случаев: 5 | 6 | Используется базовый алгоритм маппера 7 | Используется in-mapper combining v.1 8 | Используется in-mapper combining v.2 9 | 10 | Весь файл обрабатывается одним маппером. Для входных данных используется класс TextInputFormat. 11 | Т.е. маппер в качестве ключа принимает номер строки, а в качестве значения саму строку. 12 | 13 | Ответ напишите в виде 3-х чисел, разделенных пробелом (например: 300 200 100) 14 | 15 | 10000 5000 100 16 | -------------------------------------------------------------------------------- /HBase.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/HBase.pdf -------------------------------------------------------------------------------- /HDFS.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/HDFS.pdf -------------------------------------------------------------------------------- /HDFS_API.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/HDFS_API.pdf -------------------------------------------------------------------------------- /HDFS_Shell.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/HDFS_Shell.pdf -------------------------------------------------------------------------------- /Hive.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/Hive.pdf -------------------------------------------------------------------------------- /MapReduce.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/MapReduce.1.pdf -------------------------------------------------------------------------------- /MapReduce_API.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/MapReduce_API.1.pdf -------------------------------------------------------------------------------- /MapReduce_Algorithme.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/MapReduce_Algorithme.1.pdf -------------------------------------------------------------------------------- /MapReduce_Graph.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/MapReduce_Graph.pdf -------------------------------------------------------------------------------- /NoSQL.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/NoSQL.pdf -------------------------------------------------------------------------------- /Pig.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/Pig.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hadoop 2 | -------------------------------------------------------------------------------- /Spark.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/Spark.pdf -------------------------------------------------------------------------------- /Spark_Engine.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/Spark_Engine.pdf -------------------------------------------------------------------------------- /YARN.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Testudinate/Hadoop/58efc759be276c1cee9b84d2a12058846ce680c9/YARN.pdf --------------------------------------------------------------------------------