Открытие файла, хранящегося в 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 " (не показано здесь для ясности).