Открытие файла, хранящегося в HDFS, для редактирования в VI

Я хотел бы отредактировать текстовый файл непосредственно в HDFS с помощью VI без необходимости копировать его в локальный, редактировать его, а затем скопировать его обратно из локального. Возможно ли это?

Edit: это было возможно в пользовательском интерфейсе Hue Cloudera, но больше не так.

5 ответов


есть несколько вариантов, которые вы можете попробовать, что позволяет монтировать HDFS на локальную машину, а затем вы можете использовать свои локальные системные команды, такие как cp, rm, cat, mv, mkdir, rmdir, больше и т. д. Но ни один из них не поддерживает операции случайной записи, но поддерживает операции добавления.

NFS Gateway использует NFS V3 и поддерживает добавление в файл, но не может выполнить случайные операции записи.

и что касается вашего комментария к hue, возможно, Hue загружает файл в локальный буфер, и после редактирования он может заменить исходный файл в HDFS.


файл в HDFS можно заменить с помощью опции-f в hadoop fs-put-f Это устранит необходимость удаления, а затем копирования.


простой способ-копировать из и в hdfs и редактировать локально (посмотреть здесь)

hvim <filename>

исходный код hvim

hadoop fs -text >hvim.txt
vim hvim.txt
hadoop fs -rm -skipTrash 
hadoop fs -copyFromLocal hvim.txt 
rm hvim.txt

файл в HDFS нельзя редактировать напрямую.Даже вы не можете заменить файл в HDFS. только так можно удалить файл и обновить его с помощью нового.

отредактируйте файл в локальном и скопируйте его снова в HDFS. Не забудьте удалить старый файл, если вы хотите сохранить то же имя.


другие ответы здесь верны, вы не можете редактировать файлы в HDFS, поскольку это не файловая система, совместимая с POSIX. Возможны только добавления.

хотя недавно мне пришлось исправить заголовок в файле hdfs, и это лучшее, что я придумал..

sc.textFile(orig_file).map(fix_header).coalesce(1).saveAsTextFile(orig_file +'_fixed')

это код Spark (PySpark). Обратите внимание на объединение(1), чтобы задание не было .. параллельно, но преимущество в том, что вы получаете только один выходной файл. Поэтому просто переместите / переименуйте файл из каталога "orig_file + '_fixed'", чтобы перезаписать оригинал файл.

ps. Ты можешь опустить .coalesce (1) часть и преобразование будет работать параллельно (при условии, большой файл/несколько расколов) и будет намного быстрее, но тогда вам придется объединить выходные файлы hdfs в один.

pps. вызов " map "в конвейере исправляет заголовки через функцию" fix_header " (не показано здесь для ясности).