web-dev-qa-db-ja.com

HDFSに保存されているファイルを開いてVIで編集する

テキストファイルをローカルにコピーせずに、VIを使用してHDFSで直接編集し、編集してからローカルからコピーし直したいと思います。これは可能ですか?

編集:これはClouderaのHue UIで可能でしたが、現在はそうではありません。

10
Michal

試すことができるオプションがいくつかあります。これにより、HDFSをローカルマシンにマウントしてから、cp、rm、cat、mv、mkdir、rmdirなどのローカルシステムコマンドを使用できます。ただし、どちらも使用できません。ランダム書き込み操作をサポートしますが、追加操作をサポートします。

NFSゲートウェイはNFSV3を使用し、ファイルへの追加をサポートしていますが、ランダムな書き込み操作を実行できませんでした。

また、色相に関するコメントに関しては、色相がファイルをローカルバッファーにダウンロードしていて、編集後にHDFSの元のファイルを置き換えている可能性があります。

8
Ashrith

簡単な方法は、hdfsとの間でコピーし、ローカルで編集することです( ここを参照

hvim <filename>

Hvimのソースコード

hadoop fs -text $1>hvim.txt
vim hvim.txt
hadoop fs -rm -skipTrash $1
hadoop fs -copyFromLocal hvim.txt $1
rm hvim.txt
2
Uri Goren

HDFSのファイルは、hadoop fs -put -fの-fオプションを使用して置き換えることができます。これにより、削除してからコピーする必要がなくなります。

1
deeksha

HDFSのファイルを直接編集することはできません。HDFSのファイルを置き換えることもできません。ファイルを削除して新しいファイルで更新する唯一の方法です。

ローカルでファイルを編集し、HDFSで再度コピーします。同じ名前を維持したい場合は、古いファイルを削除することを忘れないでください。

0
Suman

ここでの他の答えは正しいです。HDFSはPOSIX準拠のファイルシステムではないため、ファイルを編集することはできません。追加のみが可能です。

最近、hdfsファイルのヘッダーを修正する必要がありましたが、それが私が思いついた最善の方法です。

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

これはSpark(PySpark)コードです。coalesce(1)に注意してください。ジョブは並列ではありませんが、出力ファイルが1つしかないという利点があります。したがって、ファイルを移動/名前変更するだけです。元のファイルを上書きするための「orig_file + '_ fixed'」ディレクトリ。

ps。 .coalesce(1)の部分を省略すると、変換が並行して実行され(大きなファイル/複数の分割を想定)、はるかに高速になりますが、出力hdfsファイルを1つにマージする必要があります。

pps。パイプラインの「map」呼び出しは、「fix_header」関数を介してヘッダーを修正します(わかりやすくするためにここでは示していません)。

0
Tagar