Hadoop でファイルをコピーするときに所有権/権限を保持する方法はありますか? 試してみhadoop fs -cp -p <src> <dest>
ました。うまくいきませんでした。
3 に答える
はい、もちろんできます。ただし、 distcpを使用することをお勧めします。これは、クラスター間または同じクラスター上でデータをコピーするための高度なツールであり、実行を最適化するための多くのオプションがあります。このコマンドは mapreduce を実行するため、長いコピーの場合は時間がかからず、すべての属性を保持できます。
例:
hadoop distcp /source_dir/data \
/target_dir/data
hadoop distcp /source_dir/dataA \
/source_dir/dataB \
/target_dir/
すべての属性について:
- r: 複製数
- b: ブロックサイズ
- u: ユーザー
- g: グループ
- p:許可
- c: チェックサムタイプ
- a:ACL
- x: XAttr
- t: タイムスタンプ
別の例ですが、すべての属性を保持します:
hadoop distcp -p rbugpcaxt \
/source_dir/data \
/target_dir/data
このコマンドの詳細については、hadoop-distcpを参照してください 。最も重要なのは、所有者やグループ、またはアクセス許可ではありません。copy コマンドの後で簡単に変更できます。最も重要な属性は、ACL、ブロック サイズ、レプリケーション番号、およびタイムスタンプです。これは、単なるコピー (hdfs dfs -cp) の後で簡単に変更できない追加のプロパティです。
現在、パーミッションのコピー中にファイルの 2 つのコピーを作成することはできません。ただし、ユース ケースによっては、代わりにファイルを移動するオプションがある場合があります。たとえば、ファイルの場所とそのアクセス許可を変更する必要があり、バックアップも保持したかったので (アクセス許可は関係ありません)、アクセス許可を使用して新しい場所に移動し、元の場所にコピーして戻しました。あまり役に立たないことは承知していますが、現時点で Hadoop ではこれが最善です。
ありませんが、ファイルをコピーした後に所有権を変更できます (適切な権限があると仮定します)。