SlideShare a Scribd company logo
Методы распределенной обработки
больших объемов данных в Hadoop
Москва 2014
Лекция 3: Распределенная файловая система HDFS
Архитектура HDFS
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
HDFS
• Hadoop Distributed File System
• Для пользователя как “один большой диск”
• Работает поверх обычных файловых систем
– Ext3, Ext4, XFS
• Основывается на архитектуре Google's Filesystem
GFS
– research.google.com/archive/gfs-sosp2003.pdf
• Fault Tolerant
– Умеет справляться с выходом из строя дисков,
машин и т.д.
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Используется обычное “железо”
• “Дешевое”серверное оборудование
– Нет суперкомпьютерам!
– Нет десктопам!
– Да обычным (ненадежным) серверам!
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
HDFS хорошо подходит для…
• Хранения больших файлов
– Терабайты, петабайты…
– Миллионы (но не миллиарды) файлов
– Файлы размером от 100 Мб
• Стриминг данных
– Паттерн “write once / read-many times”
– Оптимизация под последовательное чтение
• Нет операциям произвольного чтения
– Операция append появилась в Hadoop 0.21
• Обычные сервера
– Менее надежные, чем суперкомпьютеры
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
HDFS не подходит для…
• Low-latency reads
– Высокая пропускная способность большого объема данных
(high-throughput) вместо небольшого времени доступа к
небольшим порциям данных (low latency)
– HBase помогает решать эту задачу
• Большое количество небольших файлов
– Лучше миллион больших файлов, чем миллиард маленьких
• Напр. каждый файл размером от 100Мб
• Многопоточная запись
– Один процесс записи на файл
– Данные дописываются в конец файла
• Нет поддержки записи по смещению
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Демоны HDFS
• Для управления файловой системой есть три типа демонов
– Namenode
• Отвечает за файловое пространство (namespace), мета-ифномрацию и
расположение блоков файлов
• Запускается на 1й (выделенной) машине
– Datanode
• Хранит и отдает блоки данных
• Отправляет ответы о состоянии на Namenode
• Запускается обычно на всех машинах кластера
– Secondary Namenode
• Периодически обновляет fsimage
• Требует то же железо, что и Namenode
• (!) Не используется для high-availability, т.е. это не backup для Namenode
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Демоны HDFS
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Secondary
Namenode
Namenode
Datanode 1 Datanode 2 Datanode 3…
Файлы и блоки
• Файлы в HDFS состоят из блоков
– Блок – единица хранения данных
• Управляется через Namenode
• Хранится на Datanode
• Реплицируются по машинам в процессе записи
– Один и тот же блок хранится на нескольких Datanode
– Фактор репликации по умолчанию равен 3
– Это нужно для fault-tolerance и упрощения доступа
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Rack #NRack #1
Файлы и блоки
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Namenode
Datanode
B1
DatanodeDatanode
B1
DatanodeDatanode
B1
large_file.txt = block 1 + block 2
Один и тот же блок
B2
B2B2
Блоки в HDFS
• Стандартный размер блоков 64Мб или 128Мб
• Основной мотив этого – снизить стоимость seek
time по сравнению со скоростью передачи
данных (transfer rate)
– 'Time to transfer' > 'Time to seek'
• Например, пусть будет
– seek time = 10ms
– transfer rate = 100 MB/s
• Для достижения seek time равного 1% от transfer
rate размер блока должен быть 100Мб
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Репликация блоков
• Namenode определяет, куда копировать реплики
блоков
• Размещение блоков зависит от того, в какой стойке
стоит сервер (rack aware)
– Баланс между надежностью и производительностью
• Попытка снизить нагрузку на сеть (bandwidth)
• Попытка улучшить надежность путем размещения реплик в
разных стойках
– Фактор репликации по умолчанию равен 3
• 1-я реплика на локальную машину
• 2-я реплика на другую машину из той же стойки
• 3-я реплика на машину из другой стойки
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Клиенты, Namenode и Datanodes
• Namenode не выполняет непосредственно
операций чтения/записи данных
– Это одна из причин масштабируемости Hadoop
• Клиент обращается к Namenode для
– обновления неймспейса HDFS
– для получения информации о размещении
блоков для чтения/записи
• Клиент взаимодействует напрямую с
Datanode для чтения/записи данных
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
HDFS: чтение файла
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
NamenodeClient
DatanodeDatanodeDatanode
1
2
3
1. Получить
расположение блоков
2. Прочитать 1й блок
файла
3. Прочитать 2й блок
файла
HDFS: запись файла
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
NamenodeClient
DatanodeDatanodeDatanode
1
2
1. Создать новый файл в
namespace на NN и
определить топологию
блоков
2. Отправить данные на 1-ю DN
3. Отправить данные на 2-ю DN
4. Отправить данные на 3-ю DN
5. Подтверждение
Success/Failure
6. Подтверждение
Success/Failure
7. Подтверждение
Success/Failure
7
3
6
4
5
Namenode: использование памяти
• Для быстрого доступа вся мета-информация о блоках
хранится в ОЗУ Namenode
– Чем больше кластер, тем больше ОЗУ требуется
• Лучше миллионы больших файлов (сотни мегабайт), чем миллиарды
маленьких
• Работает на кластерах из сотен машин
• Hadoop 2+
– Namenode Federation
• Каждая Namenode управляет частью блоков
• Горизонтальное масштабирование Namenode
– Поддержка кластеров из тысячи машин
– Детали тут: http://hadoop.apache.org/docs/r2.0.2-alpha/hadoop-
yarn/hadoop-yarn-site/Federation.html
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Namenode: использование памяти
• Изменение размера блока влияет на максимальный
размер FS
– Увеличение размера блока с 64Мб до 128Мб уменьшает
число блоков и существенно увеличивает размер места,
которое NN может обслуживать
– Пример:
• Пусть у нас есть 200Тб = 209,715,200 Мб
• При размере блока 64Мб это соответствует 3,276,800 блоков
– 209,715,200Mб / 64Mб = 3,276,800 блоков
• При размере блока 128Мб это соответствует 1,638,400 блоков
– 209,715,200Mб / 128Mб = 1,638,400 блоков
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Fault-tolerance в Namenode
• Процесс демона NN должен быть запущен все время
– Если демон падает, то HDFS не работает (и обычно весь кластер
тоже)
• Namenode – это единая точка отказа (single point of failure)
– Должна работать на отдельной надежной машине
– Обычно, это не бывает проблемой
• Hadoop 2+
– High Availability Namenode
• Процесс Active Standby всегда запущен и берет на себя управления в случае
падения NN
• Все еще в процессе тестирования
– Более подробно тут:
• http://hadoop.apache.org/docs/r2.0.2-alpha/hadoop-yarn/hadoop-yarn-
site/HDFSHighAvailability.html
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Доступ к HDFS
• Способы доступа
– Direct Access
• Взаимодействует с HDFS с помощью нативного
клиента
• Java, C++
– Через Proxy Server
• Досутп к HDFS через Proxy Server – middle man
• Серверы REST, Thrift и Avro
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Direct Access
• API для Java и C++
• Клиент запрашивает метаданные (такие, как расположение
блоков) от NN
• Клиент напрямую запрашивает данные от DN
• Java API
– Наиболее часто используется
• Используется для MapReduce
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Namenode
Datanode
Datanode
Java Client
Java Client
Java Client
. . . . . .
Доступ через Proxy Server
• Клиент работает через внешний Proxy Server
– Т.о. должна быть независимость от языка
• Существует несколько серверов в поставке с Hadoop
– Thrift – язык определения интерфейса
– WebHDFS REST – ответы в формате JSON, XML или Protocol
Buffers
– Avro – механизм сериализации
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Namenode
Datanode
Datanode
Client
Client
Client
Proxy
Server
. . . . . .
HDFS Shell
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Команды Shell
• Взаимодействие с FS через стандартный unix-shell
• Использование:
$hdfs dfs -<command> -<option> <URI>
– Example $hdfs dfs -ls /
• URI usage:
– HDFS: $hdfs dfs -ls hdfs://localhost/to/path/dir
– Local: $hdfs dfs -ls file:///to/path/file3
– Схема и имя хоста NN опиционально, по-умолчанию
используется параметр из конфигурации
• В core-site.xml - fs.default.name property
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Hadoop URI
scheme://autority/path
hdfs://localhost:8020/user/home
scheme authority HDFS path
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Команды в shell
• Большинство команд ведет себя схожим
образом, что и команды в Unix
– cat, rm, ls, du …
• Поддержка специфичных для HDFS операций
– Напр., смена фактора репликации
• Вывод списка команд
– $ hdfs dfs –help
• Показать детальную информацию по команде
– $ hdfs dfs -help <command_name>
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Основные команды в shell
• cat – вывод источника в stdout
– Весь файл: $hdfs dfs -cat /dir/file.txt
– Полезно вывод перенаправить через pipe в less, head, tail
и т.д.
– Получить первые 100 строк из файла
• $hdfs dfs -cat /dir/file.txt | head -n 100
• ls – отобразить файловую статистику, для директории
отобразить вложенные директории и файлы
– $hdfs dfs -ls /dir/
• mkdir – создать директорию
– $hdfs dfs -mkdir /dir
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Копирование данных в shell
• cp – скопировать файлы из одного места в другое
– $hdfs dfs -cp /dir/file1 /otherDir/file2
• mv – перемещение файла из одного места в другое
– $hdfs dfs -mv /dir/file1 /dir2
• put – копирование файла из локальной FS в HDFS
– $hdfs dfs -put localfile /dir/file1
– copyFromLocal
• get – копирование файла из HDFS в локальную FS
– $hdfs dfs -get /dir/file1 localfile
– copyToLocal
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Удаление и статистика в shell
• rm – удалить файл (в корзину)
– $hdfs dfs -rm /dir/file
• rm -r – удалить рекурсивно директорию
– $hdfs dfs -rm -r /dir
• du – отобразить размер файла или директории в
байтах
– $hdfs dfs -du /dir/
• du -h – отобразить размер файла или директории в
удобно-читаемом формате
– $hdfs dfs -du –h /dir/
65M /dir
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Остальные команды в shell
• Другие команды
– chmod, count, test, tail и т.д.
• Чтобы узнать больше
– $hdfs dfs -help
– $hdfs dfs -help <command>
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Команда fsck
• Проверка неконсистентности файловой системы
• Показывает проблемы
– Отсутствующие блоки
– Недореплицированные блоки
• Не устраняет проблем, только информация
– Namenode попытается автоматически исправить
проблемы
• $ hdfs fsck <path>
– Напр., $ hdfs fsck /
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Права в HDFS
• Ограничения на уровне файла/директории
– Сходство с моделью прав в POSIX
– Read (r), Write (w) и Execute (x)
– Разделяется на пользователя, группу и всех остальных
• Права пользователя определяются исходя из прав той ОС, где он
запускает клиентское приложение
• Авторизация через Kerberos
– Hadoop 0.20.20+
– http://hadoop.apache.org/common/docs/r0.23.0/hadoop-yarn/hadoop-
yarnsite/ClusterSetup.html
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
[cloudera@localhost ~]$ hadoop fs -ls /user/cloudera/wordcount/output
Found 3 items
-rw-r--r-- 3 cloudera cloudera 0 2014-03-15 11:56 /user/cloudera/wordcount/output/_SUCCESS
drwxr-xr-x - cloudera cloudera 0 2014-03-15 11:56 /user/cloudera/wordcount/output/_logs
-rw-r--r-- 3 cloudera cloudera 31 2014-03-15 11:56 /user/cloudera/wordcount/output/part-00000
Команда DFSAdmin
• Команды для администрирования HDFS
– $hdfs dfsadmin <command>
– Напр.: $hdfs dfsadmin –report
• report – отображает статистику по HDFS
– Часть из этого также доступна в веб-интерфейсе
• safemode – переключения между режимом
safemode для проведения административных
работ
– Upgrade, backup и т.д.
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Балансер HDFS
• Блоки в HDFS могут быть неравномерно
распределены по всем Datanode’ам кластера
– К примеру, при добавлении новых машин они будут
какое-то время почти пустыми, т.к. новые данные
будут записываться исходи из топологии
• Балансер – это утилита, которая автоматически
анализирует расположение блоков в HDFS и
старается его сбалансировать
– $ hdfs balancer
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
HDFS API
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
File System Java API
• org.apache.hadoop.fs.FileSystem
– Абстрактный класс, которые представляет
абстрактную файловую систему
– (!) Это именно класс, а не интерфейс
• Реализуется в различных вариантах
– Напр., локальная или распределенная
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Реализации FileSystem
• Hadoop предоставляет несколько конкретных реализаций
– org.apache.hadoop.fs.LocalFileSystem
• Подходит для нативных FS, использующих локальные диски
– org.apache.hadoop.hdfs.DistributedFileSystem
• Hadoop Distributed File System (HDFS)
– org.apache.hadoop.hdfs.HftpFileSystem
• Доступ к HDFS в read-only режиме через HTTP
– org.apache.hadoop.fs.ftp.FTPFileSystem
• Файловая система поверх FTP-сервера
• Различные реализации для разных задач
• Для работы с HDFS обычно используется
– org.apache.hadoop.hdfs.DistributedFileSystem
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Пример SimpleLocalLs.java
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
public class SimpleLocalLs {
public static void main(String[] args) throws Exception{
Path path = new Path("/");
if ( args.length == 1 ){
path = new Path(args[0]);
}
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FileStatus [] files = fs.listStatus(path);
for (FileStatus file : files ){
System.out.println(file.getPath().getName());
}
}
}
FileSystem API: Path
• Объект Path в Hadoop представляет файл или
директорию
– java.io.File сильно завязан на локальную FS
• Path – это на самом деле URI в FS
– HDFS: hdfs://localhost/user/file1
– Local: file:///user/file1
• Пример:
– new Path("/test/file1.txt");
– new Path("hdfs://localhost:9000/test/file1.txt");
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Объект Configuration
• Объект Configuration хранит конфигурацию сервера и клиента
– Довольно много где используется в Hadoop
• HDFS, MapReduce, Hbase,..
• Использует простую парадигму key-value
– Является враппером надо java.util.Properties,
– Который в свою очередь враппер над java.util.Hashtable
• Получения значения параметра
– String name = conf.get("fs.default.name");
• returns null если свойства не существует
• Получения значения параметра и вернуть значение по-умолчанию, если
не существует
– String name = conf.get("fs.default.name“, “hdfs://localhost:9000”);
• Также есть типизированные варианты
– getBoolean, getInt, getFloat и т.п.
• float size = conf.getFloat("file.size");
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Объект Configuration
• Обычно инициализируется значениями через
конфигурационный файлы из CLASSPATH (напр.,
conf/coresite.xml и conf/hdfs-site.xml)
– Configuration conf = new Configuration();
conf.addResource(
new Path(HADOOP_HOME + "/conf/coresite.xml"));
• conf.addResource() может принимать как String, так и Path
– conf.addResource("hdfs-site.xml")
– conf.addResource(new Path("/my/location/site.xml")
• По-умолчанию загружает
– core-default.xml
• Расположен в hadoop-common-X.X.X.jar/core-default.xml
– core-site.xml
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Чтение данных из файла
• Создать объект FileSystem
• Открыть InputStream, указывающий на Path
• Скопировать данные по байтам используя
IOUtils
• Закрыть InputStream
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Пример ReadFile.java
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
public class ReadFile {
public static void main(String[] args) throws IOException {
Path file = new Path("/path/to/file.txt");
FileSystem fs = FileSystem.get(new Configuration()); // Open FileSystem
InputStream input = null;
try {
input = fs.open(file); // Open InputStream
IOUtils.copyBytes(input, System.out, 4096); // Copy from Input to Output
Stream
} finally {
IOUtils.closeStream(input); // Close stream
}
}
}
Запись данных в файл
• Создать объект FileSystem
• Открыть OutputStream
– Указывает на Path из FileSystem
– Используем FSDataOutputStream
– Автоматически создаются все директори в пути,
если не существуют
• Копируем данные по байтам используя
IOUtils
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Пример WriteToFile.java
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
public class WriteToFile {
public static void main(String[] args) throws IOException {
String text = "Hello world in HDFS!n";
InputStream in = new BufferedInputStream(
new ByteArrayInputStream(text.getBytes()));
Path file = new Path("/path/to/file.txt");
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf); // Create FileSystem
FSDataOutputStream out = fs.create(file); // Open OutputStream
IOUtils.copyBytes(in, out, conf); // Copy Data
}
}
FileSystem: запись данных
• fs.append(path) – дописать к существующему
файлу
– Поддержка для HDFS
• Нельзя записать в середину файла
• FileSystem.create(Path) создает все
промежуточные директории для заданного
каталога (по умолчанию)
– Если это не нужно, то надо использовать
• public FSDataOutputStream create(Path f, boolean overwrite)
• overwrite = false
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
FileSystem: подстановки (globbing)
• FileSystem имеет поддержку матчинга имени файла
по заданному паттерну используя метод globStatus()
– FileStatus [] files = fs.globStatus(glob);
• Используется для выбора списка файлов по шаблону
• Примеры шаблонов
– ? – любой один символ
– * - любые 0 и больше символов
– [abc] – любой символ из набора в скобках
• [a-z]
– [^a] – любой символ, кроме указанного
– {ab,cd} – любая строка из указанных в скобках
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
Книги
Hadoop: The Definitive Guide
Tom White (Author)
O'Reilly Media; 3rd Edition
Chapter 3: The Hadoop
Distributed Filesystem
Chapter 4: Hadoop I/O
Вопросы?
ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS

More Related Content

PPTX
High performance computing
PDF
MongoDB Lab Manual (1).pdf used in data science
PDF
Лекция 11. Вычислительная модель Pregel
PDF
MySQL: Indexing for Better Performance
PDF
Types of software testing
PDF
Person centered-approach
PPTX
Introduction to NOSQL databases
PDF
Critical infrastructure
High performance computing
MongoDB Lab Manual (1).pdf used in data science
Лекция 11. Вычислительная модель Pregel
MySQL: Indexing for Better Performance
Types of software testing
Person centered-approach
Introduction to NOSQL databases
Critical infrastructure

What's hot (20)

PDF
02 - Hadoop. Архитектура HDFS
PDF
Лекция 2. Основы Hadoop
PDF
Лекция 1. Введение в Big Data и MapReduce
PPTX
Debunking the Myths of HDFS Erasure Coding Performance
PPT
Linux file system nevigation
PDF
Supporting Over a Thousand Custom Hive User Defined Functions
PPTX
Hadoop World 2011: Advanced HBase Schema Design
PDF
HBaseCon 2012 | HBase Schema Design - Ian Varley, Salesforce
PPTX
Apache hive
PDF
Time series with Apache Cassandra - Long version
PDF
Facebook Messages & HBase
ODP
The PostgreSQL Query Planner
PPSX
User Administration in Linux
DOCX
Linux admin interview questions
PDF
OOCSS, SMACSS or BEM?
PPT
Basic 50 linus command
PDF
CSS Best practice
PDF
Linux file commands and shell scripts
PPTX
Introduction to Storm
PPTX
DOM and Events
02 - Hadoop. Архитектура HDFS
Лекция 2. Основы Hadoop
Лекция 1. Введение в Big Data и MapReduce
Debunking the Myths of HDFS Erasure Coding Performance
Linux file system nevigation
Supporting Over a Thousand Custom Hive User Defined Functions
Hadoop World 2011: Advanced HBase Schema Design
HBaseCon 2012 | HBase Schema Design - Ian Varley, Salesforce
Apache hive
Time series with Apache Cassandra - Long version
Facebook Messages & HBase
The PostgreSQL Query Planner
User Administration in Linux
Linux admin interview questions
OOCSS, SMACSS or BEM?
Basic 50 linus command
CSS Best practice
Linux file commands and shell scripts
Introduction to Storm
DOM and Events
Ad

Viewers also liked (9)

PDF
Лекция 12. Spark
PDF
Лекция 14. Hadoop в Поиске Mail.Ru
PDF
Лекция 6. MapReduce в Hadoop (графы)
PDF
Лекция 13. YARN
PDF
Лекция 7. Введение в Pig и Hive
PDF
Лекция 4. MapReduce в Hadoop (введение)
PDF
Лекция 5. MapReduce в Hadoop (алгоритмы)
PDF
Лекция 9. ZooKeeper
PDF
Лекция 10. Apache Mahout
Лекция 12. Spark
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 6. MapReduce в Hadoop (графы)
Лекция 13. YARN
Лекция 7. Введение в Pig и Hive
Лекция 4. MapReduce в Hadoop (введение)
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 9. ZooKeeper
Лекция 10. Apache Mahout
Ad

Similar to Лекция 3. Распределённая файловая система HDFS (20)

PDF
03 - Hadoop. HDFS Shell-команды
PDF
Обзор архитектуры [файловой] системы Ceph
PDF
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
PDF
Alex Krasheninnikov – Hadoop High Availability
PDF
Administrarea DSpace
PDF
12 - Hadoop. HBase и Cassandra
PDF
Мастер-класс по BigData Tools для HappyDev'15
PDF
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
PPTX
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
PPTX
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
PPTX
установка и настройка файлового сервера и сервера печати
PDF
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
PDF
Linux files, file systems, block devices.
PDF
Обзор Redis storage / Symfony Camp UA 2011
PPT
XML Native Database на примере SednaXML
PDF
Instalarea DSpace
PPT
Sef Kolotygin.V4
PPT
Использование NTFS Reparse points на примере Windows HSM
03 - Hadoop. HDFS Shell-команды
Обзор архитектуры [файловой] системы Ceph
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Alex Krasheninnikov – Hadoop High Availability
Administrarea DSpace
12 - Hadoop. HBase и Cassandra
Мастер-класс по BigData Tools для HappyDev'15
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
установка и настройка файлового сервера и сервера печати
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Linux files, file systems, block devices.
Обзор Redis storage / Symfony Camp UA 2011
XML Native Database на примере SednaXML
Instalarea DSpace
Sef Kolotygin.V4
Использование NTFS Reparse points на примере Windows HSM

More from Technopark (18)

PPTX
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
PPT
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
PPTX
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
PPTX
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
PPTX
СУБД 2013 Лекция №5 "Определение узких мест"
PPTX
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
PPTX
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
PPTX
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
PPTX
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
PPTX
СУБД 2013 Лекция №1 "Введение и начало проектирования"
PDF
Java осень 2014 занятие 8
PDF
Java осень 2014 занятие 7
PDF
Java осень 2014 занятие 6
PDF
Java осень 2014 занятие 5
PDF
Java осень 2014 занятие 3
PDF
Java осень 2014 занятие 1
PDF
Java осень 2014 занятие 2
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
Java осень 2014 занятие 8
Java осень 2014 занятие 7
Java осень 2014 занятие 6
Java осень 2014 занятие 5
Java осень 2014 занятие 3
Java осень 2014 занятие 1
Java осень 2014 занятие 2

Лекция 3. Распределённая файловая система HDFS

  • 1. Методы распределенной обработки больших объемов данных в Hadoop Москва 2014 Лекция 3: Распределенная файловая система HDFS
  • 2. Архитектура HDFS ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 3. HDFS • Hadoop Distributed File System • Для пользователя как “один большой диск” • Работает поверх обычных файловых систем – Ext3, Ext4, XFS • Основывается на архитектуре Google's Filesystem GFS – research.google.com/archive/gfs-sosp2003.pdf • Fault Tolerant – Умеет справляться с выходом из строя дисков, машин и т.д. ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 4. Используется обычное “железо” • “Дешевое”серверное оборудование – Нет суперкомпьютерам! – Нет десктопам! – Да обычным (ненадежным) серверам! ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 5. HDFS хорошо подходит для… • Хранения больших файлов – Терабайты, петабайты… – Миллионы (но не миллиарды) файлов – Файлы размером от 100 Мб • Стриминг данных – Паттерн “write once / read-many times” – Оптимизация под последовательное чтение • Нет операциям произвольного чтения – Операция append появилась в Hadoop 0.21 • Обычные сервера – Менее надежные, чем суперкомпьютеры ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 6. HDFS не подходит для… • Low-latency reads – Высокая пропускная способность большого объема данных (high-throughput) вместо небольшого времени доступа к небольшим порциям данных (low latency) – HBase помогает решать эту задачу • Большое количество небольших файлов – Лучше миллион больших файлов, чем миллиард маленьких • Напр. каждый файл размером от 100Мб • Многопоточная запись – Один процесс записи на файл – Данные дописываются в конец файла • Нет поддержки записи по смещению ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 7. Демоны HDFS • Для управления файловой системой есть три типа демонов – Namenode • Отвечает за файловое пространство (namespace), мета-ифномрацию и расположение блоков файлов • Запускается на 1й (выделенной) машине – Datanode • Хранит и отдает блоки данных • Отправляет ответы о состоянии на Namenode • Запускается обычно на всех машинах кластера – Secondary Namenode • Периодически обновляет fsimage • Требует то же железо, что и Namenode • (!) Не используется для high-availability, т.е. это не backup для Namenode ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 8. Демоны HDFS ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS Secondary Namenode Namenode Datanode 1 Datanode 2 Datanode 3…
  • 9. Файлы и блоки • Файлы в HDFS состоят из блоков – Блок – единица хранения данных • Управляется через Namenode • Хранится на Datanode • Реплицируются по машинам в процессе записи – Один и тот же блок хранится на нескольких Datanode – Фактор репликации по умолчанию равен 3 – Это нужно для fault-tolerance и упрощения доступа ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 10. Rack #NRack #1 Файлы и блоки ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS Namenode Datanode B1 DatanodeDatanode B1 DatanodeDatanode B1 large_file.txt = block 1 + block 2 Один и тот же блок B2 B2B2
  • 11. Блоки в HDFS • Стандартный размер блоков 64Мб или 128Мб • Основной мотив этого – снизить стоимость seek time по сравнению со скоростью передачи данных (transfer rate) – 'Time to transfer' > 'Time to seek' • Например, пусть будет – seek time = 10ms – transfer rate = 100 MB/s • Для достижения seek time равного 1% от transfer rate размер блока должен быть 100Мб ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 12. Репликация блоков • Namenode определяет, куда копировать реплики блоков • Размещение блоков зависит от того, в какой стойке стоит сервер (rack aware) – Баланс между надежностью и производительностью • Попытка снизить нагрузку на сеть (bandwidth) • Попытка улучшить надежность путем размещения реплик в разных стойках – Фактор репликации по умолчанию равен 3 • 1-я реплика на локальную машину • 2-я реплика на другую машину из той же стойки • 3-я реплика на машину из другой стойки ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 13. Клиенты, Namenode и Datanodes • Namenode не выполняет непосредственно операций чтения/записи данных – Это одна из причин масштабируемости Hadoop • Клиент обращается к Namenode для – обновления неймспейса HDFS – для получения информации о размещении блоков для чтения/записи • Клиент взаимодействует напрямую с Datanode для чтения/записи данных ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 14. HDFS: чтение файла ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS NamenodeClient DatanodeDatanodeDatanode 1 2 3 1. Получить расположение блоков 2. Прочитать 1й блок файла 3. Прочитать 2й блок файла
  • 15. HDFS: запись файла ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS NamenodeClient DatanodeDatanodeDatanode 1 2 1. Создать новый файл в namespace на NN и определить топологию блоков 2. Отправить данные на 1-ю DN 3. Отправить данные на 2-ю DN 4. Отправить данные на 3-ю DN 5. Подтверждение Success/Failure 6. Подтверждение Success/Failure 7. Подтверждение Success/Failure 7 3 6 4 5
  • 16. Namenode: использование памяти • Для быстрого доступа вся мета-информация о блоках хранится в ОЗУ Namenode – Чем больше кластер, тем больше ОЗУ требуется • Лучше миллионы больших файлов (сотни мегабайт), чем миллиарды маленьких • Работает на кластерах из сотен машин • Hadoop 2+ – Namenode Federation • Каждая Namenode управляет частью блоков • Горизонтальное масштабирование Namenode – Поддержка кластеров из тысячи машин – Детали тут: http://hadoop.apache.org/docs/r2.0.2-alpha/hadoop- yarn/hadoop-yarn-site/Federation.html ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 17. Namenode: использование памяти • Изменение размера блока влияет на максимальный размер FS – Увеличение размера блока с 64Мб до 128Мб уменьшает число блоков и существенно увеличивает размер места, которое NN может обслуживать – Пример: • Пусть у нас есть 200Тб = 209,715,200 Мб • При размере блока 64Мб это соответствует 3,276,800 блоков – 209,715,200Mб / 64Mб = 3,276,800 блоков • При размере блока 128Мб это соответствует 1,638,400 блоков – 209,715,200Mб / 128Mб = 1,638,400 блоков ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 18. Fault-tolerance в Namenode • Процесс демона NN должен быть запущен все время – Если демон падает, то HDFS не работает (и обычно весь кластер тоже) • Namenode – это единая точка отказа (single point of failure) – Должна работать на отдельной надежной машине – Обычно, это не бывает проблемой • Hadoop 2+ – High Availability Namenode • Процесс Active Standby всегда запущен и берет на себя управления в случае падения NN • Все еще в процессе тестирования – Более подробно тут: • http://hadoop.apache.org/docs/r2.0.2-alpha/hadoop-yarn/hadoop-yarn- site/HDFSHighAvailability.html ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 19. Доступ к HDFS • Способы доступа – Direct Access • Взаимодействует с HDFS с помощью нативного клиента • Java, C++ – Через Proxy Server • Досутп к HDFS через Proxy Server – middle man • Серверы REST, Thrift и Avro ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 20. Direct Access • API для Java и C++ • Клиент запрашивает метаданные (такие, как расположение блоков) от NN • Клиент напрямую запрашивает данные от DN • Java API – Наиболее часто используется • Используется для MapReduce ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS Namenode Datanode Datanode Java Client Java Client Java Client . . . . . .
  • 21. Доступ через Proxy Server • Клиент работает через внешний Proxy Server – Т.о. должна быть независимость от языка • Существует несколько серверов в поставке с Hadoop – Thrift – язык определения интерфейса – WebHDFS REST – ответы в формате JSON, XML или Protocol Buffers – Avro – механизм сериализации ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS Namenode Datanode Datanode Client Client Client Proxy Server . . . . . .
  • 22. HDFS Shell ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 23. Команды Shell • Взаимодействие с FS через стандартный unix-shell • Использование: $hdfs dfs -<command> -<option> <URI> – Example $hdfs dfs -ls / • URI usage: – HDFS: $hdfs dfs -ls hdfs://localhost/to/path/dir – Local: $hdfs dfs -ls file:///to/path/file3 – Схема и имя хоста NN опиционально, по-умолчанию используется параметр из конфигурации • В core-site.xml - fs.default.name property ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 24. Hadoop URI scheme://autority/path hdfs://localhost:8020/user/home scheme authority HDFS path ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 25. Команды в shell • Большинство команд ведет себя схожим образом, что и команды в Unix – cat, rm, ls, du … • Поддержка специфичных для HDFS операций – Напр., смена фактора репликации • Вывод списка команд – $ hdfs dfs –help • Показать детальную информацию по команде – $ hdfs dfs -help <command_name> ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 26. Основные команды в shell • cat – вывод источника в stdout – Весь файл: $hdfs dfs -cat /dir/file.txt – Полезно вывод перенаправить через pipe в less, head, tail и т.д. – Получить первые 100 строк из файла • $hdfs dfs -cat /dir/file.txt | head -n 100 • ls – отобразить файловую статистику, для директории отобразить вложенные директории и файлы – $hdfs dfs -ls /dir/ • mkdir – создать директорию – $hdfs dfs -mkdir /dir ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 27. Копирование данных в shell • cp – скопировать файлы из одного места в другое – $hdfs dfs -cp /dir/file1 /otherDir/file2 • mv – перемещение файла из одного места в другое – $hdfs dfs -mv /dir/file1 /dir2 • put – копирование файла из локальной FS в HDFS – $hdfs dfs -put localfile /dir/file1 – copyFromLocal • get – копирование файла из HDFS в локальную FS – $hdfs dfs -get /dir/file1 localfile – copyToLocal ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 28. Удаление и статистика в shell • rm – удалить файл (в корзину) – $hdfs dfs -rm /dir/file • rm -r – удалить рекурсивно директорию – $hdfs dfs -rm -r /dir • du – отобразить размер файла или директории в байтах – $hdfs dfs -du /dir/ • du -h – отобразить размер файла или директории в удобно-читаемом формате – $hdfs dfs -du –h /dir/ 65M /dir ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 29. Остальные команды в shell • Другие команды – chmod, count, test, tail и т.д. • Чтобы узнать больше – $hdfs dfs -help – $hdfs dfs -help <command> ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 30. Команда fsck • Проверка неконсистентности файловой системы • Показывает проблемы – Отсутствующие блоки – Недореплицированные блоки • Не устраняет проблем, только информация – Namenode попытается автоматически исправить проблемы • $ hdfs fsck <path> – Напр., $ hdfs fsck / ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 31. Права в HDFS • Ограничения на уровне файла/директории – Сходство с моделью прав в POSIX – Read (r), Write (w) и Execute (x) – Разделяется на пользователя, группу и всех остальных • Права пользователя определяются исходя из прав той ОС, где он запускает клиентское приложение • Авторизация через Kerberos – Hadoop 0.20.20+ – http://hadoop.apache.org/common/docs/r0.23.0/hadoop-yarn/hadoop- yarnsite/ClusterSetup.html ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS [cloudera@localhost ~]$ hadoop fs -ls /user/cloudera/wordcount/output Found 3 items -rw-r--r-- 3 cloudera cloudera 0 2014-03-15 11:56 /user/cloudera/wordcount/output/_SUCCESS drwxr-xr-x - cloudera cloudera 0 2014-03-15 11:56 /user/cloudera/wordcount/output/_logs -rw-r--r-- 3 cloudera cloudera 31 2014-03-15 11:56 /user/cloudera/wordcount/output/part-00000
  • 32. Команда DFSAdmin • Команды для администрирования HDFS – $hdfs dfsadmin <command> – Напр.: $hdfs dfsadmin –report • report – отображает статистику по HDFS – Часть из этого также доступна в веб-интерфейсе • safemode – переключения между режимом safemode для проведения административных работ – Upgrade, backup и т.д. ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 33. Балансер HDFS • Блоки в HDFS могут быть неравномерно распределены по всем Datanode’ам кластера – К примеру, при добавлении новых машин они будут какое-то время почти пустыми, т.к. новые данные будут записываться исходи из топологии • Балансер – это утилита, которая автоматически анализирует расположение блоков в HDFS и старается его сбалансировать – $ hdfs balancer ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 34. HDFS API ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 35. File System Java API • org.apache.hadoop.fs.FileSystem – Абстрактный класс, которые представляет абстрактную файловую систему – (!) Это именно класс, а не интерфейс • Реализуется в различных вариантах – Напр., локальная или распределенная ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 36. Реализации FileSystem • Hadoop предоставляет несколько конкретных реализаций – org.apache.hadoop.fs.LocalFileSystem • Подходит для нативных FS, использующих локальные диски – org.apache.hadoop.hdfs.DistributedFileSystem • Hadoop Distributed File System (HDFS) – org.apache.hadoop.hdfs.HftpFileSystem • Доступ к HDFS в read-only режиме через HTTP – org.apache.hadoop.fs.ftp.FTPFileSystem • Файловая система поверх FTP-сервера • Различные реализации для разных задач • Для работы с HDFS обычно используется – org.apache.hadoop.hdfs.DistributedFileSystem ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 37. Пример SimpleLocalLs.java ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS public class SimpleLocalLs { public static void main(String[] args) throws Exception{ Path path = new Path("/"); if ( args.length == 1 ){ path = new Path(args[0]); } Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); FileStatus [] files = fs.listStatus(path); for (FileStatus file : files ){ System.out.println(file.getPath().getName()); } } }
  • 38. FileSystem API: Path • Объект Path в Hadoop представляет файл или директорию – java.io.File сильно завязан на локальную FS • Path – это на самом деле URI в FS – HDFS: hdfs://localhost/user/file1 – Local: file:///user/file1 • Пример: – new Path("/test/file1.txt"); – new Path("hdfs://localhost:9000/test/file1.txt"); ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 39. Объект Configuration • Объект Configuration хранит конфигурацию сервера и клиента – Довольно много где используется в Hadoop • HDFS, MapReduce, Hbase,.. • Использует простую парадигму key-value – Является враппером надо java.util.Properties, – Который в свою очередь враппер над java.util.Hashtable • Получения значения параметра – String name = conf.get("fs.default.name"); • returns null если свойства не существует • Получения значения параметра и вернуть значение по-умолчанию, если не существует – String name = conf.get("fs.default.name“, “hdfs://localhost:9000”); • Также есть типизированные варианты – getBoolean, getInt, getFloat и т.п. • float size = conf.getFloat("file.size"); ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 40. Объект Configuration • Обычно инициализируется значениями через конфигурационный файлы из CLASSPATH (напр., conf/coresite.xml и conf/hdfs-site.xml) – Configuration conf = new Configuration(); conf.addResource( new Path(HADOOP_HOME + "/conf/coresite.xml")); • conf.addResource() может принимать как String, так и Path – conf.addResource("hdfs-site.xml") – conf.addResource(new Path("/my/location/site.xml") • По-умолчанию загружает – core-default.xml • Расположен в hadoop-common-X.X.X.jar/core-default.xml – core-site.xml ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 41. Чтение данных из файла • Создать объект FileSystem • Открыть InputStream, указывающий на Path • Скопировать данные по байтам используя IOUtils • Закрыть InputStream ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 42. Пример ReadFile.java ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS public class ReadFile { public static void main(String[] args) throws IOException { Path file = new Path("/path/to/file.txt"); FileSystem fs = FileSystem.get(new Configuration()); // Open FileSystem InputStream input = null; try { input = fs.open(file); // Open InputStream IOUtils.copyBytes(input, System.out, 4096); // Copy from Input to Output Stream } finally { IOUtils.closeStream(input); // Close stream } } }
  • 43. Запись данных в файл • Создать объект FileSystem • Открыть OutputStream – Указывает на Path из FileSystem – Используем FSDataOutputStream – Автоматически создаются все директори в пути, если не существуют • Копируем данные по байтам используя IOUtils ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 44. Пример WriteToFile.java ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS public class WriteToFile { public static void main(String[] args) throws IOException { String text = "Hello world in HDFS!n"; InputStream in = new BufferedInputStream( new ByteArrayInputStream(text.getBytes())); Path file = new Path("/path/to/file.txt"); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); // Create FileSystem FSDataOutputStream out = fs.create(file); // Open OutputStream IOUtils.copyBytes(in, out, conf); // Copy Data } }
  • 45. FileSystem: запись данных • fs.append(path) – дописать к существующему файлу – Поддержка для HDFS • Нельзя записать в середину файла • FileSystem.create(Path) создает все промежуточные директории для заданного каталога (по умолчанию) – Если это не нужно, то надо использовать • public FSDataOutputStream create(Path f, boolean overwrite) • overwrite = false ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 46. FileSystem: подстановки (globbing) • FileSystem имеет поддержку матчинга имени файла по заданному паттерну используя метод globStatus() – FileStatus [] files = fs.globStatus(glob); • Используется для выбора списка файлов по шаблону • Примеры шаблонов – ? – любой один символ – * - любые 0 и больше символов – [abc] – любой символ из набора в скобках • [a-z] – [^a] – любой символ, кроме указанного – {ab,cd} – любая строка из указанных в скобках ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS
  • 47. ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS Книги Hadoop: The Definitive Guide Tom White (Author) O'Reilly Media; 3rd Edition Chapter 3: The Hadoop Distributed Filesystem Chapter 4: Hadoop I/O
  • 48. Вопросы? ЛЕКЦИЯ 3: РАСПРЕДЕЛЕННАЯ ФАЙЛОВАЯ СИСТЕМА HDFS