Где в файловой системе Linux я могу увидеть файлы Hadoop HDFS?

Я всего лишь аналитик данных из не-CS (не хардкорный системный программист), работающий на Linux. При использовании анализа с использованием hadoop мне приходило в голову, что ... / это корень, в котором все файлы вашей системы существуют иерархически. В среде hadoop существует специальная файловая система, называемая HDFS, которая на самом деле предназначена для хранения огромных файлов, которые должны обрабатываться средами программирования hadoop.

hadoop -fs put localfile.txt 

Хотя такие файлы должны быть доступны в /. Итак, где я могу увидеть такие файлы, используя команды cat, less или more linux без префикса hadoop -fs

Если, к сожалению, я получаю ошибку в среде hadoop / HDFS, то как я могу получить доступ к своим данным, которые все еще живу на моей машине с Linux.

5
задан 15.04.2020, 23:33

5 ответов

На самом деле вы можете отслеживать содержимое вашего файла, используя:

hdfs dfs -cat /user/test/somefile.txt

В Hadoop Namenode хранит всю информацию о файлах, такую ​​как имя файла, метаданные, каталог, разрешение, блоки, которые формируют файл, и блокировать локации. В случае сбоя namenode вы потеряете файлы, так как вы не знаете, какие блоки образуют какой файл, хотя у вас есть все содержимое на датодах.

Поскольку файлы хранятся в виде блоков в Hadoop, если вы знаете blockid и датододы файлов, вы можете видеть их содержимое. Здесь мы предполагаем, что файлы являются текстовыми файлами.

Наконец, HDFS поддерживает отображение каталога HDFS на локальный общий ресурс NFS. Таким образом, вы можете получить доступ к hdfs без использования каких-либо специальных команд hdfs.

1
ответ дан 15.04.2020, 23:34

Hadoop хранит эти данные локально в виде блоков на каждом датоде, и это свойство настраивается в файле hdfs-site.xml в свойстве dfs.data.dir

[ 112] В большинстве случаев это

$HADOOP_HOME/data/dfs/data/hadoop-${user.name}/current
1
ответ дан 15.04.2020, 23:35

Вы можете использовать утилиту hdfs fsck , чтобы найти имя блока, а затем вручную найти его в локальной файловой системе:

$ echo "Hello world" >> test.txt
$ hdfs dfs -put test.txt /tmp/
$ hdfs fsck /tmp/test.txt -files -blocks
/tmp/test.txt 12 bytes, 1 block(s):  OK
    0. BP-1186293916-10.25.5.169-1427746975858:blk_1075191146_1451047 len=12 repl=1

Обратите внимание на строку blk_..... Используйте это, чтобы найти файл:

$ find /hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized -name 'blk_1075191146*'
/hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146_1451047.meta
/hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146

$ cat /hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146
Hello world

Вы можете увидеть полный пример с объяснением здесь

1
ответ дан 15.04.2020, 23:36

Вы не можете напрямую просматривать HDFS с терминала, используя cat или аналогичные команды. HDFS - это логическая файловая система, которая напрямую не связана с файловой системой Unix. У вас должен быть клиент HDFS, и ваш кластер Hadoop должен быть запущен. Когда вы просматриваете HDFS, вы получаете структуру каталогов из namenode и фактические данные из datanodes.

Несмотря на то, что вы не можете просматривать, данные там хранятся демоном datanode. Его путь указывается свойством dfs.data.dir в hdfs-site.xml.

Структура каталогов хранится демоном namenode, и его путь указывается свойством dfs.name.dir в hdfs-site.xml

4
ответ дан 15.04.2020, 23:36

Вы можете перейти ко всем файлам, которыми управляет hadoop , просто написав следующую команду:

Более подходящей командой является hdfs dfs -ls

Данная команда на терминале linux будет отображаться вывод каталога / , в котором в 1-м столбце показаны права доступа к файлу, во 2-м столбце отображается пользователь файла, а в 3-м столбце отображается имя файла

0
ответ дан 15.04.2020, 23:37

Теги

Похожие вопросы