Hadoop Лекция 2. Распределенная файловая система HDFS
План Мотивация использования распределенных файловых систем Архитектура HDFS Команды работы с HDFS Права доступа в HDFS Работа с HDFS из Java программ
Мотивация Что нужно для эффективной обработки терабайтов данных? Большая емкость Высокая производительная Надежность
Традиционное решение Системы хранения данных Емкость: сотни и тысячи дисков Производительность: сотни ГБ/с Надежность: RAID, дублирование компонентов, репликация Примеры: EMC Symmetrix VMAX, Hitachi VSP, HP XP20000 Недостаток: высокая стоимость (миллионы долларов)
Распределенные файловые системы Можно ли получить емкость, производительность и надежность дешево? Да, можно. Google: The Google File System, Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung. Proceedings of the 19th ACM Symposium on Operating Systems Principles, 2003, pp Для хранения данных используются диски недорогих обычных серверов Независимые диски объединяются в распределенную файловую систему GFS
Преимущества распределенных файловых систем Высокая емкость: Много серверов с внутренними дисками Высокая производительность: Параллельная запись на диски, много сетевых интерфейсов Высокая надежность: Репликация данных на разные серверы Низкая стоимость: Серверы стандартной архитектуры с Linux
HDFS Hadoop Distributed File System (HDFS) – распределенная файловая система, входящая в состав Hadoop Основывается на архитектуре Google File System HDFS - специализированная файловая система для приложений Hadoop
Потребности приложений Hadoop Типовое приложение – поисковый робот Файлы индексов содержимого Web больших размеров Файлы индексов записываются один раз, а затем только читаются (без изменений) Потоковые операции ввода-вывода Пакетная обработка
Ограничения HDFS Оптимизация для потоковых операций с большими файлами Случайный доступ работает медленно Модель доступа к файлам WORM (Write-Once-Read- Many) Запись в файл производиться только один раз, потом только чтение Не поддерживается POSIX Нельзя подмонтировать, не работают стандартные Linux команды ls, cp, mkdir и т.п. Кэширование не используется Накладные расходы слишком велики
Архитектура HDFS
Namenode (узел имен): Управляющий узел Обеспечивает единое пространство имен Регулирует доступ клиентов Хранит метаданные Datanode (узел данных) Хранит данные Узлы имен и данных – серверы Linux (как правило)
Хранение файлов в HDFS Блочная структура: Файл разбивается на блоки одинакового размера (64MБ по умолчанию) Блоки хранятся на одном или нескольких узлах хранения Возможна репликация блоков Узел имен хранит метаданные о распределении блоков по узлам хранения
Хранение файлов в HDFS
Репликация В большом кластере всегда будут неисправные узлы Для защиты от сбоев HDFS использует репликацию – хранение нескольких копий блока Фактор репликации – количество копий блока (3 шт. по умолчанию) Отказ сервера снижает производительность, но не приводит к потере данных
Репликация
Rack Awareness Дополнительный механизм защиты от сбоя группы серверов Rack – серверный шкаф: Отключение питания всего шкафа Потеря сетевого соединения со шкафом HDFS умеет распределять реплики между разными шкафами Отказ всего шкафа не приводит к потере данных
Rack Awareness
Доступ к HDFS Блоки HDFS распределены по разным серверам: HDFS нельзя подмонтировать Не работают стандартные Linux команды: ls, cp, mv и.т. Для работы с HDFS используются специальные команды: $bin/hadoop dfs -cmd
Структура HDFS Корневой каталог HDFS - / Домашние каталоги пользователей - /user/$USER Временный каталог - /tmp Нет понятия текущий каталог Нет команд cd, pwd Пути: Полные – начиная с / Относительные – из домашнего каталога пользователя
Просмотр файлов в каталоге Домашний каталог: Корневой каталог: bin/hadoop dfs -ls Found 3 items -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file1 -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file2 -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file3 bin/hadoop dfs -ls / Found 2 items drwxr-xr-x - hadoop supergroup :32 /tmp drwxr-xr-x - hadoop supergroup :35 /user
bin/hadoop dfs -cat /user/hadoop/file1 Hello, world! Hello, Hadoop! Просмотр файла Список файлов: Просмотр файла: Просмотр файла, полный путь: bin/hadoop dfs -ls Found 3 items -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file1 -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file2 -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file3 bin/hadoop dfs -cat file1 Hello, world! Hello, Hadoop!
Запись файлов в HDFS Команда: $bin/hadoop dfs –put localSrc hdfsDest Копирует из локальной файловой системы в HDFS Работает как с файлами, так и с каталогами Если файл уже существует, выдает ошибку Синоним -copyFromLocal
Запись файлов в HDFS Запись файла: Запись каталога: Файл существует: bin/hadoop dfs -put /tmp/file1 /user/hadoop bin/hadoop dfs -put /tmp/dir1 /user/hadoop bin/hadoop dfs -ls dir1 Found 3 items -rw-r--r-- 1 hadoop supergroup :49 /user/hadoop/dir1/filea -rw-r--r-- 1 hadoop supergroup :49 /user/hadoop/dir1/fileb -rw-r--r-- 1 hadoop supergroup :49 /user/hadoop/dir1/filec bin/hadoop dfs -put /tmp/file1 file1 put: Target file1 already exists
Получение файлов из HDFS Команда: $ bin/hadoop dfs –get hdfsSrc localDest Копирует из HDFS в локальную файловую систему Работает как с файлами, так и с каталогами Синоним -copyToLocal
Команды для работы с HDFS КомандаНазначение -mv src dest Перемещение файлов внутри HDFS -cp src dest Копирование файлов внутри HDFS -rm path Удаление файла или пустого каталога -rmr path Удаление файла или каталога рекурсивно -mkdir path Создание каталога (работает как mkdir –p в Linux) -stat path Выводит информацию по файлу или каталогу -tail [-f] path Вывод последнего килобайта файла (с -f выводит добавляемые данные) -help Перечень команд работы с HDFS
Web-интерфейс к HDFS
Права доступа в HDFS Модель прав доступа HDFS похожа на POSIX: Файл имеет владельца (owner) и группу (group) Права задаются отдельно для владельца, группы и всех остальных Права доступа rwx Нет sticky bit, setuid or setgid
Семантика прав доступа Для файлов: r – чтение w – запись x – не используется Для каталогов: r – просмотр содержимого каталога w – создание файлов или каталогов x – доступ к файлам и подкаталогам
Пользователи HDFS Пользователи HDFS соответствуют пользователям Linux: Пользователь: `whoami` Список групп: `bash -c groups` Суперпользователь Не действуют ограничения прав доступа Пользователь, который запустил Hadoop Нет постоянного суперпользователя
Просмотр прав доступа bin/hadoop dfs -ls Found 3 items -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file1 -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file2 -rw-r--r-- 1 hadoop supergroup :58 /user/hadoop/file3 Права доступа ВладелецГруппа
Управление правами доступа Команды Опция –R – рекурсивные изменения Права доступа записываются как в Linux КомандаНазначение -chmod [-R] mode path Изменение прав доступа -chown [-R] owner[:group] path Изменение владельца (и группы) -chgroup [-R] grm path Изменение группы
Исходные права доступа Цифровой режим Символьный режим Изменение прав доступа $ bin/hadoop dfs -ls /user/Andrey/file1 -rw-r--r-- 1 Andrey supergroup :20 /user/Andrey/file1 $ bin/hadoop dfs -chmod 600 /user/Andrey/file1 $ bin/hadoop dfs -ls /user/Andrey/file1 -rw Andrey supergroup :20 /user/Andrey/file1 $ bin/hadoop dfs -chmod g+rw /user/Andrey/file1 $ bin/hadoop dfs -ls /user/Andrey/file1 -rw-rw Andrey supergroup :20 /user/Andrey/file1
Изменение владельца и группы Исходное состояние Изменение владельца Изменение группы $ bin/hadoop dfs -ls /user/Andrey/file1 -rw-rw Andrey supergroup :20 /user/Andrey/file1 $ bin/hadoop dfs -chown anton /user/Andrey/file1 $ bin/hadoop dfs -ls /user/Andrey/file1 -rw-rw anton supergroup :20 /user/Andrey/file1 $ bin/hadoop dfs -chgrp project1 /user/Andrey/file1 $ bin/hadoop dfs -ls /user/Andrey/file1 -rw-rw anton project :20 /user/Andrey/file1
Работа с HDFS из Java // Настройка путей Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path filenamePath = new Path("hello.txt"); // Запись в файл FSDataOutputStream out = fs.create(filenamePath); out.writeUTF(«Hello, world"); out.close(); // Запись в файл FSDataInputStream in = fs.open(filenamePath); String messageIn = in.readUTF(); System.out.print(messageIn); in.close();
Подключение к файловой системе org.apache.hadoop.fs.FileSystem – интерфейс для работы с DFS и другими файловыми системами org.apache.hadoop.conf.Configuration – конфигурация Hadoop и HDFS Подключение к файловой системе: Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf);
Структура имени файла Файл в HDFS: hdfs://namenode:port/path/file hdfs://localhost:9000/user/hadoop/file1 hdfs://namenode:port – можно не указывать, тогда используется namenode из текущего конфигурационного файла Hadoop Файл на локальном диске: file://path/file
Запуск программы FileSystem может работать как с HDFS, так и с локальной файловой системой, в зависимости от способа запуска Локальный запуск: java HDFSHelloWorld Запуск через Hadoop (запись в HDFS): $bin/hadoop HDFSHelloWorld
Методы FileSystem МетодНазначение copyFromLocalFile Копирование из локальной файловой системы в HDFS copyToLocalFile Копирование из HDFS в локальную файловую систему create Создание файла mkdirs Создание каталога delete Удаление файла или каталога rename Переименование файла setOwner Установка владельца и группы файла setPermissions Установка прав доступа к файлу getFileBlockLocations Возвращает список серверов, хранящих блоки файла
Итоги Мотивация использования распределенных файловых систем Архитектура HDFS Команды работы с HDFS Права доступа в HDFS Работа с HDFS из Java программ
Дополнительные материалы The Google File System HDFS Architecture Guide HDFS Permissions Guide HDFS Users Guide
Вопросы?