11

ハイブ外部テーブルとして使用するためにファイルを HDFS にインポートするコードを作成しようとしています。次のようなものを使用することがわかりました:

ふー | ssh ホスト名 "hdfs dfs -put - /destination/$FILENAME"

一時ファイルが作成され、完了時に名前が変更されるタイプのエラーが発生する可能性があります。これにより、ディレクトリの一覧表示とクエリの実行の間でハイブの競合状態が発生する可能性があります。

1 つの回避策は、一時ディレクトリにコピーし、ファイルを所定の位置に "hdfs dfs mv" することです。

具体的および一般的/学術的な質問は次のとおりです。

  1. 「hdfs dfs -mv」コマンドはアトミックですよね?
  2. 他にアトミックな HDFS コマンドまたは操作は?
  3. ほぼ同時に発行された 2 つの「hdfs dfs -mkdir」コマンドは、両方とも成功したと信じることができますか?
  4. ファイルを所定の位置に移動するときにハイブとの競合状態を回避するより良い方法はありますか?
4

1 に答える 1

14

Hadoop FS の紹介では、アトミック性の要件を見つけることができます

Hadoop と互換性のあるファイル システムに期待される主な点は次のとおりです。一部のファイル システムは、これらの期待をすべて満たしていません。その結果、一部のプログラムが期待どおりに動作しない場合があります。

原子性

アトミックでなければならない操作がいくつかあります。これは、クラスター内のプロセス間のロック/排他アクセスを実装するためによく使用されるためです。

  1. ファイルを作成しています。上書きパラメーターが false の場合、チェックと作成はアトミックでなければなりません。
  2. ファイルの削除。
  3. ファイルの名前を変更します。
  4. ディレクトリの名前を変更します。
  5. mkdir() で単一のディレクトリを作成します。

...

他のほとんどの操作には、アトミック性の要件や保証はありません。

したがって、基礎となるファイルシステムを確認する必要があります。しかし、これらの要件に基づく回答は次のとおりです。

  1. はい
  2. 上に挙げた
  3. 番号
  4. 私見ファイルの名前を変更することは、仕事に適しています
于 2016-01-07T15:53:47.670 に答える